diff --git a/src/vnet/vxlan/vxlan.api b/src/vnet/vxlan/vxlan.api
index d8ace33..3a07d92 100644
--- a/src/vnet/vxlan/vxlan.api
+++ b/src/vnet/vxlan/vxlan.api
@@ -13,7 +13,21 @@
  * limitations under the License.
  */
 
-option version = "1.0.0";
+option version = "1.1.0";
+
+/** \brief Create or delete a VXLAN tunnel
+    @param client_index - opaque cookie to identify the sender
+    @param context - sender context, to match reply w/ request
+    @param is_add - Use 1 to create the tunnel, 0 to remove it
+    @param is_ipv6 - Use 0 for IPv4, 1 for IPv6
+    @param instance - optional unique custom device instance, else ~0.
+    @param src_address - Source IP address
+    @param dst_address - Destination IP address, can be multicast
+    @param mcast_sw_if_index - Interface for multicast destination
+    @param encap_vrf_id - Encap route table FIB index
+    @param decap_next_index - Name of decap next graph node
+    @param vni - The VXLAN Network Identifier, uint24
+*/
 
 define vxlan_add_del_tunnel
 {
@@ -21,6 +35,7 @@
   u32 context;
   u8 is_add;
   u8 is_ipv6;
+  u32 instance;		/* If non-~0, specifies a custom dev instance */
   u8 src_address[16];
   u8 dst_address[16];
   u32 mcast_sw_if_index;
@@ -47,6 +62,7 @@
 {
   u32 context;
   u32 sw_if_index;
+  u32 instance;
   u8 src_address[16];
   u8 dst_address[16];
   u32 mcast_sw_if_index;
diff --git a/src/vnet/vxlan/vxlan.c b/src/vnet/vxlan/vxlan.c
index 64936c0..2684462 100644
--- a/src/vnet/vxlan/vxlan.c
+++ b/src/vnet/vxlan/vxlan.c
@@ -55,9 +55,16 @@
 {
   vxlan_tunnel_t * t = va_arg (*args, vxlan_tunnel_t *);
   vxlan_main_t * ngm = &vxlan_main;
+  u32 dev_instance;
+  u32 user_instance;
 
-  s = format (s, "[%d] src %U dst %U vni %d fib-idx %d sw-if-idx %d ",
-              t - ngm->tunnels,
+  dev_instance = t - ngm->tunnels;
+  user_instance = t->user_instance;
+
+  s = format (s,
+	      "[%d] instance %d src %U dst %U vni %d fib-idx %d sw-if-idx %d ",
+	      dev_instance,
+	      user_instance,
               format_ip46_address, &t->src, IP46_TYPE_ANY,
               format_ip46_address, &t->dst, IP46_TYPE_ANY,
               t->vni, t->encap_fib_index, t->sw_if_index);
@@ -76,7 +83,18 @@
 static u8 * format_vxlan_name (u8 * s, va_list * args)
 {
   u32 dev_instance = va_arg (*args, u32);
-  return format (s, "vxlan_tunnel%d", dev_instance);
+  vxlan_main_t * vxm = &vxlan_main;
+  vxlan_tunnel_t *t;
+
+  if (dev_instance == ~0)
+    return format(s, "<cached-unused>");
+
+  if (dev_instance >= vec_len(vxm->tunnels))
+    return format(s, "<improperly-referenced>");
+
+  t = pool_elt_at_index(vxm->tunnels, dev_instance);
+
+  return format (s, "vxlan_tunnel%d", t->user_instance);
 }
 
 static clib_error_t *
@@ -89,9 +107,16 @@
   return /* no error */ 0;
 }
 
+static int
+vxlan_name_renumber (vnet_hw_interface_t *hi, u32 new_dev_instance)
+{
+  return 0;
+}
+
 VNET_DEVICE_CLASS (vxlan_device_class,static) = {
   .name = "VXLAN",
   .format_device_name = format_vxlan_name,
+  .name_renumber = vxlan_name_renumber,
   .format_tx_trace = format_vxlan_encap_trace,
   .admin_up_down_function = vxlan_interface_admin_up_down,
 };
@@ -348,10 +373,12 @@
       key6.vni = clib_host_to_net_u32 (a->vni << 8);
       p = hash_get_mem (vxm->vxlan6_tunnel_by_key, &key6);
     }
-  
+
   if (a->is_add)
     {
       l2input_main_t * l2im = &l2input_main;
+      u32 dev_instance;		/* real dev instance tunnel index */
+      u32 user_instance;	/* request and actual instance number */
 
       /* adding a tunnel: tunnel must not already exist */
       if (p)
@@ -365,7 +392,8 @@
 
       pool_get_aligned (vxm->tunnels, t, CLIB_CACHE_LINE_BYTES);
       memset (t, 0, sizeof (*t));
-      
+      dev_instance = t - vxm->tunnels;
+
       /* copy from arg structure */
 #define _(x) t->x = a->x;
       foreach_copy_field;
@@ -378,6 +406,22 @@
           return rv;
         }
 
+      /*
+       * Reconcile the real dev_instance and a possible requested instance.
+       */
+      user_instance = a->instance;
+      if (user_instance == ~0) 
+	user_instance = dev_instance;
+      if (hash_get (vxm->instance_used, user_instance))
+	{
+	  pool_put (vxm->tunnels, t);
+	  return VNET_API_ERROR_INSTANCE_IN_USE;
+	}
+      hash_set (vxm->instance_used, user_instance, 1);
+
+      t->dev_instance = dev_instance;		/* actual */
+      t->user_instance = user_instance;		/* name */
+
       /* copy the key */
       if (is_ip6)
         hash_set_mem_alloc (&vxm->vxlan6_tunnel_by_key, &key6, 
@@ -394,11 +438,13 @@
           _vec_len (vxm->free_vxlan_tunnel_hw_if_indices) -= 1;
           
           hi = vnet_get_hw_interface (vnm, hw_if_index);
-          hi->dev_instance = t - vxm->tunnels;
-          hi->hw_instance = hi->dev_instance;
+          hi->dev_instance = dev_instance;
+          hi->hw_instance = dev_instance;
+
+	  sw_if_index = hi->sw_if_index;
+	  vnet_interface_name_renumber(sw_if_index, user_instance);
 
 	  /* clear old stats of freed tunnel before reuse */
-	  sw_if_index = hi->sw_if_index;
 	  vnet_interface_counter_lock(im);
 	  vlib_zero_combined_counter 
 	    (&im->combined_sw_if_counters[VNET_INTERFACE_COUNTER_TX], sw_if_index);
@@ -425,7 +471,7 @@
       t->sw_if_index = sw_if_index = hi->sw_if_index;
 
       vec_validate_init_empty (vxm->tunnel_index_by_sw_if_index, sw_if_index, ~0);
-      vxm->tunnel_index_by_sw_if_index[sw_if_index] = t - vxm->tunnels;
+      vxm->tunnel_index_by_sw_if_index[sw_if_index] = dev_instance;
 
       /* setup l2 input config with l2 feature and bd 0 to drop packet */
       vec_validate (l2im->configs, sw_if_index);
@@ -455,7 +501,7 @@
             (t->encap_fib_index, &tun_dst_pfx, FIB_SOURCE_RR,
 	     FIB_ENTRY_FLAG_NONE);
           t->sibling_index = fib_entry_child_add
-            (t->fib_entry_index, FIB_NODE_TYPE_VXLAN_TUNNEL, t - vxm->tunnels);
+            (t->fib_entry_index, FIB_NODE_TYPE_VXLAN_TUNNEL, dev_instance);
           vxlan_tunnel_restack_dpo(t);
 	} 
       else
@@ -538,18 +584,19 @@
       if (!p)
         return VNET_API_ERROR_NO_SUCH_ENTRY;
 
-      t = pool_elt_at_index (vxm->tunnels, p[0]);
+      u32 instance = p[0];
+      t = pool_elt_at_index (vxm->tunnels, instance);
 
       sw_if_index = t->sw_if_index;
-      vnet_sw_interface_set_flags (vnm, t->sw_if_index, 0 /* down */);
-      vnet_sw_interface_t * si = vnet_get_sw_interface (vnm, t->sw_if_index);
+      vnet_sw_interface_set_flags (vnm, sw_if_index, 0 /* down */);
+      vnet_sw_interface_t * si = vnet_get_sw_interface (vnm, sw_if_index);
       si->flags |= VNET_SW_INTERFACE_FLAG_HIDDEN;
 
       /* make sure tunnel is removed from l2 bd or xconnect */
-      set_int_l2_mode(vxm->vlib_main, vnm, MODE_L3, t->sw_if_index, 0, 0, 0, 0);
+      set_int_l2_mode(vxm->vlib_main, vnm, MODE_L3, sw_if_index, 0, 0, 0, 0);
       vec_add1 (vxm->free_vxlan_tunnel_hw_if_indices, t->hw_if_index);
 
-      vxm->tunnel_index_by_sw_if_index[t->sw_if_index] = ~0;
+      vxm->tunnel_index_by_sw_if_index[sw_if_index] = ~0;
 
       if (!is_ip6)
         hash_unset (vxm->vxlan4_tunnel_by_key, key4.as_u64);
@@ -567,6 +614,12 @@
 	  mcast_shared_remove(&t->dst);
         }
 
+      vnet_hw_interface_t *hi;
+      hi = vnet_get_hw_interface (vnm, t->hw_if_index);
+      hi->dev_instance = ~0;
+
+      hash_unset (vxlan_main.instance_used, instance);
+
       fib_node_deinit(&t->node);
       vec_free (t->rewrite);
       pool_put (vxm->tunnels, t);
@@ -621,6 +674,7 @@
   u8 grp_set = 0;
   u8 ipv4_set = 0;
   u8 ipv6_set = 0;
+  u32 instance = ~0;
   u32 encap_fib_index = 0;
   u32 mcast_sw_if_index = ~0;
   u32 decap_next_index = VXLAN_INPUT_NEXT_L2_INPUT;
@@ -644,6 +698,8 @@
       {
         is_add = 0;
       }
+    else if (unformat (line_input, "instance %d", &instance))
+      ;
     else if (unformat (line_input, "src %U",
                        unformat_ip4_address, &src.ip4))
       {
@@ -770,11 +826,12 @@
 
   a->is_add = is_add;
   a->is_ip6 = ipv6_set;
+  a->instance = instance;
 
 #define _(x) a->x = x;
   foreach_copy_field;
 #undef _
-  
+
   rv = vnet_vxlan_add_del_tunnel (a, &tunnel_sw_if_index);
 
   switch(rv)
@@ -793,6 +850,14 @@
       error = clib_error_return (0, "tunnel does not exist...");
       goto done;
 
+    case VNET_API_ERROR_INVALID_ARGUMENT:
+      error = clib_error_return (0, "Invalid argument");
+      goto done;
+
+    case VNET_API_ERROR_INSTANCE_IN_USE:
+      error = clib_error_return (0, "Instance is in use");
+      goto done;
+
     default:
       error = clib_error_return
         (0, "vnet_vxlan_add_del_tunnel returned %d", rv);
@@ -822,6 +887,8 @@
  * @cliexpar
  * Example of how to create a VXLAN Tunnel:
  * @cliexcmd{create vxlan tunnel src 10.0.3.1 dst 10.0.3.3 vni 13 encap-vrf-id 7}
+ * Example of how to create a VXLAN Tunnel with a known name, vxlan_tunnel42:
+ * @cliexcmd{create vxlan tunnel src 10.0.3.1 dst 10.0.3.3 instance 42}
  * Example of how to delete a VXLAN Tunnel:
  * @cliexcmd{create vxlan tunnel src 10.0.3.1 dst 10.0.3.3 vni 13 del}
  ?*/
@@ -831,6 +898,7 @@
   .short_help = 
   "create vxlan tunnel src <local-vtep-addr>"
   " {dst <remote-vtep-addr>|group <mcast-vtep-addr> <intf-name>} vni <nn>"
+  " [instance <id>]"
   " [encap-vrf-id <nn>] [decap-next [l2|node <name>]] [del]",
   .function = vxlan_add_del_tunnel_command_fn,
 };
@@ -1075,3 +1143,9 @@
 }
 
 VLIB_INIT_FUNCTION(vxlan_init);
