diff --git a/src/vnet/srv6/sr.api b/src/vnet/srv6/sr.api
index 2c72cc5..f2f6e78 100644
--- a/src/vnet/srv6/sr.api
+++ b/src/vnet/srv6/sr.api
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-vl_api_version 1.0.0
+vl_api_version 1.0.1
 
 /** \brief IPv6 SR LocalSID add/del request
     @param client_index - opaque cookie to identify the sender
@@ -106,6 +106,19 @@
   u32 sr_policy_index;
 };
 
+/** \brief IPv6 SR Set SRv6 encapsulation source
+    @param client_index - opaque cookie to identify the sender
+    @param context - sender context, to match reply w/ request
+    @param bsid is the bindingSID of the SR Policy
+    @param index is the index of the SR policy
+*/
+autoreply define sr_set_encap_source
+{
+  u32 client_index;
+  u32 context;
+  u8 encaps_source[16];
+};
+
 /** \brief IPv6 SR steering add/del
     @param client_index - opaque cookie to identify the sender
     @param context - sender context, to match reply w/ request
@@ -136,33 +149,22 @@
     @param client_index - opaque cookie to identify the sender
     @param context - sender context, to match reply w/ request
 */
-/**define sr_localsids_dump
+define sr_localsids_dump
 {
   u32 client_index;
   u32 context;
-};*/
+};
 
-/** \brief Details about a single SR LocalSID
-    @param context - returned sender context, to match reply w/ request
-    @param localsid_addr IPv6 address of the localsid
-    @param behavior Type of behavior (function) for this localsid
-    @param end_psp Boolean of whether decapsulation is allowed in this function
-    @param sw_if_index Only for L2/L3 xconnect. OIF. In VRF variant the fib_table.
-    @param vlan_index Only for L2 xconnect. Outgoing VLAN tag.
-    @param fib_table  FIB table in which we should install the localsid entry
-    @param nh_addr Next Hop IPv4/IPv6 address. Only for L2/L3 xconnect.
-*/
-/**manual_endian define sr_localsid_details
+define sr_localsids_details
 {
   u32 context;
-  u8 localsid_addr[16];
-  u8 behavior;
+  u8 address[16];
   u8 end_psp;
-  u32 sw_if_index;
-  u32 vlan_index;
+  u16 behavior;
   u32 fib_table;
-  u8 nh_addr[16];
-};*/
+  u8 xconnect_next_hop[16];
+  u32 xconnect_iface_or_vrf_table;
+};
 
 /*
  * fd.io coding-style-patch-verification: OFF
diff --git a/src/vnet/srv6/sr.h b/src/vnet/srv6/sr.h
index d0f4286..1a30cf3 100755
--- a/src/vnet/srv6/sr.h
+++ b/src/vnet/srv6/sr.h
@@ -276,6 +276,8 @@
 		    u32 table_id, ip46_address_t * prefix, u32 mask_width,
 		    u32 sw_if_index, u8 traffic_type);
 
+extern void sr_set_source (ip6_address_t * address);
+
 /**
  * @brief SR rewrite string computation for SRH insertion (inline)
  *
diff --git a/src/vnet/srv6/sr_api.c b/src/vnet/srv6/sr_api.c
index 623f672..789bb27 100644
--- a/src/vnet/srv6/sr_api.c
+++ b/src/vnet/srv6/sr_api.c
@@ -46,8 +46,9 @@
 #define foreach_vpe_api_msg                             \
 _(SR_LOCALSID_ADD_DEL, sr_localsid_add_del)             \
 _(SR_POLICY_DEL, sr_policy_del)                         \
-_(SR_STEERING_ADD_DEL, sr_steering_add_del)
-//_(SR_LOCALSIDS, sr_localsids_dump)
+_(SR_STEERING_ADD_DEL, sr_steering_add_del)             \
+_(SR_SET_ENCAP_SOURCE, sr_set_encap_source)             \
+_(SR_LOCALSIDS_DUMP, sr_localsids_dump)
 //_(SR_LOCALSID_BEHAVIORS, sr_localsid_behaviors_dump)
 
 static void vl_api_sr_localsid_add_del_t_handler
@@ -152,6 +153,16 @@
   REPLY_MACRO (VL_API_SR_POLICY_DEL_REPLY);
 }
 
+static void
+vl_api_sr_set_encap_source_t_handler (vl_api_sr_set_encap_source_t * mp)
+{
+  vl_api_sr_set_encap_source_reply_t *rmp;
+  int rv = 0;
+  sr_set_source ((ip6_address_t *) & mp->encaps_source);
+
+  REPLY_MACRO (VL_API_SR_POLICY_DEL_REPLY);
+}
+
 static void vl_api_sr_steering_add_del_t_handler
   (vl_api_sr_steering_add_del_t * mp)
 {
@@ -179,6 +190,47 @@
   REPLY_MACRO (VL_API_SR_STEERING_ADD_DEL_REPLY);
 }
 
+static void send_sr_localsid_details
+  (ip6_sr_localsid_t * t, unix_shared_memory_queue_t * q, u32 context)
+{
+  vl_api_sr_localsids_details_t *rmp;
+
+  rmp = vl_msg_api_alloc (sizeof (*rmp));
+  memset (rmp, 0, sizeof (*rmp));
+  rmp->_vl_msg_id = ntohs (VL_API_SR_LOCALSIDS_DETAILS);
+  memcpy (rmp->address, &t->localsid, sizeof (ip6_address_t));
+  rmp->end_psp = t->end_psp;
+  rmp->behavior = htons (t->behavior);
+  rmp->fib_table = htonl (t->fib_table);
+  memcpy (rmp->xconnect_next_hop, &t->next_hop, sizeof (ip6_address_t));
+  rmp->xconnect_iface_or_vrf_table = htonl (t->sw_if_index);
+  rmp->context = context;
+
+  vl_msg_api_send_shmem (q, (u8 *) & rmp);
+}
+
+static void vl_api_sr_localsids_dump_t_handler
+  (vl_api_sr_localsids_dump_t * mp)
+{
+  unix_shared_memory_queue_t *q;
+  ip6_sr_main_t *sm = &sr_main;
+  ip6_sr_localsid_t *t;
+
+  q = vl_api_client_index_to_input_queue (mp->client_index);
+  if (q == 0)
+    {
+      return;
+    }
+
+  /* *INDENT-OFF* */
+  pool_foreach (t, sm->localsids,
+  ({
+    send_sr_localsid_details(t, q, mp->context);
+  }));
+  /* *INDENT-ON* */
+}
+
+
 /*
  * sr_api_hookup
  * Add vpe's API message handlers to the table.
diff --git a/src/vnet/srv6/sr_policy_rewrite.c b/src/vnet/srv6/sr_policy_rewrite.c
index 514dd65..b42942c 100755
--- a/src/vnet/srv6/sr_policy_rewrite.c
+++ b/src/vnet/srv6/sr_policy_rewrite.c
@@ -112,6 +112,12 @@
 /* Note:  This is temporal. We don't know whether to follow this path or
           take the ip address of a loopback interface or even the OIF         */
 
+void
+sr_set_source (ip6_address_t * address)
+{
+  clib_memcpy (&sr_pr_encaps_src, address, sizeof (sr_pr_encaps_src));
+}
+
 static clib_error_t *
 set_sr_src_command_fn (vlib_main_t * vm, unformat_input_t * input,
 		       vlib_cli_command_t * cmd)
