diff --git a/lib/Makefile.am b/lib/Makefile.am
index fc02312..ac51fc6 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -13,7 +13,7 @@
 	sockunion.c prefix.c thread.c if.c memory.c buffer.c table.c hash.c \
 	filter.c routemap.c distribute.c stream.c str.c log.c plist.c \
 	zclient.c sockopt.c smux.c agentx.c snmp.c md5.c if_rmap.c keychain.c privs.c \
-	sigevent.c pqueue.c jhash.c memtypes.c workqueue.c
+	sigevent.c pqueue.c jhash.c memtypes.c workqueue.c vrf.c
 
 BUILT_SOURCES = memtypes.h route_types.h gitversion.h
 
@@ -28,7 +28,7 @@
 	str.h stream.h table.h thread.h vector.h version.h vty.h zebra.h \
 	plist.h zclient.h sockopt.h smux.h md5.h if_rmap.h keychain.h \
 	privs.h sigevent.h pqueue.h jhash.h zassert.h memtypes.h \
-	workqueue.h route_types.h libospf.h
+	workqueue.h route_types.h libospf.h vrf.h
 
 noinst_HEADERS = \
 	plist_int.h
diff --git a/lib/memtypes.c b/lib/memtypes.c
index 1a0c11f..3e599f6 100644
--- a/lib/memtypes.c
+++ b/lib/memtypes.c
@@ -69,14 +69,15 @@
   { MTYPE_PQUEUE,		"Priority queue"		},
   { MTYPE_PQUEUE_DATA,		"Priority queue data"		},
   { MTYPE_HOST,			"Host config"			},
