diff --git a/www/js/services/device-services.js b/www/js/services/device-services.js
index 5ffe61da021a01d0ac810b47b61d6980af32f2b1..455ab75396f1a139d1ebea2d4ef26ae906a6f2b9 100644
--- a/www/js/services/device-services.js
+++ b/www/js/services/device-services.js
@@ -1,3 +1,4 @@
+var App;
 
 angular.module('cesium.device.services', ['cesium.utils.services', 'cesium.settings.services'])
 
@@ -202,6 +203,15 @@ angular.module('cesium.device.services', ['cesium.utils.services', 'cesium.setti
         return !!navigator.userAgent.match(/iPhone | iPad | iPod/i) || ionic.Platform.isIOS();
       };
 
+      exports.isDesktop = function() {
+        try {
+          // Has NodeJs + NW ?
+          return !!process && !!App;
+        } catch (err) {
+          return false;
+        }
+      };
+
       exports.ready = function() {
         if (started) return $q.when();
         return startPromise || exports.start();
diff --git a/www/js/services/http-services.js b/www/js/services/http-services.js
index 035d86ec764cec7fb5252961980ae443131e9d51..4803235358ff3190f1108714fb572e0c2059fbdc 100644
--- a/www/js/services/http-services.js
+++ b/www/js/services/http-services.js
@@ -323,10 +323,22 @@ angular.module('cesium.http.services', ['cesium.cache.services'])
         return;
       }
     }
-    // Note: If device is enable, this will use InAppBrowser cordova plugin (=_system)
-    $window.open(uri,
-        (options.target || (Device.enable ? '_system' : '_blank')),
-        'location=yes');
+
+    // Note: If device enable, then target=_system will use InAppBrowser cordova plugin
+    var openTarget = (options.target || (Device.enable ? '_system' : '_blank'));
+    var openOptions;
+    // If desktop, should always open in new window (no tabs)
+    if (openTarget == '_blank' && Device.isDesktop() && $window.screen && $window.screen.width && $window.screen.height) {
+      openOptions= "width={0},height={1},location=1,menubar=1,toolbar=1,resizable=1,scrollbars=1".format($window.screen.width/2, $window.screen.height/2);
+    }
+    var win = $window.open(uri,
+      openTarget,
+      openOptions);
+    if (openOptions) {
+      win.moveTo($window.screen.width/2/2, $window.screen.height/2/2);
+      win.focus();
+    }
+
   }
 
   // Get time (UTC)
diff --git a/www/plugins/es/i18n/locale-en-GB.json b/www/plugins/es/i18n/locale-en-GB.json
index 11fa18113f5d20c93777ee28a39da8dca4ffdf8f..64a78d0dafc1c34c17235537a5a103b5e5a52989 100644
--- a/www/plugins/es/i18n/locale-en-GB.json
+++ b/www/plugins/es/i18n/locale-en-GB.json
@@ -156,7 +156,8 @@
       "TITLE": "Message",
       "SENDER": "Sent by",
       "RECIPIENT": "Sent to",
-      "NO_CONTENT": "Empty message"
+      "NO_CONTENT": "Empty message",
+      "DELETE": "Delete the message"
     },
     "CONFIRM": {
       "REMOVE": "Are you sure you want to <b>delete this message</b>?<br/><br/> This operation is irreversible.",
@@ -416,6 +417,7 @@
       "REMOVE_ALL": "Are you sure you want to <b>delete these documents</b>?"
     },
     "ERROR": {
+      "LOAD_DOCUMENTS_FAILED": "Error searching documents",
       "REMOVE_FAILED": "Error deleting the document",
       "REMOVE_ALL_FAILED": "Error deleting documents"
     }
diff --git a/www/plugins/es/i18n/locale-en.json b/www/plugins/es/i18n/locale-en.json
index 11fa18113f5d20c93777ee28a39da8dca4ffdf8f..64a78d0dafc1c34c17235537a5a103b5e5a52989 100644
--- a/www/plugins/es/i18n/locale-en.json
+++ b/www/plugins/es/i18n/locale-en.json
@@ -156,7 +156,8 @@
       "TITLE": "Message",
       "SENDER": "Sent by",
       "RECIPIENT": "Sent to",
-      "NO_CONTENT": "Empty message"
+      "NO_CONTENT": "Empty message",
+      "DELETE": "Delete the message"
     },
     "CONFIRM": {
       "REMOVE": "Are you sure you want to <b>delete this message</b>?<br/><br/> This operation is irreversible.",
@@ -416,6 +417,7 @@
       "REMOVE_ALL": "Are you sure you want to <b>delete these documents</b>?"
     },
     "ERROR": {
+      "LOAD_DOCUMENTS_FAILED": "Error searching documents",
       "REMOVE_FAILED": "Error deleting the document",
       "REMOVE_ALL_FAILED": "Error deleting documents"
     }
