diff --git a/www/js/controllers/wot-controllers.js b/www/js/controllers/wot-controllers.js
index 95bcbb420ed6d9ab0a766295a64ab53b58eb3854..1969c3e5e71410acb2cf298e2bd870213c1c0227 100644
--- a/www/js/controllers/wot-controllers.js
+++ b/www/js/controllers/wot-controllers.js
@@ -345,17 +345,19 @@ function WotLookupController($scope, $state, $timeout, $focus, $ionicPopover, $l
       });
   };
 
-  $scope.select = function(identity) {
-    // identity = self -> open the user wallet
-    if (csWallet.isUserPubkey(identity.pubkey)) {
-      $state.go('app.view_wallet');
+  $scope.select = function(item) {
+    var state = item.state;
+
+    //  Identity
+    if (!state && item.pubkey) {
+      // identity = self -> open the user wallet
+      state = csWallet.isUserPubkey(item.pubkey)
+        ? 'app.view_wallet'
+        : 'app.wot_identity';
     }
-    // Open identity view
-    else {
-      $state.go('app.wot_identity', {
-        pubkey: identity.pubkey,
-        uid: identity.uid
-      });
+
+    if (state) {
+      $state.go(state, item.stateParams||item);
     }
   };
 
diff --git a/www/js/services/wot-services.js b/www/js/services/wot-services.js
index fec37e7b56a17eeeb88a5d34901b114243ae26ce..e1f8be17e592e445d3e984ebf3081f6b4562b5ad 100644
--- a/www/js/services/wot-services.js
+++ b/www/js/services/wot-services.js
@@ -15,7 +15,7 @@ angular.module('cesium.wot.services', ['ngApi', 'cesium.bma.services', 'cesium.c
       _addUniqueIds = function(idties) {
         var idtyKeys = {};
         return idties.reduce(function(res, idty) {
-          idty.id = idty.uid + '-' + idty.pubkey;
+          idty.id = idty.id || idty.uid + '-' + idty.pubkey;
           if (!idtyKeys[idty.id]) {
             idtyKeys[idty.id] = true;
             return res.concat(idty);
diff --git a/www/plugins/es/i18n/locale-fr-FR.json b/www/plugins/es/i18n/locale-fr-FR.json
index b45b197c02da2629eb910c2b269cb65a145ed564..f3760e57ccbc9cf44301857dd67fa1f4d725c957 100644
--- a/www/plugins/es/i18n/locale-fr-FR.json
+++ b/www/plugins/es/i18n/locale-fr-FR.json
@@ -50,6 +50,11 @@
       "TITLE": "Demander des certifications",
       "HELP": "Sélectionner les destinataires"
     },
+    "SEARCH": {
+      "DIVIDER_PROFILE": "Comptes",
+      "DIVIDER_PAGE": "Pages",
+      "DIVIDER_GROUP": "Groupes"
+    },
     "CONFIRM": {
       "SUGGEST_CERTIFICATIONS": "Etes-vous sûr de vouloir <b>envoyer ces suggestions de certification</b> ?",
       "ASK_CERTIFICATION": "Etes-vous sûr de vouloir <b>envoyer une demande de certification</b> ?",
diff --git a/www/plugins/es/js/controllers/registry-controllers.js b/www/plugins/es/js/controllers/registry-controllers.js
index 55257a9ad561830d6b5a0faecb266fe174083ff0..5f9e87abf1edc3f1434115f7703f59249c54d7ba 100644
--- a/www/plugins/es/js/controllers/registry-controllers.js
+++ b/www/plugins/es/js/controllers/registry-controllers.js
@@ -28,8 +28,8 @@ angular.module('cesium.es.registry.controllers', ['cesium.es.services', 'cesium.
       }
     })
 
-    .state('app.registry_view_record', {
-      url: "/registry/view/:id/:title?refresh",
+    .state('app.view_page', {
+      url: "/page/:id/:title?refresh",
       views: {
         'menuContent': {
           templateUrl: "plugins/es/templates/registry/view_record.html",
@@ -38,8 +38,8 @@ angular.module('cesium.es.registry.controllers', ['cesium.es.services', 'cesium.
       }
     })
 
-    .state('app.registry_view_record_anchor', {
-      url: "/registry/view/:id/:title/:anchor",
+    .state('app.view_page_anchor', {
+      url: "/page/:id/:title/:anchor",
       views: {
         'menuContent': {
           templateUrl: "plugins/es/templates/registry/view_record.html",
@@ -532,7 +532,7 @@ function ESRegistryRecordViewController($scope, $state, $q, $timeout, $ionicPopo
     $scope.hideActionsPopover();
     var title = $scope.formData.title;
     // Use shareBasePath (fix #530) or rootPath (fix #390)
-    var url = (csConfig.shareBaseUrl || $rootScope.rootPath) + $state.href('app.registry_view_record', {title: title, id: $scope.id});
+    var url = (csConfig.shareBaseUrl || $rootScope.rootPath) + $state.href('app.view_page', {title: title, id: $scope.id});
     // Override default position, is small screen - fix #545
     if (UIUtils.screen.isSmall()) {
       event = angular.element(document.querySelector('#registry-share-anchor-'+$scope.id)) || event;
@@ -668,7 +668,7 @@ function ESRegistryRecordEditController($scope, esRegistry, UIUtils, $state, $q,
         $scope.saving = false;
         $ionicHistory.clearCache($ionicHistory.currentView().stateId); // clear current view
         $ionicHistory.nextViewOptions({historyRoot: true});
-        return $state.go('app.registry_view_record', {id: $scope.id, refresh: true});
+        return $state.go('app.view_page', {id: $scope.id, refresh: true});
       })
 
       .catch(function(err) {
diff --git a/www/plugins/es/js/entities/notification.js b/www/plugins/es/js/entities/notification.js
index 90f7c13c6be53d8426f95b6cc3c0dc37aecad61d..cd564c88c1fceb73773192b3fe5000a88a59a27b 100644
--- a/www/plugins/es/js/entities/notification.js
+++ b/www/plugins/es/js/entities/notification.js
@@ -78,12 +78,12 @@ function Notification(json, markAsReadCallback) {
     that.id = json.reference.id; // Do not care about notification ID, because notification screen use message _id
   }
 
-  // registry record
-  else if (json.reference && json.reference.index == 'registry') {
+  // page record
+  else if (json.reference && json.reference.index == 'page') {
     that.avatarIcon = 'ion-ios-book';
     if (json.reference.anchor) {
       that.icon = 'ion-ios-chatbubble-outline dark';
-      that.state = 'app.registry_view_record_anchor';
+      that.state = 'app.view_page_anchor';
       that.stateParams = {
         id: json.reference.id,
         title: json.params[1],
@@ -92,7 +92,7 @@ function Notification(json, markAsReadCallback) {
     }
     else {
       that.icon = 'ion-ios-book dark';
-      that.state = 'app.registry_view_record';
+      that.state = 'app.view_page';
       that.stateParams = {
         id: json.reference.id,
         title: json.params[1]};
diff --git a/www/plugins/es/js/services/profile-services.js b/www/plugins/es/js/services/profile-services.js
index bfbef908d552e74eace0aaeaa1578632b61711e7..cc70f076148f3fad99cb83358d6276709762b2a7 100644
--- a/www/plugins/es/js/services/profile-services.js
+++ b/www/plugins/es/js/services/profile-services.js
@@ -10,7 +10,7 @@ angular.module('cesium.es.profile.services', ['cesium.services', 'cesium.es.http
 
   })
 
-.factory('esProfile', function($rootScope, $q, esHttp, SocialUtils, csWot, csWallet, csPlatform) {
+.factory('esProfile', function($rootScope, $q, esHttp, SocialUtils, csWot, csWallet, csPlatform, esSettings) {
   'ngInject';
 
   var
@@ -21,7 +21,8 @@ angular.module('cesium.es.profile.services', ['cesium.services', 'cesium.es.http
     getFields: esHttp.get('/user/profile/:id?&_source_exclude=avatar._content&_source=:fields'),
     get: esHttp.get('/user/profile/:id?&_source_exclude=avatar._content'),
     getAll: esHttp.get('/user/profile/:id'),
-    search: esHttp.post('/user/profile/_search')
+    search: esHttp.post('/user/profile/_search'),
+    mixedSearch: esHttp.post('/user,page,group/profile,record/_search')
   };
 
   function getAvatarAndName(pubkey) {
@@ -101,6 +102,29 @@ angular.module('cesium.es.profile.services', ['cesium.services', 'cesium.es.http
     return onWotSearch(null, datas, pubkeyAtributeName);
   }
 
+  function _fillSearchResultFromHit(data, hit, avatarFieldName) {
+    data.avatar = data.avatar || esHttp.image.fromHit(hit, avatarFieldName||'avatar');
+    // name (basic or highlighted)
+    data.name = hit._source.title;
+    // Avoid too long name (workaround for #308)
+    if (data.name && data.name.length > 30) {
+      data.name = data.name.substr(0, 27) + '...';
+    }
+    data.description = hit._source.description;
+    data.city = hit._source.city;
+
+    if (hit.highlight) {
+      if (hit.highlight.title) {
+        data.name = hit.highlight.title[0];
+      }
+      if (hit.highlight.tags) {
+        data.tags = hit.highlight.tags.reduce(function(res, tag){
+          return res.concat(tag.replace('<em>', '').replace('</em>', ''));
+        },[]);
+      }
+    }
+  }
+
   function onWotSearch(text, datas, pubkeyAtributeName, deferred) {
     deferred = deferred || $q.defer();
     if (!text && (!datas || !datas.length)) {
@@ -120,6 +144,11 @@ angular.module('cesium.es.profile.services', ['cesium.services', 'cesium.es.http
       _source: ["title", "avatar._content_type"]
     };
 
+    var mixedSearch = esSettings.wot.isMixedSearchEnable();
+    if (mixedSearch) {
+      request._source = request._source.concat(["description", "thumbnail._content_type", "city", "creationTime", "membersCount"]);
+    }
+
     if (datas.length > 0) {
       // collect pubkeys and fill values map
       dataByPubkey = {};
@@ -185,52 +214,90 @@ angular.module('cesium.es.profile.services', ['cesium.services', 'cesium.es.http
       return deferred.promise;
     }
 
+    if (text && mixedSearch) {
+      request.indices_boost = {
+        "user" : 100,
+        "page" : 1,
+        "group" : 0.01
+      };
+    }
+
     var hits;
-    that.raw.search(request)
-    .then(function(res) {
-      hits = res.hits;
-      if (hits.total > 0) {
-        _.forEach(hits.hits, function(hit) {
-          var values = dataByPubkey && dataByPubkey[hit._id];
-          if (!values) {
-            var value = {};
-            value[pubkeyAtributeName] = hit._id;
-            values=[value];
-            datas.push(value);
-          }
-          var avatar = esHttp.image.fromHit(hit, 'avatar');
-          _.forEach(values, function(data) {
-            // name (basic or highlighted)
-            data.name = hit._source.title;
-            // Avoid too long name (workaround for #308)
-            if (data.name && data.name.length > 30) {
-              data.name = data.name.substr(0, 27) + '...';
-            }
-            if (hit.highlight) {
-              if (hit.highlight.title) {
-                  data.name = hit.highlight.title[0];
+
+    var search = mixedSearch ? that.raw.mixedSearch : that.raw.search;
+    search(request)
+      .then(function(res) {
+        hits = res.hits;
+        if (hits.total > 0) {
+          var indices = {};
+          var values;
+          _.forEach(hits.hits, function(hit) {
+
+            var avatarFieldName = 'avatar';
+            // User profile
+            if (hit._index == "user") {
+              values = dataByPubkey && dataByPubkey[hit._id];
+              if (!values) {
+                var value = {};
+                value[pubkeyAtributeName] = hit._id;
+                values=[value];
+                datas.push(value);
               }
-              if (hit.highlight.tags) {
-                data.tags = hit.highlight.tags.reduce(function(res, tag){
-                  return res.concat(tag.replace('<em>', '').replace('</em>', ''));
-                },[]);
+
+              avatar = esHttp.image.fromHit(hit, 'avatar');
+            }
+
+            // Page or group
+            else if (hit._index != "user") {
+              if (!indices[hit._index]) {
+                indices[hit._index] = true;
+                // add a separator
+                datas.push({
+                  id: 'divider-' + hit._index,
+                  divider: true,
+                  index: hit._index
+                });
               }
+              var item = {
+                id: hit._index + '-' + hit._id, // unique id in list
+                index: hit._index,
+                templateUrl: 'plugins/es/templates/wot/lookup_item_{0}.html'.format(hit._index),
+                state: 'app.view_{0}'.format(hit._index),
+                stateParams: {id: hit._id, title: hit._source.title},
+                creationTime: hit._source.creationTime,
+                memberCount: hit._source.memberCount
+              };
+              values=[item];
+              datas.push(item);
+              avatarFieldName = 'thumbnail';
             }
-            // avatar
-            data.avatar=avatar;
+
+            avatar = esHttp.image.fromHit(hit, avatarFieldName);
+            _.forEach(values, function(data) {
+              data.avatar= avatar;
+              _fillSearchResultFromHit(data, hit);
+            });
           });
-        });
-      }
-      deferred.resolve(datas);
-    })
-    .catch(function(err){
-      if (err && err.ucode && err.ucode == 404) {
+
+          // Add divider on top
+          if (_.keys(indices).length) {
+            datas.splice(0,0, {
+              id: 'divider-identities',
+              divider: true,
+              index: 'profile'
+            });
+          }
+        }
         deferred.resolve(datas);
-      }
-      else {
-        deferred.reject(err);
-      }
-    });
+      })
+      .catch(function(err){
+        if (err && err.ucode && err.ucode == 404) {
+          deferred.resolve(datas);
+        }
+        else {
+          deferred.reject(err);
+        }
+      });
 
     return deferred.promise;
   }
diff --git a/www/plugins/es/js/services/settings-services.js b/www/plugins/es/js/services/settings-services.js
index b791fbc09b7cbddebacd78860d5c8ab1bfe40d92..703720db657897f482071e2b3398793be6b38c2e 100644
--- a/www/plugins/es/js/services/settings-services.js
+++ b/www/plugins/es/js/services/settings-services.js
@@ -43,7 +43,10 @@ angular.module('cesium.es.settings.services', ['cesium.services', 'cesium.es.htt
             },
             defaultCountry: undefined,
             enableGoogleApi: false,
-            googleApiKey: undefined
+            googleApiKey: undefined,
+            wot: {
+              enableMixedSearch: true
+            }
           }
         }
     }, {plugins: {es: csConfig.plugins && csConfig.plugins.es || {}}}),
@@ -66,6 +69,16 @@ angular.module('cesium.es.settings.services', ['cesium.services', 'cesium.es.htt
       !!csSettings.data.plugins.es.host;
   };
 
+  that.wot = {};
+  that.wot.isMixedSearchEnable = function() {
+    return csSettings.data.plugins &&
+      csSettings.data.plugins.es &&
+      csSettings.data.plugins.es.enable &&
+      (angular.isDefined(csSettings.data.plugins.es.wot && csSettings.data.plugins.es.wot.enableMixedSearch)
+        ? csSettings.data.plugins.es.wot.enableMixedSearch
+        : true);
+  };
+
   function copyUsingSpec(data, copySpec) {
     var result = {};
 
diff --git a/www/plugins/es/templates/group/lookup_item.html b/www/plugins/es/templates/group/lookup_item.html
new file mode 100644
index 0000000000000000000000000000000000000000..3efb68bf7e0d4ca3d989f0dac122910c4cacb1d4
--- /dev/null
+++ b/www/plugins/es/templates/group/lookup_item.html
@@ -0,0 +1,18 @@
+
+  <i class="item-image avatar" style="background-image: url({{::item.avatar.src}})" ng-if="item.avatar"></i>
+  <i class="item-image icon ion-android-people" ng-if="!item.avatar"></i>
+  <i class="item-image icon-secondary ion-android-lock" ng-if="!item.avatar" style="left: 20px; top: 17px; font-size: 19px; color: #d9d9d9;"></i>
+
+  <h2 ng-bind-html=":rebind:item.title"></h2>
+
+  <!-- creation time-->
+  <h4 class="gray pull-right">
+    <i class="ion-clock"></i>
+    {{:rebind:'GROUP.CREATED_TIME'|translate: item }}
+  </h4>
+
+  <!-- membersCount -->
+  <h4 class="dark pull-left" ng-if=":rebind:item.membersCount">
+    <i class="dark ion-person"></i>
+    <span class="dark">+{{:rebind:item.membersCount}}</span>
+  </h4>
diff --git a/www/plugins/es/templates/group/view_record.html b/www/plugins/es/templates/group/view_record.html
index c48b694e6176e6e2f827c1c88ce7e8ab9825188f..55942cb3b76e5acfc315f86ec9d42d8283b2242d 100644
--- a/www/plugins/es/templates/group/view_record.html
+++ b/www/plugins/es/templates/group/view_record.html
@@ -92,7 +92,7 @@
 
         <ion-item>
             <h2>
-              <span class="text-keep-lines" ng-bind-html="formData.description"></span>
+              <span trust-as-html="formData.description"></span>
             </h2>
         </ion-item>
 
diff --git a/www/plugins/es/templates/registry/lookup.html b/www/plugins/es/templates/registry/lookup.html
index 0c0f58934bf0f19d927a3cd1a9b4601e9645c3ee..e445676aca8df2b002f1969f8681f15537d4b796 100644
--- a/www/plugins/es/templates/registry/lookup.html
+++ b/www/plugins/es/templates/registry/lookup.html
@@ -46,7 +46,7 @@
 
         <a ng-repeat="rec in search.results"
            class="item item-record ink padding-xs item-icon-right"
-           ui-sref="app.registry_view_record({id: rec.id, title: rec.urlTitle})">
+           ui-sref="app.view_page({id: rec.id, title: rec.urlTitle})">
 
           <div class="item-text-wrap item-thumbnail-left-padding"
                ng-class="{'item-thumbnail-left': rec.thumbnail || rec.type}">
diff --git a/www/plugins/es/templates/registry/lookup_item.html b/www/plugins/es/templates/registry/lookup_item.html
new file mode 100644
index 0000000000000000000000000000000000000000..c0044b5663f2371a46fb5e6ae7067dc7b3458c48
--- /dev/null
+++ b/www/plugins/es/templates/registry/lookup_item.html
@@ -0,0 +1,27 @@
+<div class="row row-record ">
+  <div class="col item-text-wrap item-thumbnail-left-padding"
+       ng-class="{'item-thumbnail-left': item.thumbnail || item.type}">
+    <i class="item-image icon cion-page-{{::item.type}}" ng-if="!item.thumbnail"></i>
+    <i class="item-image avatar" style="background-image: url({{::item.thumbnail.src}})" ng-if="item.thumbnail"></i>
+    <h2 ng-bind-html="item.title"></h2>
+    <h4 class="gray">
+      <i class="icon ion-location" ng-if="item.city"></i>
+      <span ng-bind-html="item.city"></span>
+    </h4>
+    <h4 class="gray" ng-if="item.time">
+      <i class="icon ion-clock" ></i>
+      {{::item.time | formatFromNow}}
+    </h4>
+    <span  ng-if="item.picturesCount > 1"
+           class="badge badge-balanced badge-picture-count">{{::item.picturesCount}}&nbsp;<i class="icon ion-camera"></i></span>
+  </div>
+  <div class="col col-20 hidden-xs">
+    <h3 class="gray">
+      <ng-if ng-if="item.category">{{::item.category.name}}</ng-if>
+      <!--ng-if ng-if="!item.category">{{'REGISTRY.TYPE.ENUM.'+item.type|translate}}</ng-if-->
+    </h3>
+  </div>
+  <div class="col">
+    <h3 class="gray text-wrap" ng-bind-html="item.description" ng-if="item.description"></h3>
+  </div>
+</div>
diff --git a/www/plugins/es/templates/registry/lookup_lg.html b/www/plugins/es/templates/registry/lookup_lg.html
index b700ec85a4ee4c34fb9be293fb61ef0050c77394..0d1e8f757c9d1b47530c235df2e002bb527b364b 100644
--- a/www/plugins/es/templates/registry/lookup_lg.html
+++ b/www/plugins/es/templates/registry/lookup_lg.html
@@ -65,37 +65,11 @@
     <div class="list {{::motion.ionListClass}}"
          ng-if="!search.loading && search.results && search.results.length > 0">
 
-      <a ng-repeat="rec in search.results"
+      <a ng-repeat="item in search.results"
          class="item ink padding-xs"
-         ui-sref="app.registry_view_record({id: rec.id, title: rec.urlTitle})">
+         ui-sref="app.view_page({id: item.id, title: item.urlTitle})">
 
-        <div class="row row-record ">
-          <div class="col item-text-wrap item-thumbnail-left-padding"
-               ng-class="{'item-thumbnail-left': rec.thumbnail || rec.type}">
-            <i class="item-image icon cion-page-{{::rec.type}}" ng-if="!rec.thumbnail"></i>
-            <i class="item-image avatar" style="background-image: url({{::rec.thumbnail.src}})" ng-if="rec.thumbnail"></i>
-            <h2 ng-bind-html="rec.title"></h2>
-            <h4 class="gray">
-              <i class="icon ion-location" ng-if="rec.city"></i>
-              <span ng-bind-html="rec.city"></span>
-            </h4>
-            <h4 class="gray" ng-if="rec.time">
-              <i class="icon ion-clock" ></i>
-              {{::rec.time | formatFromNow}}
-            </h4>
-            <span  ng-if="rec.picturesCount > 1"
-                   class="badge badge-balanced badge-picture-count">{{::rec.picturesCount}}&nbsp;<i class="icon ion-camera"></i></span>
-          </div>
-          <div class="col col-20 hidden-xs">
-            <h3 class="gray">
-              <ng-if ng-if="rec.category">{{::rec.category.name}}</ng-if>
-              <!--ng-if ng-if="!rec.category">{{'REGISTRY.TYPE.ENUM.'+rec.type|translate}}</ng-if-->
-            </h3>
-          </div>
-          <div class="col">
-            <h3 class="gray text-wrap" ng-bind-html="rec.description" ng-if="rec.description"></h3>
-          </div>
-        </div>
+        <ng-include src="'plugins/es/templates/registry/lookup_item.html'"></ng-include>
       </a>
     </div>
 
diff --git a/www/plugins/es/templates/wot/lookup_item.html b/www/plugins/es/templates/wot/lookup_item.html
new file mode 100644
index 0000000000000000000000000000000000000000..90693a566c810f32f29f9be72239498836fe2d1d
--- /dev/null
+++ b/www/plugins/es/templates/wot/lookup_item.html
@@ -0,0 +1,21 @@
+<i ng-if="::!identity.avatar" class="item-image icon ion-person"></i>
+<i ng-if="::identity.avatar" class="item-image avatar" style="background-image: url({{::identity.avatar.src}})"></i>
+
+<h2>
+  <ng-if ng-if="::identity.name||identity.uid" ng-bind-html="::identity.name||identity.uid"></ng-if>
+
+</h2>
+
+<h4 class="gray">
+  <span class="positive" ng-if="::identity.description">
+    <i class="ion-quote"></i>
+    {{::identity.description|truncText}}
+  </span>
+</h4>
+<h4 ng-if="::identity.tags">
+  <span ng-if="::identity.tags" class="dark">
+   <ng-repeat ng-repeat="tag in ::identity.tags">
+     #<ng-bind-html ng-bind-html="::tag"></ng-bind-html>
+   </ng-repeat>
+  </span>
+</h4>
diff --git a/www/plugins/es/templates/wot/lookup_item_group.html b/www/plugins/es/templates/wot/lookup_item_group.html
new file mode 100644
index 0000000000000000000000000000000000000000..3c37adfd4b6e13e5b7b96302c318788c8ee7af15
--- /dev/null
+++ b/www/plugins/es/templates/wot/lookup_item_group.html
@@ -0,0 +1,32 @@
+
+<i ng-if="::!item.avatar" class="item-image icon ion-android-people"></i>
+<i ng-if="::!item.avatar" class="item-image icon-secondary ion-android-lock" style="left: 20px; top: 17px; font-size: 19px; color: #d9d9d9;"></i>
+<i ng-if="::item.avatar" class="item-image avatar" style="background-image: url({{::item.avatar.src}})"></i>
+
+<h2 ng-bind-html=":rebind:item.name"></h2>
+
+<!-- creation time-->
+<h4 class="gray">
+  <i class="ion-clock"></i>
+  {{:rebind:'GROUP.CREATED_TIME'|translate: item }}
+</h4>
+
+<!-- membersCount -->
+<h4 class="dark pull-left" ng-if=":rebind:item.membersCount">
+  <i class="dark ion-person"></i>
+  <span class="dark">+{{:rebind:item.membersCount}}</span>
+</h4>
+
+<h4 class="dark">
+  <span class="dark" ng-if="::item.description">
+    <i class="ion-quote"></i>
+    {{::item.description|truncText}}
+  </span>
+</h4>
+<h4 ng-if="::item.tags">
+  <span ng-if="::item.tags" class="dark">
+   <ng-repeat ng-repeat="tag in ::item.tags">
+     #<ng-bind-html ng-bind-html="::tag"></ng-bind-html>
+   </ng-repeat>
+  </span>
+</h4>
diff --git a/www/plugins/es/templates/wot/lookup_item_page.html b/www/plugins/es/templates/wot/lookup_item_page.html
new file mode 100644
index 0000000000000000000000000000000000000000..d4a30ebaf9873ca428fd4dd109fbbf00cbfdb0fc
--- /dev/null
+++ b/www/plugins/es/templates/wot/lookup_item_page.html
@@ -0,0 +1,24 @@
+<i ng-if="::!item.avatar" class="item-image icon ion-person"></i>
+<i ng-if="::item.avatar" class="item-image avatar" style="background-image: url({{::item.avatar.src}})"></i>
+
+<h2 ng-bind-html=":rebind:item.name"></h2>
+
+<h4 class="gray">
+  <span class="gray" ng-if="::item.city">
+    <i class="ion-location"></i>
+    {{::item.city|truncText}}
+  </span>
+</h4>
+<h4 class="dark">
+  <span class="dark" ng-if="::item.description">
+    <i class="ion-quote"></i>
+    {{::item.description|truncText}}
+  </span>
+</h4>
+<h4 ng-if="::item.tags">
+  <span ng-if="::item.tags" class="dark">
+   <ng-repeat ng-repeat="tag in ::item.tags">
+     #<ng-bind-html ng-bind-html="::tag"></ng-bind-html>
+   </ng-repeat>
+  </span>
+</h4>
diff --git a/www/templates/wot/lookup_form.html b/www/templates/wot/lookup_form.html
index 40329d6b131c4a70d3798b9e820154e60a4bb1d6..cde0230d1a8be0fe62d214ff086fe18e3551db3a 100644
--- a/www/templates/wot/lookup_form.html
+++ b/www/templates/wot/lookup_form.html
@@ -103,19 +103,23 @@
     <!-- simple selection + device -->
     <!--removeIf(no-device)-->
     <ion-list
-      ng-if="!allowMultiple && $root.device.enable"
+      ng-if="::!allowMultiple && $root.device.enable"
       class="{{::motion.ionListClass}}"
       can-swipe="true">
 
       <ion-item
         ng-repeat="identity in search.results track by identity.id"
         id="helptip-wot-search-result-{{$index}}"
-        class="item item-border-large item-avatar item-icon-right ink" ng-click="::select(identity)">
+        ng-class="::{'item-avatar item-icon-right ink': !identity.divider, 'item-divider': identity.divider}"
+        class="item item-border-large " ng-click="::select(identity)">
 
-        <ng-include src="'templates/wot/identity.html'"></ng-include>
+        <ng-include ng-if="identity.divider || identity.type" src="'templates/wot/lookup_item.html'"></ng-include>
+        <ng-include ng-if="!identity.divider && !identity.type" src="'templates/wot/identity.html'"></ng-include>
 
         <i class="icon ion-ios-arrow-right "></i>
-        <ion-option-button class="button-positive" ng-click="showTransferModal({pubkey: identity.pubkey, uid: identity.name ||identity.uid})" translate>COMMON.BTN_SEND_MONEY_SHORT</ion-option-button>
+        <ion-option-button
+          ng-if="identity.pubkey"
+          class="button-positive" ng-click="showTransferModal({pubkey: identity.pubkey, uid: identity.name ||identity.uid})" translate>COMMON.BTN_SEND_MONEY_SHORT</ion-option-button>
       </ion-item>
 
     </ion-list>
@@ -130,11 +134,15 @@
       <div
         ng-repeat="identity in search.results track by identity.id"
         id="helptip-wot-search-result-{{$index}}"
-        class="item item-border-large item-avatar item-icon-right ink" ng-click="::select(identity)">
+        ng-class="::{'item-avatar item-icon-right ink': !identity.divider, 'item-divider ': identity.divider}"
+        class="item item-border-large {{::identity.ionItemClass}}" ng-click="::select(identity)">
 
-        <ng-include src="'templates/wot/identity.html'"></ng-include>
+        <!-- divider -->
+        <span ng-if="identity.divider">{{::('WOT.SEARCH.DIVIDER_' + identity.index)|upper|translate}}</span>
+        <ng-include ng-if="identity.templateUrl" src="identity.templateUrl" ng-init="item=identity"></ng-include>
+        <ng-include ng-if="!identity.templateUrl && !identity.divider" src="'templates/wot/identity.html'"></ng-include>
 
-        <i class="icon ion-ios-arrow-right "></i>
+        <i ng-if="!identity.divider" class="icon ion-ios-arrow-right "></i>
       </div>
     </div>
     <!--endRemoveIf(device)-->