+  { MTYPE_VRF,			"VRF"				},
+  { MTYPE_VRF_NAME,		"VRF name"			},
   { -1, NULL },
 };
 
 struct memory_list memory_list_zebra[] = 
 {
   { MTYPE_RTADV_PREFIX,		"Router Advertisement Prefix"	},
-  { MTYPE_VRF,			"VRF"				},
-  { MTYPE_VRF_NAME,		"VRF name"			},
+  { MTYPE_ZEBRA_VRF,		"ZEBRA VRF"				},
   { MTYPE_NEXTHOP,		"Nexthop"			},
   { MTYPE_RIB,			"RIB"				},
   { MTYPE_RIB_QUEUE,		"RIB process work queue"	},
diff --git a/lib/vrf.c b/lib/vrf.c
new file mode 100644
index 0000000..3ccbb99
--- /dev/null
+++ b/lib/vrf.c
@@ -0,0 +1,268 @@
+/*
+ * VRF functions.
+ * Copyright (C) 2014 6WIND S.A.
+ *
+ * This file is part of GNU Zebra.
+ *
+ * GNU Zebra is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2, or (at your
+ * option) any later version.
+ *
+ * GNU Zebra is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Zebra; see the file COPYING.  If not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <zebra.h>
+
+#include "vrf.h"
+#include "prefix.h"
+#include "table.h"
+#include "log.h"
+#include "memory.h"
+
+struct vrf
+{
+  /* Identifier, same as the vector index */
+  vrf_id_t vrf_id;
+  /* Name */
+  char *name;
+
+  /* User data */
+  void *info;
+};
+
+/* Holding VRF hooks  */
+struct vrf_master
+{
+  int (*vrf_new_hook) (vrf_id_t, void **);
+  int (*vrf_delete_hook) (vrf_id_t, void **);
+} vrf_master = {0,};
+
+/* VRF table */
+struct route_table *vrf_table = NULL;
+
+/* Build the table key */
+static void
+vrf_build_key (vrf_id_t vrf_id, struct prefix *p)
+{
+  p->family = AF_INET;
+  p->prefixlen = IPV4_MAX_BITLEN;
+  p->u.prefix4.s_addr = vrf_id;
+}
+
+/* Get a VRF. If not found, create one. */
+static struct vrf *
+vrf_get (vrf_id_t vrf_id)
+{
+  struct prefix p;
+  struct route_node *rn;
+  struct vrf *vrf;
+
+  vrf_build_key (vrf_id, &p);
+  rn = route_node_get (vrf_table, &p);
+  if (rn->info)
+    {
+      vrf = (struct vrf *)rn->info;
+      route_unlock_node (rn); /* get */
+      return vrf;
+    }
+
+  vrf = XCALLOC (MTYPE_VRF, sizeof (struct vrf));
+  vrf->vrf_id = vrf_id;
+  rn->info = vrf;
+
+  zlog_info ("VRF %u is created.", vrf_id);
+
+  if (vrf_master.vrf_new_hook)
+    (*vrf_master.vrf_new_hook) (vrf_id, &vrf->info);
+
+  return vrf;
+}
+
+/* Delete a VRF. This is called in vrf_terminate(). */
+static void
+vrf_delete (struct vrf *vrf)
+{
+  zlog_info ("VRF %u is to be deleted.", vrf->vrf_id);
+
+  if (vrf_master.vrf_delete_hook)
+    (*vrf_master.vrf_delete_hook) (vrf->vrf_id, &vrf->info);
+
+  if (vrf->name)
+    XFREE (MTYPE_VRF_NAME, vrf->name);
+
+  XFREE (MTYPE_VRF, vrf);
+}
+
+/* Look up a VRF by identifier. */
+static struct vrf *
+vrf_lookup (vrf_id_t vrf_id)
+{
+  struct prefix p;
+  struct route_node *rn;
+  struct vrf *vrf = NULL;
+
+  vrf_build_key (vrf_id, &p);
+  rn = route_node_lookup (vrf_table, &p);
+  if (rn)
+    {
+      vrf = (struct vrf *)rn->info;
+      route_unlock_node (rn); /* lookup */
+    }
+  return vrf;
+}
+
+/* Add a VRF hook. Please add hooks before calling vrf_init(). */
+void
+vrf_add_hook (int type, int (*func)(vrf_id_t, void **))
+{
+  switch (type) {
+  case VRF_NEW_HOOK:
+    vrf_master.vrf_new_hook = func;
+    break;
+  case VRF_DELETE_HOOK:
+    vrf_master.vrf_delete_hook = func;
+    break;
+  default:
+    break;
+  }
+}
+
+/* Return the iterator of the first VRF. */
+vrf_iter_t
+vrf_first (void)
+{
+  struct route_node *rn;
+
+  for (rn = route_top (vrf_table); rn; rn = route_next (rn))
+    if (rn->info)
+      {
+        route_unlock_node (rn); /* top/next */
+        return (vrf_iter_t)rn;
+      }
+  return VRF_ITER_INVALID;
+}
+
+/* Return the next VRF iterator to the given iterator. */
+vrf_iter_t
+vrf_next (vrf_iter_t iter)
+{
+  struct route_node *rn = NULL;
+
+  /* Lock it first because route_next() will unlock it. */
+  if (iter != VRF_ITER_INVALID)
+    rn = route_next (route_lock_node ((struct route_node *)iter));
+
+  for (; rn; rn = route_next (rn))
+    if (rn->info)
+      {
+        route_unlock_node (rn); /* next */
+        return (vrf_iter_t)rn;
+      }
+  return VRF_ITER_INVALID;
+}
+
+/* Return the VRF iterator of the given VRF ID. If it does not exist,
+ * the iterator of the next existing VRF is returned. */
+vrf_iter_t
+vrf_iterator (vrf_id_t vrf_id)
+{
+  struct prefix p;
+  struct route_node *rn;
+
+  vrf_build_key (vrf_id, &p);
+  rn = route_node_get (vrf_table, &p);
+  if (rn->info)
+    {
+      /* OK, the VRF exists. */
+      route_unlock_node (rn); /* get */
+      return (vrf_iter_t)rn;
+    }
+
+  /* Find the next VRF. */
+  for (rn = route_next (rn); rn; rn = route_next (rn))
+    if (rn->info)
+      {
+        route_unlock_node (rn); /* next */
+        return (vrf_iter_t)rn;
+      }
+
+  return VRF_ITER_INVALID;
+}
+
+/* Obtain the VRF ID from the given VRF iterator. */
+vrf_id_t
+vrf_iter2id (vrf_iter_t iter)
+{
+  struct route_node *rn = (struct route_node *) iter;
+  return (rn && rn->info) ? ((struct vrf *)rn->info)->vrf_id : VRF_DEFAULT;
+}
+
+/* Obtain the data pointer from the given VRF iterator. */
+void *
+vrf_iter2info (vrf_iter_t iter)
+{
+  struct route_node *rn = (struct route_node *) iter;
+  return (rn && rn->info) ? ((struct vrf *)rn->info)->info : NULL;
+}
+
+/* Get the data pointer of the specified VRF. If not found, create one. */
+void *
+vrf_info_get (vrf_id_t vrf_id)
+{
+  struct vrf *vrf = vrf_get (vrf_id);
+  return vrf->info;
+}
+
+/* Look up the data pointer of the specified VRF. */
+void *
+vrf_info_lookup (vrf_id_t vrf_id)
+{
+  struct vrf *vrf = vrf_lookup (vrf_id);
+  return vrf ? vrf->info : NULL;
+}
+
+/* Initialize VRF module. */
+void
+vrf_init (void)
+{
+  struct vrf *default_vrf;
+
+  /* Allocate VRF table.  */
+  vrf_table = route_table_init ();
+
+  /* The default VRF always exists. */
+  default_vrf = vrf_get (VRF_DEFAULT);
+  if (!default_vrf)
+    {
+      zlog_err ("vrf_init: failed to create the default VRF!");
+      exit (1);
+    }
+
+  /* Set the default VRF name. */
+  default_vrf->name = XSTRDUP (MTYPE_VRF_NAME, "Default-IP-Routing-Table");
+}
+
+/* Terminate VRF module. */
+void
+vrf_terminate (void)
+{
+  struct route_node *rn;
+  struct vrf *vrf;
+
+  for (rn = route_top (vrf_table); rn; rn = route_next (rn))
+    if ((vrf = rn->info) != NULL)
+      vrf_delete (vrf);
+
+  route_table_finish (vrf_table);
+  vrf_table = NULL;
+}
+
diff --git a/lib/vrf.h b/lib/vrf.h
new file mode 100644
index 0000000..7e05099
--- /dev/null
+++ b/lib/vrf.h
@@ -0,0 +1,96 @@
+/*
+ * VRF related header.
+ * Copyright (C) 2014 6WIND S.A.
+ *
+ * This file is part of GNU Zebra.
+ *
+ * GNU Zebra is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2, or (at your
+ * option) any later version.
+ *
+ * GNU Zebra is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Zebra; see the file COPYING.  If not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _ZEBRA_VRF_H
+#define _ZEBRA_VRF_H
+
+/* The default VRF ID */
+#define VRF_DEFAULT 0
+
+/*
+ * VRF hooks
+ */
+
+#define VRF_NEW_HOOK        0   /* a new VRF is just created */
+#define VRF_DELETE_HOOK     1   /* a VRF is to be deleted */
+
+/*
+ * Add a specific hook to VRF module.
+ * @param1: hook type
+ * @param2: the callback function
+ *          - param 1: the VRF ID
+ *          - param 2: the address of the user data pointer (the user data
+ *                     can be stored in or freed from there)
+ */
+extern void vrf_add_hook (int, int (*)(vrf_id_t, void **));
+
+/*
+ * VRF iteration
+ */
+
+typedef void *              vrf_iter_t;
+#define VRF_ITER_INVALID    NULL    /* invalid value of the iterator */
+
+/*
+ * VRF iteration utilities. Example for the usage:
+ *
+ *   vrf_iter_t iter = vrf_first();
+ *   for (; iter != VRF_ITER_INVALID; iter = vrf_next (iter))
+ *
+ * or
+ *
+ *   vrf_iter_t iter = vrf_iterator (<a given VRF ID>);
+ *   for (; iter != VRF_ITER_INVALID; iter = vrf_next (iter))
+ */
+
+/* Return the iterator of the first VRF. */
+extern vrf_iter_t vrf_first (void);
+/* Return the next VRF iterator to the given iterator. */
+extern vrf_iter_t vrf_next (vrf_iter_t);
+/* Return the VRF iterator of the given VRF ID. If it does not exist,
+ * the iterator of the next existing VRF is returned. */
+extern vrf_iter_t vrf_iterator (vrf_id_t);
+
+/*
+ * VRF iterator to properties
+ */
+extern vrf_id_t vrf_iter2id (vrf_iter_t);
+extern void *vrf_iter2info (vrf_iter_t);
+
+/*
+ * Utilities to obtain the user data
+ */
+
+/* Get the data pointer of the specified VRF. If not found, create one. */
+extern void *vrf_info_get (vrf_id_t);
+/* Look up the data pointer of the specified VRF. */
+extern void *vrf_info_lookup (vrf_id_t);
+
+/*
+ * VRF initializer/destructor
+ */
+/* Please add hooks before calling vrf_init(). */
+extern void vrf_init (void);
+extern void vrf_terminate (void);
+
+#endif /*_ZEBRA_VRF_H*/
+
diff --git a/lib/zebra.h b/lib/zebra.h
index a5ed20e..e88a629 100644
--- a/lib/zebra.h
+++ b/lib/zebra.h
@@ -522,6 +522,9 @@
 typedef u_int16_t zebra_size_t;
 typedef u_int16_t zebra_command_t;
 
