|  | @@ -546,6 +546,18 @@ function Smalltalk() {
 | 
	
		
			
				|  |  |  		return new_addMethod(method_exJsSelector, klass_exMethod);
 | 
	
		
			
				|  |  |  	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	function propagateMethodChange(klass) {
 | 
	
		
			
				|  |  | +		// If already initialized (else it will be done later anyway),
 | 
	
		
			
				|  |  | +		// re-initialize all subclasses to ensure the method change
 | 
	
		
			
				|  |  | +		// propagation (for wrapped classes, not using the prototype
 | 
	
		
			
				|  |  | +		// chain.
 | 
	
		
			
				|  |  | +		if (initialized) {
 | 
	
		
			
				|  |  | +			st.allSubclasses(klass).forEach(function (subclass) {
 | 
	
		
			
				|  |  | +				st.initClass(subclass);
 | 
	
		
			
				|  |  | +			});
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	// later, st.addMethod can be this:
 | 
	
		
			
				|  |  |  	function new_addMethod(method, klass) {
 | 
	
		
			
				|  |  |  		if (!(method.jsSelector)) {
 | 
	
	
		
			
				|  | @@ -559,15 +571,7 @@ function Smalltalk() {
 | 
	
		
			
				|  |  |  		// Therefore we populate the organizer here too
 | 
	
		
			
				|  |  |  		klass.organization.elements.addElement(method.category);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		// If already initialized (else it will be done later anyway),
 | 
	
		
			
				|  |  | -		// re-initialize all subclasses to ensure the new method
 | 
	
		
			
				|  |  | -		// propagation (for wrapped classes, not using the prototype
 | 
	
		
			
				|  |  | -		// chain.
 | 
	
		
			
				|  |  | -		if(initialized) {
 | 
	
		
			
				|  |  | -			st.allSubclasses(klass).forEach(function(subclass) {
 | 
	
		
			
				|  |  | -				st.initClass(subclass);
 | 
	
		
			
				|  |  | -			});
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | +		propagateMethodChange(klass);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		for(var i=0; i<method.messageSends.length; i++) {
 | 
	
		
			
				|  |  |  			var dnuHandler = dnu.get(method.messageSends[i]);
 | 
	
	
		
			
				|  | @@ -589,15 +593,7 @@ function Smalltalk() {
 | 
	
		
			
				|  |  |  		delete klass.fn.prototype[st.selector(method.selector)];
 | 
	
		
			
				|  |  |  		delete klass.methods[method.selector];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		// If already initialized (else it will be done later anyway),
 | 
	
		
			
				|  |  | -		// re-initialize all subclasses to ensure the method removal
 | 
	
		
			
				|  |  | -		// propagation (for wrapped classes, not using the prototype
 | 
	
		
			
				|  |  | -		// chain.
 | 
	
		
			
				|  |  | -		if(initialized) {
 | 
	
		
			
				|  |  | -			st.allSubclasses(klass).forEach(function(subclass) {
 | 
	
		
			
				|  |  | -				st.initClass(subclass);
 | 
	
		
			
				|  |  | -			});
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | +		propagateMethodChange(klass);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		// Do *not* delete protocols from here.
 | 
	
		
			
				|  |  |  		// This is handled by #removeCompiledMethod
 |