Index: /issm/trunk-jpl/src/wrappers/Issm/issm.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/Issm/issm.cpp	(revision 19805)
+++ /issm/trunk-jpl/src/wrappers/Issm/issm.cpp	(revision 19806)
@@ -6,5 +6,9 @@
 
 extern "C" { 
-	int IssmModule(double* buffer, int buffersize, char* toolkits,char* solution,char* modelname){
+	int IssmModule(char** poutput,int* poutputsize, double* buffer, int buffersize, char* toolkits,char* solution,char* modelname){
+
+		/*output variables:*/
+		char* output=NULL;
+		size_t size;
 
 		/*Initialize exception trapping: */
@@ -24,5 +28,5 @@
 
 		/*Wrap up: */
-		femmodel->CleanUpJs();
+		femmodel->CleanUpJs(&output,&size);
 
 		/*Delete Model: */
@@ -35,6 +39,10 @@
 		ExceptionTrapEnd();
 
-		/*Return unix success: */
-		return 0; 
+		/*Assign output pointers:*/
+		*poutputsize=(int)size;
+		*poutput=output;
+
+		/*Return output stream: */
+		return 0 ;
 
 	} 
Index: /issm/trunk-jpl/src/wrappers/Issm/issm.js
===================================================================
--- /issm/trunk-jpl/src/wrappers/Issm/issm.js	(revision 19805)
+++ /issm/trunk-jpl/src/wrappers/Issm/issm.js	(revision 19806)
@@ -6,21 +6,33 @@
 		  output is a binary buffer to be read by loadresultsfromcluster.
 */
+	
+	/*variables: */
+	var poutput,output,poutputsize,outputsize;
+	var dbinaryPtr,binHeap,binary,binarybuffer,nb
 
-	var binarybuffer=fid.rawbuffer(); //binarybuffer is now an arraybuffer
-	var nb = fid.ptr; //size of array buffer in bytes.
+	/*recover input buffer: */
+	binarybuffer=fid.rawbuffer(); //binarybuffer is now an arraybuffer
+	nb = fid.ptr; //size of array buffer in bytes.
 
-	/*var dbinary=new Float64Array(binarybuffer); var nb=dbinary.length * dbinary.BYTES_PER_ELEMENT;
-	var dbinaryPtr= Module._malloc(nb); var binHeap = new Uint8Array(Module.HEAPU8.buffer,dbinaryPtr,nb);
-	binHeap.set(new Uint8Array(dbinary.buffer)); var binary=binHeap.byteOffset;*/
+	/*dyanmically allocate the raw buffer onto the Module heap: */
+	dbinaryPtr= Module._malloc(nb); binHeap = new Uint8Array(Module.HEAPU8.buffer,dbinaryPtr,nb);
+	binHeap.set(new Uint8Array(binarybuffer)); binary=binHeap.byteOffset;
 
-	var dbinaryPtr= Module._malloc(nb); var binHeap = new Uint8Array(Module.HEAPU8.buffer,dbinaryPtr,nb);
-	binHeap.set(new Uint8Array(binarybuffer)); var binary=binHeap.byteOffset;
+	/*allocate output pointers: */
+	poutputsize = Module._malloc(4); 
+	poutput = Module._malloc(4); 
 
 	//Declare TriMesh module: 
-	issmmodule= Module.cwrap('IssmModule','number',['number','number','string','string','string']);
+	issmmodule= Module.cwrap('IssmModule','number',['number','number','number','number','string','string','string']);
 	
 	//Call issm:
-	var output = issmmodule(binary, nb, toolkitstring,solutionstring,modelname);
+	issmmodule(poutput, poutputsize,binary, nb, toolkitstring,solutionstring,modelname);
+
+	//recover outputs from pointers: 
+	var outputsize = Module.getValue(poutputsize,'i32');
 	
-	return output;
+	var outputptr = Module.getValue(poutput,'i32');
+	output = Module.HEAP8.slice(outputptr, outputptr + outputsize);
+	
+	return [output,outputsize];
 }