diff --git a/www/plugins/es/i18n/locale-fr-FR.json b/www/plugins/es/i18n/locale-fr-FR.json
index 30022285a4f5202194558b303a333273f5655274..932ab12e56fc51b2e71d0f82a79469185a97a0d6 100644
--- a/www/plugins/es/i18n/locale-fr-FR.json
+++ b/www/plugins/es/i18n/locale-fr-FR.json
@@ -468,6 +468,7 @@
       "REMOVE_ALL": "Etes-vous sûr de vouloir <b>supprimer ces documents</b> ?"
     },
     "ERROR": {
+      "LOAD_DOCUMENTS_FAILED": "Erreur lors de la recherche de documents",
       "REMOVE_FAILED": "Erreur lors de la suppression du document",
       "REMOVE_ALL_FAILED": "Erreur lors de la suppression des documents"
     }
diff --git a/www/plugins/es/js/controllers/blockchain-controllers.js b/www/plugins/es/js/controllers/blockchain-controllers.js
index 4ec8ff4f0199f50fce5c853032fd216fa8c06a42..10c675d03f8c0bed37c44292a1f2af24ecc8b172 100644
--- a/www/plugins/es/js/controllers/blockchain-controllers.js
+++ b/www/plugins/es/js/controllers/blockchain-controllers.js
@@ -76,6 +76,8 @@ function ESBlockLookupController($scope, $controller, $ionicPopover, $location,
 
   // This method override the base class method
   $scope.doSearch = function(from) {
+    if ($scope.search.error) return;
+
     from = angular.isDefined(from) ? from : 0;
     var promise;
     var request = {};
@@ -151,8 +153,12 @@ function ESBlockLookupController($scope, $controller, $ionicPopover, $location,
         $scope.search.loading = false;
       })
       .catch(function(err) {
-        UIUtils.onError('BLOCKCHAIN.ERROR.SEARCH_BLOCKS_FAILED')(err);
+        $scope.search.error = true;
         $scope.search.loading = false;
+        UIUtils.onError('BLOCKCHAIN.ERROR.SEARCH_BLOCKS_FAILED')(err)
+          .then(function() {
+            $scope.search.error = false;
+          });
       });
   };
 
diff --git a/www/plugins/es/js/controllers/document-controllers.js b/www/plugins/es/js/controllers/document-controllers.js
index 77f3a36ef1b0af7cea4300dae41c2312f66c57ef..1ea1f5be71e36df4f35e3985709f4ad02fdc6e68 100644
--- a/www/plugins/es/js/controllers/document-controllers.js
+++ b/www/plugins/es/js/controllers/document-controllers.js
@@ -59,6 +59,8 @@ function ESDocumentLookupController($scope, $ionicPopover, $location, $timeout,
   });
 
   $scope.load = function(size, offset) {
+    if ($scope.search.error) return;
+
     var options  = {
       index: $scope.search.index,
       type: $scope.search.type,
@@ -68,10 +70,11 @@ function ESDocumentLookupController($scope, $ionicPopover, $location, $timeout,
 
     // add sort
     if ($scope.search.sort) {
-      options.sort = $scope.search.sort + ':' + (!$scope.search.asc ? "desc" : "asc");
+      options.sort = {};
+      options.sort[$scope.search.sort] = (!$scope.search.asc ? "desc" : "asc");
     }
     else { // default sort
-      options.sort = "time:desc";
+      options.sort = {time:'desc'};
     }
 
     $scope.search.loading = true;
@@ -99,9 +102,13 @@ function ESDocumentLookupController($scope, $ionicPopover, $location, $timeout,
         $scope.$broadcast('$$rebind::rebind'); // notify binder
       })
       .catch(function(err) {
-        UIUtils.onError('DOCUMENT.ERROR.LOAD_DOCUMENTS_FAILED')(err);
         $scope.search.results = [];
         $scope.search.loading = false;
+        $scope.search.error = true;
+        UIUtils.onError('DOCUMENT.ERROR.LOAD_DOCUMENTS_FAILED')(err)
+          .then(function() {
+            $scope.search.error = false;
+          });
       });
   };
 
diff --git a/www/plugins/es/js/services/document-services.js b/www/plugins/es/js/services/document-services.js
index 6985c66d5522ddedf5d593740551fb6169d81a64..7eb8d2f1df6ba47cc78bfd3392537e14724981b4 100644
--- a/www/plugins/es/js/services/document-services.js
+++ b/www/plugins/es/js/services/document-services.js
@@ -113,7 +113,7 @@ angular.module('cesium.es.document.services', ['ngResource', 'cesium.platform',
       var request = {
         from: options.from || 0,
         size: options.size || constants.DEFAULT_LOAD_SIZE,
-        sort: options.sort || 'time:desc',
+        sort: options.sort || {time:'desc'},
         _source: options._source || fields.commons
       };
       if (options.query) {