diff --git a/vnet/vnet/lisp-cp/control.c b/vnet/vnet/lisp-cp/control.c
index 8b3d25f..1e3b98f 100644
--- a/vnet/vnet/lisp-cp/control.c
+++ b/vnet/vnet/lisp-cp/control.c
@@ -891,32 +891,74 @@
     .function = lisp_pitr_set_locator_set_command_fn,
 };
 
+
+static u8 *
+format_eid_entry (u8 * s, va_list * args)
+{
+  vnet_main_t * vnm = va_arg (*args, vnet_main_t *);
+  lisp_cp_main_t * lcm = va_arg (*args, lisp_cp_main_t *);
+  gid_address_t * gid = va_arg (*args, gid_address_t *);
+  locator_set_t * ls = va_arg (*args, locator_set_t *);
+  u32 * loc_index;
+  u8 first_line = 1;
+  u8 * loc;
+
+  u8 * type = ls->local ? format(0, "local(%s)", ls->name)
+                        : format(0, "remote");
+
+  if (vec_len (ls->locator_indices) == 0)
+    {
+      s = format (s, "%-35U%-20s", format_gid_address, gid, type);
+    }
+  else
+    {
+      vec_foreach (loc_index, ls->locator_indices)
+        {
+          locator_t * l = pool_elt_at_index (lcm->locator_pool, loc_index[0]);
+          if (l->local)
+            loc = format (0, "%U", format_vnet_sw_if_index_name, vnm,
+                          l->sw_if_index);
+          else
+            loc = format (0, "%U", format_ip_address,
+                          &gid_address_ip (&l->address));
+
+          if (first_line)
+            {
+              s = format (s, "%-35U%-20s%-v\n", format_gid_address,
+                          gid, type, loc);
+              first_line = 0;
+            }
+          else
+            s = format (s, "%55s%v\n", "", loc);
+        }
+    }
+  return s;
+}
+
 static clib_error_t *
-lisp_show_local_eid_table_command_fn (vlib_main_t * vm,
-                                      unformat_input_t * input,
-                                      vlib_cli_command_t * cmd)
+lisp_show_eid_table_command_fn (vlib_main_t * vm,
+                                unformat_input_t * input,
+                                vlib_cli_command_t * cmd)
 {
   lisp_cp_main_t * lcm = vnet_lisp_cp_get_main();
   mapping_t * mapit;
 
-  vlib_cli_output (vm, "%=30s%=16s", "EID", "Locator");
+  vlib_cli_output (vm, "%-35s%-20s%-s", "EID", "type", "locators");
   pool_foreach (mapit, lcm->mapping_pool,
   ({
-    u8 * msg = 0;
     locator_set_t * ls = pool_elt_at_index (lcm->locator_set_pool,
                                             mapit->locator_set_index);
-    vlib_cli_output (vm, "%-30U%16v", format_gid_address, &mapit->eid,
-                     ls->name);
-    vec_free (msg);
+    vlib_cli_output (vm, "%U", format_eid_entry, lcm->vnet_main,
+                     lcm, &mapit->eid, ls);
   }));
 
   return 0;
 }
 
-VLIB_CLI_COMMAND (lisp_cp_show_local_eid_table_command) = {
+VLIB_CLI_COMMAND (lisp_cp_show_eid_table_command) = {
     .path = "show lisp eid-table",
-    .short_help = "Shows local EID table",
-    .function = lisp_show_local_eid_table_command_fn,
+    .short_help = "Shows EID table",
+    .function = lisp_show_eid_table_command_fn,
 };
 
 /* cleans locator to locator-set data and removes locators not part of
diff --git a/vnet/vnet/lisp-cp/lisp_types.c b/vnet/vnet/lisp-cp/lisp_types.c
index f0debc6..11e252a 100644
--- a/vnet/vnet/lisp-cp/lisp_types.c
+++ b/vnet/vnet/lisp-cp/lisp_types.c
@@ -160,6 +160,10 @@
     case GID_ADDR_IP_PREFIX:
       return format (s, "[%d] %U", gid_address_vni(a), format_ip_prefix,
                      &gid_address_ippref(a));
+    case GID_ADDR_SRC_DST:
+      return format (s, "[%d] %U|%U", gid_address_vni(a),
+                     format_ip_prefix, &gid_address_sd_source_pref(a),
+                     format_ip_prefix, &gid_address_sd_dest_pref(a));
     default:
       clib_warning("Can't format gid type %d", type);
       return 0;
diff --git a/vnet/vnet/lisp-cp/lisp_types.h b/vnet/vnet/lisp-cp/lisp_types.h
index 235d470..709d415 100644
--- a/vnet/vnet/lisp-cp/lisp_types.h
+++ b/vnet/vnet/lisp-cp/lisp_types.h
@@ -64,6 +64,7 @@
   GID_ADDR_IP_PREFIX,
   GID_ADDR_LCAF,
   GID_ADDR_MAC,
+  GID_ADDR_SRC_DST,
   GID_ADDR_NO_ADDRESS,
   GID_ADDR_TYPES
 } gid_address_type_t;
@@ -87,6 +88,10 @@
   struct _gid_address_t *dst;
 } source_dest_t;
 
+#define SD_CAST (source_dest_t *)
+#define sd_dst_gid(_a) (SD_CAST _a)->dst
+#define sd_src_gid(_a) (SD_CAST _a)->src
+
 typedef struct
 {
   u8 vni_mask_len;
@@ -172,6 +177,10 @@
 #define gid_address_mac(_a) (_a)->mac
 #define gid_address_vni(_a) (_a)->vni
 #define gid_address_vni_mask(_a) (_a)->vni_mask
+#define gid_address_sd_dest_pref(_a) \
+  gid_address_ippref(sd_dst_gid(_a))
+#define gid_address_sd_source_pref(_a) \
+  gid_address_ippref(sd_src_gid(_a))
 
 /* 'sub'address functions */
 #define foreach_gid_address_type_fcns  \
