diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/dashboard/DashboardRunnable.java b/zkwebui/WEB-INF/src/org/adempiere/webui/dashboard/DashboardRunnable.java
index 64cecfb3f3..e85b6f5727 100644
--- a/zkwebui/WEB-INF/src/org/adempiere/webui/dashboard/DashboardRunnable.java
+++ b/zkwebui/WEB-INF/src/org/adempiere/webui/dashboard/DashboardRunnable.java
@@ -75,6 +75,7 @@ public class DashboardRunnable implements Runnable, Serializable
 	{
 		// default Update every one minutes
 		int interval = MSysConfig.getIntValue(ZK_DASHBOARD_REFRESH_INTERVAL, 60000);
+		int cumulativeFailure = 0;
 		while(!stop) {
 			try {
 				Thread.sleep(interval);
@@ -86,14 +87,17 @@ public class DashboardRunnable implements Runnable, Serializable
 				Locales.setThreadLocal(locale);
 				try {
 					refreshDashboard();
+					cumulativeFailure = 0;
 				} catch (DesktopUnavailableException de) {
-					killSession();
-					break;
+					cumulativeFailure++;
 				} catch (Exception e) {
 					logger.log(Level.INFO, e.getLocalizedMessage(), (e.getCause() != null ? e.getCause() : e));
-					break;
+					cumulativeFailure++;
 				}
+				if (cumulativeFailure > 3)
+					break;
 			} else {
+				logger.log(Level.INFO, "Desktop destroy, will kill session.");
 				killSession();
 				break;
 			}
diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/util/ServerPushTemplate.java b/zkwebui/WEB-INF/src/org/adempiere/webui/util/ServerPushTemplate.java
index af63f3270a..14b8cbc95f 100644
--- a/zkwebui/WEB-INF/src/org/adempiere/webui/util/ServerPushTemplate.java
+++ b/zkwebui/WEB-INF/src/org/adempiere/webui/util/ServerPushTemplate.java
@@ -46,8 +46,8 @@ public class ServerPushTemplate {
 
 		try {
 	    	if (!inUIThread) {
-	    		//half second timeout
-	    		if (Executions.activate(desktop, 500)) {
+	    		//10 minutes timeout
+	    		if (Executions.activate(desktop, 10 * 60 * 1000)) {
 	    			desktopActivated = true;
 	    		} else {
 	    			throw new DesktopUnavailableException("Timeout activating desktop.");