diff --git a/ospf6d/ospf6d.c b/ospf6d/ospf6d.c
index 4eba8a4..6cc0764 100644
--- a/ospf6d/ospf6d.c
+++ b/ospf6d/ospf6d.c
@@ -140,7 +140,8 @@
   return prev;
 }
 
-
+
+/* show database functions */
 DEFUN (show_version_ospf6,
        show_version_ospf6_cmd,
        "show version ospf6",
@@ -186,7 +187,7 @@
 static int
 parse_show_level (int argc, char **argv)
 {
-  int level;
+  int level = 0;
   if (argc)
     {
       if (! strncmp (argv[0], "de", 2))
@@ -204,7 +205,7 @@
 static u_int16_t
 parse_type_spec (int argc, char **argv)
 {
-  u_int16_t type;
+  u_int16_t type = 0;
   assert (argc);
   if (! strcmp (argv[0], "router"))
     type = htons (OSPF6_LSTYPE_ROUTER);
@@ -316,7 +317,7 @@
 
   switch (OSPF6_LSA_SCOPE (type))
     {
-      case OSPF6_LSA_SCOPE_AREA:
+      case OSPF6_SCOPE_AREA:
         for (i = listhead (o->area_list); i; nextnode (i))
           {
             oa = (struct ospf6_area *) getdata (i);
@@ -325,7 +326,7 @@
           }
         break;
 
-      case OSPF6_LSA_SCOPE_LINKLOCAL:
+      case OSPF6_SCOPE_LINKLOCAL:
         for (i = listhead (o->area_list); i; nextnode (i))
           {
             oa = (struct ospf6_area *) getdata (i);
@@ -339,7 +340,7 @@
           }
         break;
 
-      case OSPF6_LSA_SCOPE_AS:
+      case OSPF6_SCOPE_AS:
         vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
         ospf6_lsdb_show (vty, level, &type, NULL, NULL, o->lsdb);
         break;
@@ -623,7 +624,7 @@
 
   switch (OSPF6_LSA_SCOPE (type))
     {
-      case OSPF6_LSA_SCOPE_AREA:
+      case OSPF6_SCOPE_AREA:
         for (i = listhead (o->area_list); i; nextnode (i))
           {
             oa = (struct ospf6_area *) getdata (i);
@@ -632,7 +633,7 @@
           }
         break;
 
-      case OSPF6_LSA_SCOPE_LINKLOCAL:
+      case OSPF6_SCOPE_LINKLOCAL:
         for (i = listhead (o->area_list); i; nextnode (i))
           {
             oa = (struct ospf6_area *) getdata (i);
@@ -646,7 +647,7 @@
           }
         break;
 
-      case OSPF6_LSA_SCOPE_AS:
+      case OSPF6_SCOPE_AS:
         vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
         ospf6_lsdb_show (vty, level, &type, &id, NULL, o->lsdb);
         break;
@@ -782,7 +783,7 @@
 
   switch (OSPF6_LSA_SCOPE (type))
     {
-      case OSPF6_LSA_SCOPE_AREA:
+      case OSPF6_SCOPE_AREA:
         for (i = listhead (o->area_list); i; nextnode (i))
           {
             oa = (struct ospf6_area *) getdata (i);
@@ -791,7 +792,7 @@
           }
         break;
 
-      case OSPF6_LSA_SCOPE_LINKLOCAL:
+      case OSPF6_SCOPE_LINKLOCAL:
         for (i = listhead (o->area_list); i; nextnode (i))
           {
             oa = (struct ospf6_area *) getdata (i);
@@ -805,7 +806,7 @@
           }
         break;
 
-      case OSPF6_LSA_SCOPE_AS:
+      case OSPF6_SCOPE_AS:
         vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
         ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, o->lsdb);
         break;
@@ -918,7 +919,7 @@
   if ((inet_pton (AF_INET, argv[0], &id)) != 1)
     {
       vty_out (vty, "Link state ID is not parsable: %s%s",
-               argv[1], VNL);
+               argv[0], VNL);
       return CMD_SUCCESS;
     }
 
@@ -1014,7 +1015,7 @@
   if ((inet_pton (AF_INET, argv[0], &id)) != 1)
     {
       vty_out (vty, "Link state ID is not parsable: %s%s",
-               argv[1], VNL);
+               argv[0], VNL);
       return CMD_SUCCESS;
     }
 
@@ -1125,7 +1126,7 @@
 
   switch (OSPF6_LSA_SCOPE (type))
     {
-      case OSPF6_LSA_SCOPE_AREA:
+      case OSPF6_SCOPE_AREA:
         for (i = listhead (o->area_list); i; nextnode (i))
           {
             oa = (struct ospf6_area *) getdata (i);
@@ -1134,7 +1135,7 @@
           }
         break;
 
-      case OSPF6_LSA_SCOPE_LINKLOCAL:
+      case OSPF6_SCOPE_LINKLOCAL:
         for (i = listhead (o->area_list); i; nextnode (i))
           {
             oa = (struct ospf6_area *) getdata (i);
@@ -1148,7 +1149,7 @@
           }
         break;
 
-      case OSPF6_LSA_SCOPE_AS:
+      case OSPF6_SCOPE_AS:
         vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
         ospf6_lsdb_show (vty, level, &type, &id, &adv_router, o->lsdb);
         break;
@@ -1250,7 +1251,7 @@
 
   switch (OSPF6_LSA_SCOPE (type))
     {
-      case OSPF6_LSA_SCOPE_AREA:
+      case OSPF6_SCOPE_AREA:
         for (i = listhead (o->area_list); i; nextnode (i))
           {
             oa = (struct ospf6_area *) getdata (i);
@@ -1259,7 +1260,7 @@
           }
         break;
 
-      case OSPF6_LSA_SCOPE_LINKLOCAL:
+      case OSPF6_SCOPE_LINKLOCAL:
         for (i = listhead (o->area_list); i; nextnode (i))
           {
             oa = (struct ospf6_area *) getdata (i);
@@ -1273,7 +1274,7 @@
           }
         break;
 
-      case OSPF6_LSA_SCOPE_AS:
+      case OSPF6_SCOPE_AS:
         vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
         ospf6_lsdb_show (vty, level, &type, &id, &adv_router, o->lsdb);
         break;
@@ -1416,7 +1417,7 @@
 
   switch (OSPF6_LSA_SCOPE (type))
     {
-      case OSPF6_LSA_SCOPE_AREA:
+      case OSPF6_SCOPE_AREA:
         for (i = listhead (o->area_list); i; nextnode (i))
           {
             oa = (struct ospf6_area *) getdata (i);
@@ -1425,7 +1426,7 @@
           }
         break;
 
-      case OSPF6_LSA_SCOPE_LINKLOCAL:
+      case OSPF6_SCOPE_LINKLOCAL:
         for (i = listhead (o->area_list); i; nextnode (i))
           {
             oa = (struct ospf6_area *) getdata (i);
@@ -1439,7 +1440,7 @@
           }
         break;
 
-      case OSPF6_LSA_SCOPE_AS:
+      case OSPF6_SCOPE_AS:
         vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
         ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, o->lsdb);
         break;
@@ -1517,7 +1518,7 @@
   argc--;
   argv++;
 
-  if ((inet_pton (AF_INET, argv[1], &id)) != 1)
+  if ((inet_pton (AF_INET, argv[0], &id)) != 1)
     {
       vty_out (vty, "Link State ID is not parsable: %s%s",
                argv[0], VNL);
@@ -1532,7 +1533,7 @@
 
   switch (OSPF6_LSA_SCOPE (type))
     {
-      case OSPF6_LSA_SCOPE_AREA:
+      case OSPF6_SCOPE_AREA:
         for (i = listhead (o->area_list); i; nextnode (i))
           {
             oa = (struct ospf6_area *) getdata (i);
@@ -1541,7 +1542,7 @@
           }
         break;
 
-      case OSPF6_LSA_SCOPE_LINKLOCAL:
+      case OSPF6_SCOPE_LINKLOCAL:
         for (i = listhead (o->area_list); i; nextnode (i))
           {
             oa = (struct ospf6_area *) getdata (i);
@@ -1555,7 +1556,7 @@
           }
         break;
 
-      case OSPF6_LSA_SCOPE_AS:
+      case OSPF6_SCOPE_AS:
         vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
         ospf6_lsdb_show (vty, level, &type, &id, &adv_router, o->lsdb);
         break;
@@ -1633,7 +1634,7 @@
   argc--;
   argv++;
 
-  if ((inet_pton (AF_INET, argv[1], &id)) != 1)
+  if ((inet_pton (AF_INET, argv[0], &id)) != 1)
     {
       vty_out (vty, "Link State ID is not parsable: %s%s",
                argv[0], VNL);
@@ -1648,7 +1649,7 @@
 
   switch (OSPF6_LSA_SCOPE (type))
     {
-      case OSPF6_LSA_SCOPE_AREA:
+      case OSPF6_SCOPE_AREA:
         for (i = listhead (o->area_list); i; nextnode (i))
           {
             oa = (struct ospf6_area *) getdata (i);
@@ -1657,7 +1658,7 @@
           }
         break;
 
-      case OSPF6_LSA_SCOPE_LINKLOCAL:
+      case OSPF6_SCOPE_LINKLOCAL:
         for (i = listhead (o->area_list); i; nextnode (i))
           {
             oa = (struct ospf6_area *) getdata (i);
@@ -1671,7 +1672,7 @@
           }
         break;
 
-      case OSPF6_LSA_SCOPE_AS:
+      case OSPF6_SCOPE_AS:
         vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
         ospf6_lsdb_show (vty, level, &type, &id, &adv_router, o->lsdb);
         break;
@@ -1712,6 +1713,68 @@
        "Display LSA's internal information\n"
       );
 
+
+DEFUN (show_ipv6_ospf6_border_routers,
+       show_ipv6_ospf6_border_routers_cmd,
+       "show ipv6 ospf6 border-routers",
+       SHOW_STR
+       IP6_STR
+       OSPF6_STR
+       "Display routing table for ABR and ASBR\n"
+      )
+{
+  u_int32_t adv_router;
+  void (*showfunc) (struct vty *, struct ospf6_route *);
+  struct ospf6_route *ro;
+  struct prefix prefix;
+
+  OSPF6_CMD_CHECK_RUNNING ();
+
+  if (argc && ! strcmp ("detail", argv[0]))
+    {
+      showfunc = ospf6_route_show_detail;
+      argc--;
+      argv++;
+    }
+  else
+    showfunc = ospf6_brouter_show;
+
+  if (argc)
+    {
+      if ((inet_pton (AF_INET, argv[0], &adv_router)) != 1)
+        {
+          vty_out (vty, "Router ID is not parsable: %s%s", argv[0], VNL);
+          return CMD_SUCCESS;
+        }
+
+      ospf6_linkstate_prefix (adv_router, 0, &prefix);
+      ro = ospf6_route_lookup (&prefix, ospf6->brouter_table);
+      ospf6_route_show_detail (vty, ro);
+      return CMD_SUCCESS;
+    }
+
+  if (showfunc == ospf6_brouter_show)
+    ospf6_brouter_show_header (vty);
+
+  for (ro = ospf6_route_head (ospf6->brouter_table); ro;
+       ro = ospf6_route_next (ro))
+    (*showfunc) (vty, ro);
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (show_ipv6_ospf6_border_routers,
+       show_ipv6_ospf6_border_routers_detail_cmd,
+       "show ipv6 ospf6 border-routers (A.B.C.D|detail)",
+       SHOW_STR
+       IP6_STR
+       OSPF6_STR
+       "Display routing table for ABR and ASBR\n"
+       "Specify Router-ID\n"
+       "Display Detail\n"
+      );
+
+
 /* Install ospf related commands. */
 void
 ospf6_init ()
@@ -1726,10 +1789,16 @@
   install_element_ospf6_debug_spf ();
   install_element_ospf6_debug_route ();
   install_element_ospf6_debug_asbr ();
+  install_element_ospf6_debug_abr ();
 
   install_element (VIEW_NODE, &show_version_ospf6_cmd);
   install_element (ENABLE_NODE, &show_version_ospf6_cmd);
 
+  install_element (VIEW_NODE, &show_ipv6_ospf6_border_routers_cmd);
+  install_element (VIEW_NODE, &show_ipv6_ospf6_border_routers_detail_cmd);
+  install_element (ENABLE_NODE, &show_ipv6_ospf6_border_routers_cmd);
+  install_element (ENABLE_NODE, &show_ipv6_ospf6_border_routers_detail_cmd);
+
 #define INSTALL(n,c) \
   install_element (n ## _NODE, &show_ipv6_ospf6_ ## c);
 