+
+/*
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/src/vnet/vxlan/vxlan.h b/src/vnet/vxlan/vxlan.h
index f428ee5..e50ff6b 100644
--- a/src/vnet/vxlan/vxlan.h
+++ b/src/vnet/vxlan/vxlan.h
@@ -111,6 +111,9 @@
    * The tunnels sibling index on the FIB entry's dependency list.
    */
   u32 sibling_index;
+
+  u32 dev_instance;	/* Real device instance in tunnel vector */
+  u32 user_instance;	/* Instance name being shown to user */
 } vxlan_tunnel_t;
 
 #define foreach_vxlan_input_next        \
@@ -156,6 +159,9 @@
   /* convenience */
   vlib_main_t * vlib_main;
   vnet_main_t * vnet_main;
+
+  /* Record used instances */
+  uword *instance_used;
 } vxlan_main_t;
 
 extern vxlan_main_t vxlan_main;
@@ -173,6 +179,7 @@
   /* we normally use is_ip4, but since this adds to the
    * structure, this seems less of abreaking change */
   u8 is_ip6;
+  u32 instance;
   ip46_address_t src, dst;
   u32 mcast_sw_if_index;
   u32 encap_fib_index;
@@ -186,3 +193,9 @@
 void vnet_int_vxlan_bypass_mode
 (u32 sw_if_index, u8 is_ip6, u8 is_enable);
 #endif /* included_vnet_vxlan_h */
+
+/*
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/src/vnet/vxlan/vxlan_api.c b/src/vnet/vxlan/vxlan_api.c
index 5c5e946..8b19c3a 100644
--- a/src/vnet/vxlan/vxlan_api.c
+++ b/src/vnet/vxlan/vxlan_api.c
@@ -83,6 +83,7 @@
   vnet_vxlan_add_del_tunnel_args_t a = {
     .is_add = mp->is_add,
     .is_ip6 = mp->is_ipv6,
+    .instance = ntohl (mp->instance),
     .mcast_sw_if_index = ntohl (mp->mcast_sw_if_index),
     .encap_fib_index = fib_index,
     .decap_next_index = ntohl (mp->decap_next_index),
@@ -139,6 +140,8 @@
       memcpy (rmp->dst_address, t->dst.ip4.as_u8, 4);
       rmp->encap_vrf_id = htonl (im4->fibs[t->encap_fib_index].ft_table_id);
     }
+
+  rmp->instance = htonl (t->user_instance);
   rmp->mcast_sw_if_index = htonl (t->mcast_sw_if_index);
   rmp->vni = htonl (t->vni);
   rmp->decap_next_index = htonl (t->decap_next_index);
