Index: /issm/trunk-jpl/src/m/classes/clusters/generic.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/generic.js	(revision 21027)
+++ /issm/trunk-jpl/src/m/classes/clusters/generic.js	(revision 21028)
@@ -51,12 +51,12 @@
 		$(callbackid).html(sprintf("%-16s", "CONNECTING...")).prop("disabled", true);
 		request.position = 0; //Keep track of current parsing position in repsonseText
-		request.timeout = 30000;
+		request.timeout = 180000;
 		request.ontimeout = function (event) { //{{{
-			$(callbackid).html(sprintf("%-16s", "RUN")).prop("disabled", false);
+			$(callbackid).html(sprintf("%-16s", "TIMEOUT")).prop("disabled", false);
+			callbackerrorfunction();
 		} //}}}
 		request.onerror = function (event) { //{{{
 			$(callbackid).html(sprintf("%-16s", "COULD NOT RUN")).prop("disabled", false);
-			solving=false;
-			console.log(event);
+			callbackerrorfunction();
 		} //}}}
 		request.upload.onprogress = function(event) { //{{{
Index: /issm/trunk-jpl/src/m/solve/solve.js
===================================================================
--- /issm/trunk-jpl/src/m/solve/solve.js	(revision 21027)
+++ /issm/trunk-jpl/src/m/solve/solve.js	(revision 21028)
@@ -103,5 +103,5 @@
 
 	//callback function: 
-	function callbackfunction(){}; //default, do nothing if no callback function requested.
+	function callbackfunction(){solving=false;}; //default, do nothing if no callback function requested.
 	if (options.getfieldvalue('callbackfunction',false)){
 		callbackfunction=options.getfieldvalue('callbackfunction');
@@ -109,5 +109,5 @@
 	
 	//callback error function: 
-	function callbackerrorfunction(){}; //default, do nothing if no callback function requested.
+	function callbackerrorfunction(){solving=false;}; //default, do nothing if no callback function requested.
 	if (options.getfieldvalue('callbackerrorfunction',false)){
 		callbackerrorfunction=options.getfieldvalue('callbackerrorfunction');
