Index: /issm/trunk-jpl/src/m/classes/clusters/generic.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/generic.js	(revision 20269)
+++ /issm/trunk-jpl/src/m/classes/clusters/generic.js	(revision 20270)
@@ -34,5 +34,5 @@
 			}
 		} //}}}
-		this.UploadAndRun = function (fid,toolkitsstring,solutionstring,name) { //{{{
+		this.UploadAndRun = function (md,callbackfunction,fid,toolkitsstring,solutionstring,name) { //{{{
 
 			var oReq = new XMLHttpRequest();
@@ -41,7 +41,8 @@
 
 			oReq.onload = function (oEvent) {
-				var returnBuffer= oReq.response.slice(); 
-				var returnBuffer_size= returnBuffer.byteLength;
-				md.results= loadresultsfrombuffer(md,returnBuffer,returnBuffer_size); 
+				var returnBuffer = new Uint8Array(oReq.response.slice());
+				var returnBuffer_size=returnBuffer.byteLength;
+				md.results= parseresultsfrombuffer(returnBuffer,returnBuffer_size);
+				callbackfunction();
 			};
 
@@ -51,4 +52,3 @@
 
 		} /*}}}*/
-
 	}
Index: /issm/trunk-jpl/src/m/solve/solve.js
===================================================================
--- /issm/trunk-jpl/src/m/solve/solve.js	(revision 20269)
+++ /issm/trunk-jpl/src/m/solve/solve.js	(revision 20270)
@@ -23,4 +23,5 @@
 //      - checkconsistency : 'yes' or 'no' (default is 'yes'), ensures checks on consistency of model
 //      - restart: 'directory name (relative to the execution directory) where the restart file is located.
+//      - callback: callback function to be called upon receiving the results from the server, or local computations. 
 //
 //   Examples:
@@ -101,4 +102,9 @@
 	toolkitsstring= md.toolkits.ToolkitsFile(md.miscellaneous.name + '.toolkits'); // toolkits file
 
+	//callback function: 
+	function callbackfunction(){}; //default, do nothing if no callback requested.
+	if (options.getfieldvalue('callback',false)){
+		callbackfunction=options.getfieldvalue('callback');
+	}
 
 	if (cluster.classname() == 'local'){  //{{{
@@ -116,4 +122,7 @@
 		md.results = loadresultsfrombuffer(md,outputbuffer,outputbuffersize); 
 		
+		//Call back? 
+		callbackfunction();
+
 		return md;
 
@@ -122,5 +131,5 @@
 
 		/*We are running somewhere else on a computational server. Send the buffer to that server and retrieve output: */
-		cluster.UploadAndRun(fid,toolkitsstring,solutionstring,md.miscellaneous.name);
+		cluster.UploadAndRun(md,callbackfunction,fid,toolkitsstring,solutionstring,md.miscellaneous.name);
 
 		return md;
