|  | @@ -279,6 +279,7 @@ function Smalltalk() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	st.initClass = function(klass) {
 | 
	
		
			
				|  |  |  		if(klass.wrapped) {
 | 
	
		
			
				|  |  | +			klass.inheritedMethods = {};
 | 
	
		
			
				|  |  |  			copySuperclass(klass);
 | 
	
		
			
				|  |  |  		} else {
 | 
	
		
			
				|  |  |  			installSuperclass(klass);
 | 
	
	
		
			
				|  | @@ -312,7 +313,7 @@ function Smalltalk() {
 | 
	
		
			
				|  |  |  			superclass && superclass !== nil;
 | 
	
		
			
				|  |  |  			superclass = superclass.superclass) {
 | 
	
		
			
				|  |  |  			for (var keys = Object.keys(superclass.methods), i = 0; i < keys.length; i++) {
 | 
	
		
			
				|  |  | -				installMethodIfAbsent(superclass.methods[keys[i]], klass);
 | 
	
		
			
				|  |  | +				inheritMethodIfAbsent(superclass.methods[keys[i]], klass);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -324,11 +325,15 @@ function Smalltalk() {
 | 
	
		
			
				|  |  |  		});
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	function installMethodIfAbsent(method, klass) {
 | 
	
		
			
				|  |  | -		var jsFunction = klass.fn.prototype[method.jsSelector];
 | 
	
		
			
				|  |  | -		if(!jsFunction || jsFunction.isAmberDNU) {
 | 
	
		
			
				|  |  | -			installMethod(method, klass);
 | 
	
		
			
				|  |  | +	function inheritMethodIfAbsent(method, klass) {
 | 
	
		
			
				|  |  | +		var selector = method.selector;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if(klass.methods.hasOwnProperty(selector) || klass.inheritedMethods.hasOwnProperty(selector)) {
 | 
	
		
			
				|  |  | +			return;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		installMethod(method, klass);
 | 
	
		
			
				|  |  | +		klass.inheritedMethods[method.selector] = true;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	function reinstallMethods(klass) {
 | 
	
	
		
			
				|  | @@ -340,14 +345,21 @@ function Smalltalk() {
 | 
	
		
			
				|  |  |  	function installDnuHandlers(klass) {
 | 
	
		
			
				|  |  |  		var m = dnu.methods;
 | 
	
		
			
				|  |  |  		for(var i=0; i<m.length; i++) {
 | 
	
		
			
				|  |  | -			installMethodIfAbsent(m[i], klass);
 | 
	
		
			
				|  |  | +			installDnuHandlerIfAbsent(m[i], klass);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	function installNewDnuHandler(newHandler) {
 | 
	
		
			
				|  |  | -		installMethodIfAbsent(newHandler, st.Object);
 | 
	
		
			
				|  |  | +		installDnuHandlerIfAbsent(newHandler, st.Object);
 | 
	
		
			
				|  |  |  		for(var i = 0; i < wrappedClasses.length; i++) {
 | 
	
		
			
				|  |  | -			installMethodIfAbsent(newHandler, wrappedClasses[i]);
 | 
	
		
			
				|  |  | +			installDnuHandlerIfAbsent(newHandler, wrappedClasses[i]);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	function installDnuHandlerIfAbsent(handler, klass) {
 | 
	
		
			
				|  |  | +		var jsFunction = klass.fn.prototype[handler.jsSelector];
 | 
	
		
			
				|  |  | +		if(!jsFunction) {
 | 
	
		
			
				|  |  | +			installMethod(handler, klass);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 |