+/* VRF ID type. */
+typedef u_int16_t vrf_id_t;
+
 /* FIFO -- first in first out structure and macros.  */
 struct fifo
 {
diff --git a/zebra/main.c b/zebra/main.c
index d7f2a10..a690c9a 100644
--- a/zebra/main.c
+++ b/zebra/main.c
@@ -32,6 +32,7 @@
 #include "plist.h"
 #include "privs.h"
 #include "sigevent.h"
+#include "vrf.h"
 
 #include "zebra/rib.h"
 #include "zebra/zserv.h"
@@ -204,6 +205,29 @@
   },
 };
 
+/* Callback upon creating a new VRF. */
+static int
+zebra_vrf_new (vrf_id_t vrf_id, void **info)
+{
+  struct zebra_vrf *zvrf = *info;
+
+  if (! zvrf)
+    {
+      zvrf = zebra_vrf_alloc (vrf_id);
+      *info = (void *)zvrf;
+    }
+
+  return 0;
+}
+
+/* Zebra VRF initialization. */
+static void
+zebra_vrf_init (void)
+{
+  vrf_add_hook (VRF_NEW_HOOK, zebra_vrf_new);
+  vrf_init ();
+}
+
 /* Main startup routine. */
 int
 main (int argc, char **argv)
@@ -338,7 +362,8 @@
   /* For debug purpose. */
   /* SET_FLAG (zebra_debug_event, ZEBRA_DEBUG_EVENT); */
 
-  /* Make kernel routing socket. */
+  /* Initialize VRF module, and make kernel routing socket. */
+  zebra_vrf_init ();
   kernel_init ();
   interface_list ();
   route_read ();
diff --git a/zebra/redistribute.c b/zebra/redistribute.c
index 94330ae..8bf8ea8 100644
--- a/zebra/redistribute.c
+++ b/zebra/redistribute.c
@@ -30,6 +30,7 @@
 #include "zclient.h"
 #include "linklist.h"
 #include "log.h"
+#include "vrf.h"
 
 #include "zebra/rib.h"
 #include "zebra/zserv.h"
@@ -101,7 +102,7 @@
   p.family = AF_INET;
 
   /* Lookup table.  */
