diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c
index dd7df5c..6ad286f 100644
--- a/zebra/zebra_vty.c
+++ b/zebra/zebra_vty.c
@@ -2480,89 +2480,6 @@
     return CMD_SUCCESS;
 }
 
-/*
- * Show IP mroute command to dump the BGP Multicast
- * routing table
- */
-DEFUN (show_ip_mroute,
-       show_ip_mroute_cmd,
-       "show ip mroute",
-       SHOW_STR
-       IP_STR
-       "IP Multicast routing table\n")
-{
-  struct route_table *table;
-  struct route_node *rn;
-  struct rib *rib;
-  int first = 1;
-  vrf_id_t vrf_id = VRF_DEFAULT;
-
-  if (argc > 0)
-    VTY_GET_INTEGER ("VRF ID", vrf_id, argv[0]);
-
-  table = zebra_vrf_table (AFI_IP, SAFI_MULTICAST, vrf_id);
-  if (! table)
-    return CMD_SUCCESS;
-
-  /* Show all IPv4 routes. */
-  for (rn = route_top (table); rn; rn = route_next (rn))
-    RNODE_FOREACH_RIB (rn, rib)
-      {
-       if (first)
-         {
-	   vty_out (vty, SHOW_ROUTE_V4_HEADER);
-           first = 0;
-         }
-       vty_show_ip_route (vty, rn, rib);
-      }
-  return CMD_SUCCESS;
-}
-
-ALIAS (show_ip_mroute,
-       show_ip_mroute_vrf_cmd,
-       "show ip mroute " VRF_CMD_STR,
-       SHOW_STR
-       IP_STR
-       "IP Multicast routing table\n"
-       VRF_CMD_HELP_STR)
-
-DEFUN (show_ip_mroute_vrf_all,
-       show_ip_mroute_vrf_all_cmd,
-       "show ip mroute " VRF_ALL_CMD_STR,
-       SHOW_STR
-       IP_STR
-       "IP Multicast routing table\n"
-       VRF_ALL_CMD_HELP_STR)
-{
-  struct route_table *table;
-  struct route_node *rn;
-  struct rib *rib;
-  struct zebra_vrf *zvrf;
-  vrf_iter_t iter;
-  int first = 1;
-
-  for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
-    {
-      if ((zvrf = vrf_iter2info (iter)) == NULL ||
-          (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
-        continue;
-
-      /* Show all IPv4 routes. */
-      for (rn = route_top (table); rn; rn = route_next (rn))
-        RNODE_FOREACH_RIB (rn, rib)
-          {
-           if (first)
-             {
-               vty_out (vty, SHOW_ROUTE_V4_HEADER);
-               first = 0;
-             }
-           vty_show_ip_route (vty, rn, rib);
-          }
-    }
-
-  return CMD_SUCCESS;
-}
-
 #ifdef HAVE_IPV6
 /* General fucntion for IPv6 static route. */
 static int
@@ -3972,9 +3889,6 @@
   install_element (ENABLE_NODE, &show_ip_route_summary_cmd);
   install_element (ENABLE_NODE, &show_ip_route_summary_prefix_cmd);
 
-  install_element (VIEW_NODE, &show_ip_mroute_cmd);
-  install_element (ENABLE_NODE, &show_ip_mroute_cmd);
-
   install_element (VIEW_NODE, &show_ip_rpf_cmd);
   install_element (ENABLE_NODE, &show_ip_rpf_cmd);
   install_element (VIEW_NODE, &show_ip_rpf_addr_cmd);
@@ -4045,12 +3959,6 @@
   install_element (ENABLE_NODE, &show_ip_route_summary_vrf_all_cmd);
   install_element (ENABLE_NODE, &show_ip_route_summary_prefix_vrf_all_cmd);
 
-  install_element (VIEW_NODE, &show_ip_mroute_vrf_cmd);
-  install_element (ENABLE_NODE, &show_ip_mroute_vrf_cmd);
-
-  install_element (VIEW_NODE, &show_ip_mroute_vrf_all_cmd);
-  install_element (ENABLE_NODE, &show_ip_mroute_vrf_all_cmd);
-
   install_element (VIEW_NODE, &show_ip_rpf_vrf_cmd);
   install_element (VIEW_NODE, &show_ip_rpf_vrf_all_cmd);
   install_element (VIEW_NODE, &show_ip_rpf_addr_vrf_cmd);
