|  | @@ -137,7 +137,7 @@ define(function () {
 | 
	
		
			
				|  |  |          /* Smalltalk method object. To add a method to a class,
 | 
	
		
			
				|  |  |           use api.addMethod() */
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        st.method = function (spec) {
 | 
	
		
			
				|  |  | +        st.method = function (spec, factory) {
 | 
	
		
			
				|  |  |              var that = new SmalltalkMethod();
 | 
	
		
			
				|  |  |              that.selector = spec.selector;
 | 
	
		
			
				|  |  |              that.args = spec.args || [];
 | 
	
	
		
			
				|  | @@ -148,6 +148,7 @@ define(function () {
 | 
	
		
			
				|  |  |              // TODO remove .referencedClasses, have .referencedGlobals
 | 
	
		
			
				|  |  |              that.referencedClasses = spec.referencedClasses || [];
 | 
	
		
			
				|  |  |              that.fn = spec.fn;
 | 
	
		
			
				|  |  | +            if (factory) that.instantiateFn = factory;
 | 
	
		
			
				|  |  |              return that;
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -206,6 +207,9 @@ define(function () {
 | 
	
		
			
				|  |  |                      console.warn("Resetting methodClass of " + newMethod.methodClass.name + " >> " + selector + " to " + traitOrBehavior.name);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |                  newMethod.methodClass = traitOrBehavior;
 | 
	
		
			
				|  |  | +                if (newMethod.instantiateFn) {
 | 
	
		
			
				|  |  | +                    newMethod.fn = newMethod.instantiateFn(traitOrBehavior);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |                  traitOrBehavior.methods[selector] = newMethod;
 | 
	
		
			
				|  |  |                  traitOrBehavior.methodAdded(newMethod);
 | 
	
		
			
				|  |  |              } else {
 |