-  table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
   if (table)
     {
       rn = route_node_lookup (table, (struct prefix *)&p);
@@ -121,7 +122,7 @@
   p6.family = AF_INET6;
 
   /* Lookup table.  */
-  table = vrf_table (AFI_IP6, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT);
   if (table)
     {
       rn = route_node_lookup (table, (struct prefix *)&p6);
@@ -145,7 +146,7 @@
   struct route_table *table;
   struct route_node *rn;
 
-  table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
   if (table)
     for (rn = route_top (table); rn; rn = route_next (rn))
       RNODE_FOREACH_RIB (rn, newrib)
@@ -156,7 +157,7 @@
 	  zsend_route_multipath (ZEBRA_IPV4_ROUTE_ADD, client, &rn->p, newrib);
   
 #ifdef HAVE_IPV6
-  table = vrf_table (AFI_IP6, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT);
   if (table)
     for (rn = route_top (table); rn; rn = route_next (rn))
       RNODE_FOREACH_RIB (rn, newrib)
diff --git a/zebra/rib.h b/zebra/rib.h
index 94a7419..802d875 100644
--- a/zebra/rib.h
+++ b/zebra/rib.h
@@ -315,10 +315,10 @@
                        : (((recursing) = 0),((tnexthop) = (tnexthop)->next)))
 
 /* Routing table instance.  */
-struct vrf
+struct zebra_vrf
 {
-  /* Identifier.  This is same as routing table vector index.  */
-  u_int32_t id;
+  /* Identifier. */
+  vrf_id_t vrf_id;
 
   /* Routing table name.  */
   char *name;
@@ -346,9 +346,9 @@
 {
 
   /*
-   * Back pointer to vrf.
+   * Back pointer to zebra_vrf.
    */
-  struct vrf *vrf;
+  struct zebra_vrf *zvrf;
   afi_t afi;
   safi_t safi;
 
@@ -367,7 +367,7 @@
  */
 typedef struct rib_tables_iter_t_
 {
-  uint32_t vrf_id;
+  vrf_id_t vrf_id;
   int afi_safi_ix;
 
   rib_tables_iter_state_t state;
@@ -415,9 +415,9 @@
 extern struct nexthop *nexthop_ipv6_add (struct rib *, struct in6_addr *);
 #endif /* HAVE_IPV6 */
 
-extern struct vrf *vrf_lookup (u_int32_t);
-extern struct route_table *vrf_table (afi_t afi, safi_t safi, u_int32_t id);
-extern struct route_table *vrf_static_table (afi_t afi, safi_t safi, u_int32_t id);
+extern struct zebra_vrf *zebra_vrf_alloc (vrf_id_t);
+extern struct route_table *zebra_vrf_table (afi_t, safi_t, vrf_id_t);
+extern struct route_table *zebra_vrf_static_table (afi_t, safi_t, vrf_id_t);
 
 /* NOTE:
  * All rib_add_ipv[46]* functions will not just add prefix into RIB, but
@@ -557,10 +557,10 @@
 /*
  * rib_dest_vrf
  */
-static inline struct vrf *
+static inline struct zebra_vrf *
 rib_dest_vrf (rib_dest_t *dest)
 {
-  return rib_table_info (rib_dest_table (dest))->vrf;
+  return rib_table_info (rib_dest_table (dest))->zvrf;
 }
 
 /*
diff --git a/zebra/test_main.c b/zebra/test_main.c
index f98bb41..a92cd61 100644
--- a/zebra/test_main.c
+++ b/zebra/test_main.c
@@ -29,6 +29,7 @@
 #include "log.h"
 #include "privs.h"
 #include "sigevent.h"
+#include "vrf.h"
 
 #include "zebra/rib.h"
 #include "zebra/zserv.h"
@@ -196,6 +197,29 @@
   },
 };
 
+/* Callback upon creating a new VRF. */
+static int
+zebra_vrf_new (vrf_id_t vrf_id, void **info)
+{
+  struct zebra_vrf *zvrf = *info;
+
+  if (! zvrf)
+    {
+      zvrf = zebra_vrf_alloc (vrf_id);
+      *info = (void *)zvrf;
+    }
+
+  return 0;
+}
+
+/* Zebra VRF initialization. */
+static void
+zebra_vrf_init (void)
+{
+  vrf_add_hook (VRF_NEW_HOOK, zebra_vrf_new);
+  vrf_init ();
+}
+
 /* Main startup routine. */
 int
 main (int argc, char **argv)
@@ -294,6 +318,7 @@
   access_list_init ();
 
   /* Make kernel routing socket. */
+  zebra_vrf_init ();
   kernel_init ();
   route_read ();
   zebra_vty_init();
diff --git a/zebra/zebra_fpm.c b/zebra/zebra_fpm.c
index 896915c..292dbb6 100644
--- a/zebra/zebra_fpm.c
+++ b/zebra/zebra_fpm.c
@@ -330,7 +330,7 @@
    * We only send the unicast tables in the main instance to the FPM
    * at this point.
    */
-  if (info->vrf->id != 0)
+  if (info->zvrf->vrf_id != 0)
     return 0;
 
   if (info->safi != SAFI_UNICAST)
diff --git a/zebra/zebra_fpm_netlink.c b/zebra/zebra_fpm_netlink.c
index b5f2b76..c4a650d 100644
--- a/zebra/zebra_fpm_netlink.c
+++ b/zebra/zebra_fpm_netlink.c
@@ -245,7 +245,7 @@
   ri->af = rib_dest_af (dest);
 
   ri->nlmsg_type = cmd;
-  ri->rtm_table = rib_dest_vrf (dest)->id;
+  ri->rtm_table = rib_dest_vrf (dest)->vrf_id;
   ri->rtm_protocol = RTPROT_UNSPEC;
 
   /*
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c
index f247f1d..f206205 100644
--- a/zebra/zebra_rib.c
+++ b/zebra/zebra_rib.c
@@ -34,6 +34,7 @@
 #include "workqueue.h"
 #include "prefix.h"
 #include "routemap.h"
+#include "vrf.h"
 
 #include "zebra/rib.h"
 #include "zebra/rt.h"
@@ -72,9 +73,6 @@
   /* no entry/default: 150 */
 };
 
-/* Vector for routing table.  */
-static vector vrf_vector;
-
 /* RPF lookup behaviour */
 static enum multicast_mode ipv4_multicast_mode = MCAST_NO_CONFIG;
 
@@ -112,108 +110,6 @@
 	_rnode_zlog(__func__, node, LOG_INFO, __VA_ARGS__)
 
 /*
- * vrf_table_create
- */
-static void
-vrf_table_create (struct vrf *vrf, afi_t afi, safi_t safi)
-{
-  rib_table_info_t *info;
-  struct route_table *table;
-
-  assert (!vrf->table[afi][safi]);
-
-  table = route_table_init ();
-  vrf->table[afi][safi] = table;
-
-  info = XCALLOC (MTYPE_RIB_TABLE_INFO, sizeof (*info));
-  info->vrf = vrf;
-  info->afi = afi;
-  info->safi = safi;
-  table->info = info;
-}
-
-/* Allocate new VRF.  */
-static struct vrf *
-vrf_alloc (const char *name)
-{
-  struct vrf *vrf;
-
-  vrf = XCALLOC (MTYPE_VRF, sizeof (struct vrf));
-
-  /* Put name.  */
-  if (name)
-    vrf->name = XSTRDUP (MTYPE_VRF_NAME, name);
-
-  /* Allocate routing table and static table.  */
-  vrf_table_create (vrf, AFI_IP, SAFI_UNICAST);
-  vrf_table_create (vrf, AFI_IP6, SAFI_UNICAST);
-  vrf->stable[AFI_IP][SAFI_UNICAST] = route_table_init ();
-  vrf->stable[AFI_IP6][SAFI_UNICAST] = route_table_init ();
-  vrf_table_create (vrf, AFI_IP, SAFI_MULTICAST);
-  vrf_table_create (vrf, AFI_IP6, SAFI_MULTICAST);
-  vrf->stable[AFI_IP][SAFI_MULTICAST] = route_table_init ();
-  vrf->stable[AFI_IP6][SAFI_MULTICAST] = route_table_init ();
-
-
-  return vrf;
-}
-
-/* Lookup VRF by identifier.  */
-struct vrf *
-vrf_lookup (u_int32_t id)
-{
-  return vector_lookup (vrf_vector, id);
-}
-
-/* Initialize VRF.  */
-static void
-vrf_init (void)
-{
-  struct vrf *default_table;
-
-  /* Allocate VRF vector.  */
-  vrf_vector = vector_init (1);
-
-  /* Allocate default main table.  */
-  default_table = vrf_alloc ("Default-IP-Routing-Table");
-
-  /* Default table index must be 0.  */
-  vector_set_index (vrf_vector, 0, default_table);
-}
-
-/* Lookup route table.  */
-struct route_table *
-vrf_table (afi_t afi, safi_t safi, u_int32_t id)
-{
-  struct vrf *vrf;
-
-  vrf = vrf_lookup (id);
-  if (! vrf)
-    return NULL;
-
-  if( afi >= AFI_MAX  || safi >= SAFI_MAX )
-    return NULL;
-
-  return vrf->table[afi][safi];
-}
-
-/* Lookup static route table.  */
-struct route_table *
-vrf_static_table (afi_t afi, safi_t safi, u_int32_t id)
-{
-  struct vrf *vrf;
-
-  vrf = vrf_lookup (id);
-  if (! vrf)
-    return NULL;
-
-  if( afi >= AFI_MAX  || safi >= SAFI_MAX )
-    return NULL;
-
-  return vrf->stable[afi][safi];
-}
-
-/*
  * nexthop_type_to_str
  */
 const char *
@@ -473,7 +369,7 @@
   p.prefix = nexthop->gate.ipv4;
 
   /* Lookup table.  */
-  table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return 0;
 
@@ -615,7 +511,7 @@
   p.prefix = nexthop->gate.ipv6;
 
   /* Lookup table.  */
-  table = vrf_table (AFI_IP6, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return 0;
 
@@ -731,7 +627,7 @@
   int recursing;
 
   /* Lookup table.  */
-  table = vrf_table (AFI_IP, safi, 0);
+  table = zebra_vrf_table (AFI_IP, safi, VRF_DEFAULT);
   if (! table)
     return 0;
 
@@ -865,7 +761,7 @@
   int recursing;
 
   /* Lookup table.  */
-  table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return 0;
 
@@ -922,7 +818,7 @@
   int nexthops_active;
 
   /* Lookup table.  */
-  table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return ZEBRA_RIB_LOOKUP_ERROR;
 
@@ -988,7 +884,7 @@
   int recursing;
 
   /* Lookup table.  */
-  table = vrf_table (AFI_IP6, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return 0;
 
@@ -1907,7 +1803,7 @@
   struct nexthop *nexthop;
 
   /* Lookup table.  */
-  table = vrf_table (AFI_IP, safi, 0);
+  table = zebra_vrf_table (AFI_IP, safi, VRF_DEFAULT);
   if (! table)
     return 0;
 
@@ -2071,10 +1967,10 @@
   char prefix_buf[INET_ADDRSTRLEN];
 
   /* Lookup table.  */
-  table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
   {
-    zlog_err ("%s: vrf_table() returned NULL", __func__);
+    zlog_err ("%s: zebra_vrf_table() returned NULL", __func__);
     return;
   }
 
@@ -2120,9 +2016,9 @@
   struct rib *rib;
   unsigned changed = 0;
 
-  if (NULL == (table = vrf_table (AFI_IP, SAFI_UNICAST, 0)))
+  if (NULL == (table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT)))
   {
-    zlog_err ("%s: vrf_table() returned NULL", __func__);
+    zlog_err ("%s: zebra_vrf_table() returned NULL", __func__);
     return;
   }
 
@@ -2169,7 +2065,7 @@
   struct nexthop *nexthop;
   
   /* Lookup table.  */
-  table = vrf_table (AFI_IP, safi, 0);
+  table = zebra_vrf_table (AFI_IP, safi, VRF_DEFAULT);
   if (! table)
     return 0;
 
@@ -2248,7 +2144,7 @@
   char buf2[INET_ADDRSTRLEN];
 
   /* Lookup table.  */
-  table = vrf_table (AFI_IP, safi, 0);
+  table = zebra_vrf_table (AFI_IP, safi, VRF_DEFAULT);
   if (! table)
     return 0;
 
@@ -2380,7 +2276,7 @@
   struct route_table *table;
 
   /* Lookup table.  */
-  table = vrf_table (AFI_IP, safi, 0);
+  table = zebra_vrf_table (AFI_IP, safi, VRF_DEFAULT);
   if (! table)
     return;
 
@@ -2473,7 +2369,7 @@
   struct route_table *table;
 
   /* Lookup table.  */
-  table = vrf_table (AFI_IP, safi, 0);
+  table = zebra_vrf_table (AFI_IP, safi, VRF_DEFAULT);
   if (! table)
     return;
   
@@ -2538,7 +2434,7 @@
   struct route_table *stable;
 
   /* Lookup table.  */
-  stable = vrf_static_table (AFI_IP, safi, vrf_id);
+  stable = zebra_vrf_static_table (AFI_IP, safi, vrf_id);
   if (! stable)
     return -1;
   
@@ -2629,7 +2525,7 @@
   struct route_table *stable;
 
   /* Lookup table.  */
-  stable = vrf_static_table (AFI_IP, safi, vrf_id);
+  stable = zebra_vrf_static_table (AFI_IP, safi, vrf_id);
   if (! stable)
     return -1;
 
@@ -2695,7 +2591,7 @@
   struct nexthop *nexthop;
 
   /* Lookup table.  */
-  table = vrf_table (AFI_IP6, safi, 0);
+  table = zebra_vrf_table (AFI_IP6, safi, VRF_DEFAULT);
   if (! table)
     return 0;
 
@@ -2806,7 +2702,7 @@
   apply_mask_ipv6 (p);
 
   /* Lookup table.  */
-  table = vrf_table (AFI_IP6, safi, 0);
+  table = zebra_vrf_table (AFI_IP6, safi, VRF_DEFAULT);
   if (! table)
     return 0;
   
@@ -2923,7 +2819,7 @@
   struct route_node *rn;
 
   /* Lookup table.  */
-  table = vrf_table (AFI_IP6, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return;
 
@@ -3018,7 +2914,7 @@
   struct nexthop *nexthop;
 
   /* Lookup table.  */
-  table = vrf_table (AFI_IP6, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return;
 
@@ -3084,7 +2980,7 @@
   struct route_table *stable;
 
   /* Lookup table.  */
-  stable = vrf_static_table (AFI_IP6, SAFI_UNICAST, vrf_id);
+  stable = zebra_vrf_static_table (AFI_IP6, SAFI_UNICAST, vrf_id);
   if (! stable)
     return -1;
     
@@ -3169,7 +3065,7 @@
   struct route_table *stable;
 
   /* Lookup table.  */
-  stable = vrf_static_table (AFI_IP6, SAFI_UNICAST, vrf_id);
+  stable = zebra_vrf_static_table (AFI_IP6, SAFI_UNICAST, vrf_id);
   if (! stable)
     return -1;
 
@@ -3220,13 +3116,13 @@
   struct route_node *rn;
   struct route_table *table;
   
-  table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
   if (table)
     for (rn = route_top (table); rn; rn = route_next (rn))
       if (rnode_to_ribs (rn))
         rib_queue_add (&zebrad, rn);
 
-  table = vrf_table (AFI_IP6, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT);
   if (table)
     for (rn = route_top (table); rn; rn = route_next (rn))
       if (rnode_to_ribs (rn))
@@ -3259,8 +3155,8 @@
 void
 rib_weed_tables (void)
 {
-  rib_weed_table (vrf_table (AFI_IP, SAFI_UNICAST, 0));
-  rib_weed_table (vrf_table (AFI_IP6, SAFI_UNICAST, 0));
+  rib_weed_table (zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT));
+  rib_weed_table (zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT));
 }
 
 /* Delete self installed routes after zebra is relaunched.  */
@@ -3293,8 +3189,8 @@
 void
 rib_sweep_route (void)
 {
-  rib_sweep_table (vrf_table (AFI_IP, SAFI_UNICAST, 0));
-  rib_sweep_table (vrf_table (AFI_IP6, SAFI_UNICAST, 0));
+  rib_sweep_table (zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT));
+  rib_sweep_table (zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT));
 }
 
 /* Remove specific by protocol routes from 'table'. */
@@ -3326,8 +3222,8 @@
 unsigned long
 rib_score_proto (u_char proto)
 {
-  return  rib_score_proto_table (proto, vrf_table (AFI_IP,  SAFI_UNICAST, 0))
-         +rib_score_proto_table (proto, vrf_table (AFI_IP6, SAFI_UNICAST, 0));
+  return  rib_score_proto_table (proto, zebra_vrf_table (AFI_IP,  SAFI_UNICAST, VRF_DEFAULT))
+         +rib_score_proto_table (proto, zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT));
 }
 
 /* Close RIB and clean up kernel routes. */
@@ -3357,8 +3253,8 @@
 void
 rib_close (void)
 {
-  rib_close_table (vrf_table (AFI_IP, SAFI_UNICAST, 0));
-  rib_close_table (vrf_table (AFI_IP6, SAFI_UNICAST, 0));
+  rib_close_table (zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT));
+  rib_close_table (zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT));
 }
 
 /* Routing information base initialize. */
@@ -3366,8 +3262,6 @@
 rib_init (void)
 {
   rib_queue_init (&zebrad);
-  /* VRF initialization.  */
-  vrf_init ();
 }
 
 /*
@@ -3378,15 +3272,19 @@
  * Returns TRUE if a vrf id was found, FALSE otherwise.
  */
 static inline int
-vrf_id_get_next (uint32_t id, uint32_t *next_id_p)
+vrf_id_get_next (vrf_id_t vrf_id, vrf_id_t *next_id_p)
 {
-  while (++id < vector_active (vrf_vector))
+  vrf_iter_t iter = vrf_iterator (vrf_id);
+  struct zebra_vrf *zvrf = vrf_iter2info (iter);
+
+  /* The same one ? Then find out the next. */
+  if (zvrf && (zvrf->vrf_id == vrf_id))
+    zvrf = vrf_iter2info (vrf_next (iter));
+
+  if (zvrf)
     {
-      if (vrf_lookup (id))
-	{
-	  *next_id_p = id;
-	  return 1;
-	}
+      *next_id_p = zvrf->vrf_id;
+      return 1;
     }
 
   return 0;
@@ -3434,7 +3332,7 @@
 
 	  while (iter->afi_safi_ix < (int) ZEBRA_NUM_OF (afi_safis))
 	    {
-	      table = vrf_table (afi_safis[iter->afi_safi_ix].afi,
+	      table = zebra_vrf_table (afi_safis[iter->afi_safi_ix].afi,
 				 afi_safis[iter->afi_safi_ix].safi,
 				 iter->vrf_id);
 	      if (table)
@@ -3472,3 +3370,79 @@
 
   return table;
 }
+
+/*
+ * Create a routing table for the specific AFI/SAFI in the given VRF.
+ */
+static void
+zebra_vrf_table_create (struct zebra_vrf *zvrf, afi_t afi, safi_t safi)
+{
+  rib_table_info_t *info;
+  struct route_table *table;
+
+  assert (!zvrf->table[afi][safi]);
+
+  table = route_table_init ();
+  zvrf->table[afi][safi] = table;
+
+  info = XCALLOC (MTYPE_RIB_TABLE_INFO, sizeof (*info));
+  info->zvrf = zvrf;
+  info->afi = afi;
+  info->safi = safi;
+  table->info = info;
+}
+
+/* Allocate new zebra VRF. */
+struct zebra_vrf *
+zebra_vrf_alloc (vrf_id_t vrf_id)
+{
+  struct zebra_vrf *zvrf;
+
+  zvrf = XCALLOC (MTYPE_ZEBRA_VRF, sizeof (struct zebra_vrf));
+
+  /* Allocate routing table and static table.  */
+  zebra_vrf_table_create (zvrf, AFI_IP, SAFI_UNICAST);
+  zebra_vrf_table_create (zvrf, AFI_IP6, SAFI_UNICAST);
+  zvrf->stable[AFI_IP][SAFI_UNICAST] = route_table_init ();
+  zvrf->stable[AFI_IP6][SAFI_UNICAST] = route_table_init ();
+  zebra_vrf_table_create (zvrf, AFI_IP, SAFI_MULTICAST);
+  zebra_vrf_table_create (zvrf, AFI_IP6, SAFI_MULTICAST);
+  zvrf->stable[AFI_IP][SAFI_MULTICAST] = route_table_init ();
+  zvrf->stable[AFI_IP6][SAFI_MULTICAST] = route_table_init ();
+
+  /* Set VRF ID */
+  zvrf->vrf_id = vrf_id;
+
+  return zvrf;
+}
+
+/* Lookup the routing table in an enabled VRF. */
+struct route_table *
+zebra_vrf_table (afi_t afi, safi_t safi, vrf_id_t vrf_id)
+{
+  struct zebra_vrf *zvrf = vrf_info_lookup (vrf_id);
+
+  if (!zvrf)
+    return NULL;
+
+  if (afi >= AFI_MAX || safi >= SAFI_MAX)
+    return NULL;
+
+  return zvrf->table[afi][safi];
+}
+
+/* Lookup the static routing table in a VRF. */
+struct route_table *
+zebra_vrf_static_table (afi_t afi, safi_t safi, vrf_id_t vrf_id)
+{
+  struct zebra_vrf *zvrf = vrf_info_lookup (vrf_id);
+
+  if (!zvrf)
+    return NULL;
+
+  if (afi >= AFI_MAX || safi >= SAFI_MAX)
+    return NULL;
+
+  return zvrf->stable[afi][safi];
+}
+
diff --git a/zebra/zebra_snmp.c b/zebra/zebra_snmp.c
index f0d3e7e..3d005aa 100644
--- a/zebra/zebra_snmp.c
+++ b/zebra/zebra_snmp.c
@@ -19,6 +19,10 @@
  * 02111-1307, USA.  
  */
 
+/*
+ * Currently SNMP is only running properly for MIBs in the default VRF.
+ */
+
 #include <zebra.h>
 
 #ifdef HAVE_SNMP
@@ -31,6 +35,7 @@
 #include "command.h"
 #include "smux.h"
 #include "table.h"
+#include "vrf.h"
 
 #include "zebra/rib.h"
 #include "zebra/zserv.h"
@@ -143,7 +148,7 @@
   if (smux_header_generic(v, objid, objid_len, exact, val_len, write_method) == MATCH_FAILED)
     return NULL;
 
-  table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return NULL;
 
@@ -168,7 +173,7 @@
   if (smux_header_generic(v, objid, objid_len, exact, val_len, write_method) == MATCH_FAILED)
     return NULL;
 
-  table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return 0;
 
@@ -330,7 +335,7 @@
   if (exact && (*objid_len != (unsigned) v->namelen + 10))
     return;
 
-  table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return;
 
diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c
index bc453de..a4e6af7 100644
--- a/zebra/zebra_vty.c
+++ b/zebra/zebra_vty.c
@@ -27,6 +27,7 @@
 #include "command.h"
 #include "table.h"
 #include "rib.h"
+#include "vrf.h"
 
 #include "zebra/zserv.h"
 
@@ -989,7 +990,7 @@
   struct rib *rib;
   int first = 1;
 
-  table = vrf_table (AFI_IP, safi, 0);
+  table = zebra_vrf_table (AFI_IP, safi, VRF_DEFAULT);
   if (! table)
     return CMD_SUCCESS;
 
@@ -1030,7 +1031,7 @@
       return CMD_WARNING;
     }
   
-  table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return CMD_SUCCESS;
 
@@ -1063,7 +1064,7 @@
   u_int32_t addr; 
   int first = 1;
 
-  table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return CMD_SUCCESS;
 
@@ -1109,7 +1110,7 @@
       return CMD_WARNING;
     }
   
-  table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return CMD_SUCCESS;
 
@@ -1148,7 +1149,7 @@
       return CMD_WARNING;
     }
 
-  table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return CMD_SUCCESS;
 
@@ -1186,7 +1187,7 @@
       return CMD_WARNING;
     }
 
-  table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return CMD_SUCCESS;
 
@@ -1359,7 +1360,7 @@
 {
   struct route_table *table;
 
-  table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return CMD_SUCCESS;
 
@@ -1380,7 +1381,7 @@
 {
   struct route_table *table;
 
-  table = vrf_table (AFI_IP, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return CMD_SUCCESS;
 
@@ -1402,7 +1403,7 @@
   write = 0;
 
   /* Lookup table.  */
-  stable = vrf_static_table (AFI_IP, safi, 0);
+  stable = zebra_vrf_static_table (AFI_IP, safi, VRF_DEFAULT);
   if (! stable)
     return -1;
 
@@ -1489,7 +1490,7 @@
   struct rib *rib;
   int first = 1;
 
-  table = vrf_table (AFI_IP, SAFI_MULTICAST, 0);
+  table = zebra_vrf_table (AFI_IP, SAFI_MULTICAST, VRF_DEFAULT);
   if (! table)
     return CMD_SUCCESS;
 
@@ -1826,7 +1827,7 @@
   struct rib *rib;
   int first = 1;
 
-  table = vrf_table (AFI_IP6, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return CMD_SUCCESS;
 
@@ -1860,7 +1861,7 @@
   int ret;
   int first = 1;
 
-  table = vrf_table (AFI_IP6, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return CMD_SUCCESS;
 
@@ -1907,7 +1908,7 @@
       return CMD_WARNING;
     }
   
-  table = vrf_table (AFI_IP6, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return CMD_SUCCESS;
 
@@ -1946,7 +1947,7 @@
       return CMD_WARNING;
     }
 
-  table = vrf_table (AFI_IP6, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return CMD_SUCCESS;
 
@@ -1984,7 +1985,7 @@
       return CMD_WARNING;
     }
 
-  table = vrf_table (AFI_IP6, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return CMD_SUCCESS;
 
@@ -2015,7 +2016,7 @@
 {
   struct route_table *table;
 
-  table = vrf_table (AFI_IP6, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return CMD_SUCCESS;
 
@@ -2036,7 +2037,7 @@
 {
   struct route_table *table;
 
-  table = vrf_table (AFI_IP6, SAFI_UNICAST, 0);
+  table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT);
   if (! table)
     return CMD_SUCCESS;
 
@@ -2062,7 +2063,7 @@
   struct rib *rib;
   int first = 1;
 
-  table = vrf_table (AFI_IP6, SAFI_MULTICAST, 0);
+  table = zebra_vrf_table (AFI_IP6, SAFI_MULTICAST, VRF_DEFAULT);
   if (! table)
     return CMD_SUCCESS;
 
@@ -2093,7 +2094,7 @@
   write = 0;
 
   /* Lookup table.  */
-  stable = vrf_static_table (AFI_IP6, SAFI_UNICAST, 0);
+  stable = zebra_vrf_static_table (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT);
   if (! stable)
     return -1;
 
