diff --git a/lib/distribute.c b/lib/distribute.c
index 4603e13..583befb 100644
--- a/lib/distribute.c
+++ b/lib/distribute.c
@@ -251,9 +251,9 @@
 
   /* Check of distribute list type. */
   if (strncmp (argv[1], "i", 1) == 0)
-    type = DISTRIBUTE_IN;
+    type = DISTRIBUTE_V4_IN;
   else if (strncmp (argv[1], "o", 1) == 0)
-    type = DISTRIBUTE_OUT;
+    type = DISTRIBUTE_V4_OUT;
   else
     {
       vty_out (vty, "distribute list direction must be [in|out]%s",
@@ -267,8 +267,36 @@
   return CMD_SUCCESS;
 }
 
-ALIAS (distribute_list_all,
+DEFUN (ipv6_distribute_list_all,
        ipv6_distribute_list_all_cmd,
+       "ipv6 distribute-list WORD (in|out)",
+       "Filter networks in routing updates\n"
+       "Access-list name\n"
+       "Filter incoming routing updates\n"
+       "Filter outgoing routing updates\n")
+{
+  enum distribute_type type;
+
+  /* Check of distribute list type. */
+  if (strncmp (argv[1], "i", 1) == 0)
+    type = DISTRIBUTE_V6_IN;
+  else if (strncmp (argv[1], "o", 1) == 0)
+    type = DISTRIBUTE_V6_OUT;
+  else
+  {
+    vty_out (vty, "distribute list direction must be [in|out]%s",
+             VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+
+  /* Get interface name corresponding distribute list. */
+  distribute_list_set (NULL, type, argv[0]);
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (ipv6_distribute_list_all,
+       ipv6_as_v4_distribute_list_all_cmd,
        "distribute-list WORD (in|out)",
        "Filter networks in routing updates\n"
        "Access-list name\n"
@@ -289,9 +317,9 @@
 
   /* Check of distribute list type. */
   if (strncmp (argv[1], "i", 1) == 0)
-    type = DISTRIBUTE_IN;
+    type = DISTRIBUTE_V4_IN;
   else if (strncmp (argv[1], "o", 1) == 0)
-    type = DISTRIBUTE_OUT;
+    type = DISTRIBUTE_V4_OUT;
   else
     {
       vty_out (vty, "distribute list direction must be [in|out]%s",
@@ -308,8 +336,41 @@
   return CMD_SUCCESS;
 }
 
-ALIAS (no_distribute_list_all,
+DEFUN (no_ipv6_distribute_list_all,
        no_ipv6_distribute_list_all_cmd,
+       "no ipv6 distribute-list WORD (in|out)",
+       NO_STR
+       "Filter networks in routing updates\n"
+       "Access-list name\n"
+       "Filter incoming routing updates\n"
+       "Filter outgoing routing updates\n")
+{
+  int ret;
+  enum distribute_type type;
+
+  /* Check of distribute list type. */
+  if (strncmp (argv[1], "i", 1) == 0)
+    type = DISTRIBUTE_V6_IN;
+  else if (strncmp (argv[1], "o", 1) == 0)
+    type = DISTRIBUTE_V6_OUT;
+  else
+  {
+    vty_out (vty, "distribute list direction must be [in|out]%s",
+             VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+
+  ret = distribute_list_unset (NULL, type, argv[0]);
+  if (! ret)
+  {
+    vty_out (vty, "distribute list doesn't exist%s", VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_ipv6_distribute_list_all,
+       no_ipv6_as_v4_distribute_list_all_cmd,
        "no distribute-list WORD (in|out)",
        NO_STR
        "Filter networks in routing updates\n"
@@ -330,9 +391,9 @@
 
   /* Check of distribute list type. */
   if (strncmp (argv[1], "i", 1) == 0)
-    type = DISTRIBUTE_IN;
+    type = DISTRIBUTE_V4_IN;
   else if (strncmp (argv[1], "o", 1) == 0)
-    type = DISTRIBUTE_OUT;
+    type = DISTRIBUTE_V4_OUT;
   else
     {
       vty_out (vty, "distribute list direction must be [in|out]%s", VTY_NEWLINE);
@@ -345,8 +406,36 @@
   return CMD_SUCCESS;
 }
 
-ALIAS (distribute_list,
+DEFUN (ipv6_distribute_list,
        ipv6_distribute_list_cmd,
+       "ipv6 distribute-list WORD (in|out) WORD",
+       "Filter networks in routing updates\n"
+       "Access-list name\n"
+       "Filter incoming routing updates\n"
+       "Filter outgoing routing updates\n"
+       "Interface name\n")
+{
+  enum distribute_type type;
+
+  /* Check of distribute list type. */
+  if (strncmp (argv[1], "i", 1) == 0)
+    type = DISTRIBUTE_V6_IN;
+  else if (strncmp (argv[1], "o", 1) == 0)
+    type = DISTRIBUTE_V6_OUT;
+  else
+  {
+    vty_out (vty, "distribute list direction must be [in|out]%s", VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+
+  /* Get interface name corresponding distribute list. */
+  distribute_list_set (argv[2], type, argv[0]);
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (ipv6_distribute_list,
+       ipv6_as_v4_distribute_list_cmd,
        "distribute-list WORD (in|out) WORD",
        "Filter networks in routing updates\n"
        "Access-list name\n"
@@ -368,9 +457,9 @@
 
   /* Check of distribute list type. */
   if (strncmp (argv[1], "i", 1) == 0)
-    type = DISTRIBUTE_IN;
+    type = DISTRIBUTE_V4_IN;
   else if (strncmp (argv[1], "o", 1) == 0)
-    type = DISTRIBUTE_OUT;
+    type = DISTRIBUTE_V4_OUT;
   else
     {
       vty_out (vty, "distribute list direction must be [in|out]%s", VTY_NEWLINE);
@@ -386,7 +475,41 @@
   return CMD_SUCCESS;
 }
 
-ALIAS (no_distribute_list, no_ipv6_distribute_list_cmd,
+DEFUN (no_ipv6_distribute_list,
+       no_ipv6_distribute_list_cmd,
+       "no ipv6 distribute-list WORD (in|out) WORD",
+       NO_STR
+       "Filter networks in routing updates\n"
+       "Access-list name\n"
+       "Filter incoming routing updates\n"
+       "Filter outgoing routing updates\n"
+       "Interface name\n")
+{
+  int ret;
+  enum distribute_type type;
+
+  /* Check of distribute list type. */
+  if (strncmp (argv[1], "i", 1) == 0)
+    type = DISTRIBUTE_V6_IN;
+  else if (strncmp (argv[1], "o", 1) == 0)
+    type = DISTRIBUTE_V6_OUT;
+  else
+  {
+    vty_out (vty, "distribute list direction must be [in|out]%s", VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+
+  ret = distribute_list_unset (argv[2], type, argv[0]);
+  if (! ret)
+  {
+    vty_out (vty, "distribute list doesn't exist%s", VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_ipv6_distribute_list,
+       no_ipv6_as_v4_distribute_list_cmd,
        "no distribute-list WORD (in|out) WORD",
        NO_STR
        "Filter networks in routing updates\n"
@@ -408,12 +531,12 @@
 
   /* Check of distribute list type. */
   if (strncmp (argv[1], "i", 1) == 0)
-    type = DISTRIBUTE_IN;
+    type = DISTRIBUTE_V4_IN;
   else if (strncmp (argv[1], "o", 1) == 0)
-    type = DISTRIBUTE_OUT;
+    type = DISTRIBUTE_V4_OUT;
   else
     {
-      vty_out (vty, "distribute list direction must be [in|out]%s", 
+      vty_out (vty, "distribute list direction must be [in|out]%s",
 	       VTY_NEWLINE);
       return CMD_WARNING;
     }
@@ -424,8 +547,37 @@
   return CMD_SUCCESS;
 }
 
-ALIAS (distribute_list_prefix_all,
+DEFUN (ipv6_distribute_list_prefix_all,
        ipv6_distribute_list_prefix_all_cmd,
+       "ipv6 distribute-list prefix WORD (in|out)",
+       "Filter networks in routing updates\n"
+       "Filter prefixes in routing updates\n"
+       "Name of an IP prefix-list\n"
+       "Filter incoming routing updates\n"
+       "Filter outgoing routing updates\n")
+{
+  enum distribute_type type;
+
+  /* Check of distribute list type. */
+  if (strncmp (argv[1], "i", 1) == 0)
+    type = DISTRIBUTE_V6_IN;
+  else if (strncmp (argv[1], "o", 1) == 0)
+    type = DISTRIBUTE_V6_OUT;
+  else
+  {
+    vty_out (vty, "distribute list direction must be [in|out]%s",
+             VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+
+  /* Get interface name corresponding distribute list. */
+  distribute_list_prefix_set (NULL, type, argv[0]);
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (ipv6_distribute_list_prefix_all,
+       ipv6_as_v4_distribute_list_prefix_all_cmd,
        "distribute-list prefix WORD (in|out)",
        "Filter networks in routing updates\n"
        "Filter prefixes in routing updates\n"
@@ -448,12 +600,12 @@
 
   /* Check of distribute list type. */
   if (strncmp (argv[1], "i", 1) == 0)
-    type = DISTRIBUTE_IN;
+    type = DISTRIBUTE_V4_IN;
   else if (strncmp (argv[1], "o", 1) == 0)
-    type = DISTRIBUTE_OUT;
+    type = DISTRIBUTE_V4_OUT;
   else
     {
-      vty_out (vty, "distribute list direction must be [in|out]%s", 
+      vty_out (vty, "distribute list direction must be [in|out]%s",
 	       VTY_NEWLINE);
       return CMD_WARNING;
     }
@@ -467,8 +619,42 @@
   return CMD_SUCCESS;
 }
 
-ALIAS (no_distribute_list_prefix_all,
+DEFUN (no_ipv6_distribute_list_prefix_all,
        no_ipv6_distribute_list_prefix_all_cmd,
+       "no ipv6 distribute-list prefix WORD (in|out)",
+       NO_STR
+       "Filter networks in routing updates\n"
+       "Filter prefixes in routing updates\n"
+       "Name of an IP prefix-list\n"
+       "Filter incoming routing updates\n"
+       "Filter outgoing routing updates\n")
+{
+  int ret;
+  enum distribute_type type;
+
+  /* Check of distribute list type. */
+  if (strncmp (argv[1], "i", 1) == 0)
+    type = DISTRIBUTE_V6_IN;
+  else if (strncmp (argv[1], "o", 1) == 0)
+    type = DISTRIBUTE_V6_OUT;
+  else
+  {
+    vty_out (vty, "distribute list direction must be [in|out]%s",
+             VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+
+  ret = distribute_list_prefix_unset (NULL, type, argv[0]);
+  if (! ret)
+  {
+    vty_out (vty, "distribute list doesn't exist%s", VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_ipv6_distribute_list_prefix_all,
+       no_ipv6_as_v4_distribute_list_prefix_all_cmd,
        "no distribute-list prefix WORD (in|out)",
        NO_STR
        "Filter networks in routing updates\n"
@@ -490,12 +676,12 @@
 
   /* Check of distribute list type. */
   if (strncmp (argv[1], "i", 1) == 0)
-    type = DISTRIBUTE_IN;
+    type = DISTRIBUTE_V4_IN;
   else if (strncmp (argv[1], "o", 1) == 0)
-    type = DISTRIBUTE_OUT;
+    type = DISTRIBUTE_V4_OUT;
   else
     {
-      vty_out (vty, "distribute list direction must be [in|out]%s", 
+      vty_out (vty, "distribute list direction must be [in|out]%s",
 	       VTY_NEWLINE);
       return CMD_WARNING;
     }
@@ -506,7 +692,38 @@
   return CMD_SUCCESS;
 }
 
-ALIAS (distribute_list_prefix, ipv6_distribute_list_prefix_cmd,
+DEFUN (ipv6_distribute_list_prefix,
+       ipv6_distribute_list_prefix_cmd,
+       "ipv6 distribute-list prefix WORD (in|out) WORD",
+       "Filter networks in routing updates\n"
+       "Filter prefixes in routing updates\n"
+       "Name of an IP prefix-list\n"
+       "Filter incoming routing updates\n"
+       "Filter outgoing routing updates\n"
+       "Interface name\n")
+{
+  enum distribute_type type;
+
+  /* Check of distribute list type. */
+  if (strncmp (argv[1], "i", 1) == 0)
+    type = DISTRIBUTE_V6_IN;
+  else if (strncmp (argv[1], "o", 1) == 0)
+    type = DISTRIBUTE_V6_OUT;
+  else
+  {
+    vty_out (vty, "distribute list direction must be [in|out]%s",
+             VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+
+  /* Get interface name corresponding distribute list. */
+  distribute_list_prefix_set (argv[2], type, argv[0]);
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (ipv6_distribute_list_prefix,
+       ipv6_as_v4_distribute_list_prefix_cmd,
        "distribute-list prefix WORD (in|out) WORD",
        "Filter networks in routing updates\n"
        "Filter prefixes in routing updates\n"
@@ -530,12 +747,12 @@
 
   /* Check of distribute list type. */
   if (strncmp (argv[1], "i", 1) == 0)
-    type = DISTRIBUTE_IN;
+    type = DISTRIBUTE_V4_IN;
   else if (strncmp (argv[1], "o", 1) == 0)
-    type = DISTRIBUTE_OUT;
+    type = DISTRIBUTE_V4_OUT;
   else
     {
-      vty_out (vty, "distribute list direction must be [in|out]%s", 
+      vty_out (vty, "distribute list direction must be [in|out]%s",
 	       VTY_NEWLINE);
       return CMD_WARNING;
     }
@@ -549,7 +766,43 @@
   return CMD_SUCCESS;
 }
 
-ALIAS (no_distribute_list_prefix, no_ipv6_distribute_list_prefix_cmd,
+DEFUN (no_ipv6_distribute_list_prefix,
+       no_ipv6_distribute_list_prefix_cmd,
+       "no ipv6 distribute-list prefix WORD (in|out) WORD",
+       NO_STR
+       "Filter networks in routing updates\n"
+       "Filter prefixes in routing updates\n"
+       "Name of an IP prefix-list\n"
+       "Filter incoming routing updates\n"
+       "Filter outgoing routing updates\n"
+       "Interface name\n")
+{
+  int ret;
+  enum distribute_type type;
+
+  /* Check of distribute list type. */
+  if (strncmp (argv[1], "i", 1) == 0)
+    type = DISTRIBUTE_V6_IN;
+  else if (strncmp (argv[1], "o", 1) == 0)
+    type = DISTRIBUTE_V6_OUT;
+  else
+  {
+    vty_out (vty, "distribute list direction must be [in|out]%s",
+             VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+
+  ret = distribute_list_prefix_unset (argv[2], type, argv[0]);
+  if (! ret)
+  {
+    vty_out (vty, "distribute list doesn't exist%s", VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_ipv6_distribute_list_prefix,
+       no_ipv6_as_v4_distribute_list_prefix_cmd,
        "no distribute-list prefix WORD (in|out) WORD",
        NO_STR
        "Filter networks in routing updates\n"
@@ -588,9 +841,13 @@
   if (dist)
     {
       has_print = distribute_print(vty, dist->list,   0,
-                                   DISTRIBUTE_OUT, has_print);
+                                   DISTRIBUTE_V4_OUT, has_print);
       has_print = distribute_print(vty, dist->prefix, 1,
-                                   DISTRIBUTE_OUT, has_print);
+                                   DISTRIBUTE_V4_OUT, has_print);
+      has_print = distribute_print(vty, dist->list,   0,
+                                   DISTRIBUTE_V6_OUT, has_print);
+      has_print = distribute_print(vty, dist->prefix, 1,
+                                   DISTRIBUTE_V6_OUT, has_print);
     }
   if (has_print)
     vty_out (vty, "%s", VTY_NEWLINE);
@@ -606,9 +863,13 @@
             vty_out (vty, "    %s filtered by", dist->ifname);
             has_print = 0;
             has_print = distribute_print(vty, dist->list,   0,
-                                         DISTRIBUTE_OUT, has_print);
+                                         DISTRIBUTE_V4_OUT, has_print);
             has_print = distribute_print(vty, dist->prefix, 1,
-                                         DISTRIBUTE_OUT, has_print);
+                                         DISTRIBUTE_V4_OUT, has_print);
+            has_print = distribute_print(vty, dist->list,   0,
+                                         DISTRIBUTE_V6_OUT, has_print);
+            has_print = distribute_print(vty, dist->prefix, 1,
+                                         DISTRIBUTE_V6_OUT, has_print);
             if (has_print)
               vty_out (vty, "%s", VTY_NEWLINE);
             else
@@ -624,9 +885,14 @@
   if (dist)
     {
       has_print = distribute_print(vty, dist->list,   0,
-                                   DISTRIBUTE_IN, has_print);
+                                   DISTRIBUTE_V4_IN, has_print);
       has_print = distribute_print(vty, dist->prefix, 1,
-                                   DISTRIBUTE_IN, has_print);    }
+                                   DISTRIBUTE_V4_IN, has_print);
+      has_print = distribute_print(vty, dist->list,   0,
+                                   DISTRIBUTE_V6_IN, has_print);
+      has_print = distribute_print(vty, dist->prefix, 1,
+                                   DISTRIBUTE_V6_IN, has_print);
+    }
   if (has_print)
     vty_out (vty, "%s", VTY_NEWLINE);
   else
@@ -641,9 +907,13 @@
             vty_out (vty, "    %s filtered by", dist->ifname);
             has_print = 0;
             has_print = distribute_print(vty, dist->list,   0,
-                                         DISTRIBUTE_IN, has_print);
+                                         DISTRIBUTE_V4_IN, has_print);
             has_print = distribute_print(vty, dist->prefix, 1,
-                                         DISTRIBUTE_IN, has_print);
+                                         DISTRIBUTE_V4_IN, has_print);
+            has_print = distribute_print(vty, dist->list,   0,
+                                         DISTRIBUTE_V6_IN, has_print);
+            has_print = distribute_print(vty, dist->prefix, 1,
+                                         DISTRIBUTE_V6_IN, has_print);
             if (has_print)
               vty_out (vty, "%s", VTY_NEWLINE);
             else
@@ -659,7 +929,7 @@
 {
   unsigned int i;
   int j;
-  int output;
+  int output, v6;
   struct hash_backet *mp;
   int write = 0;
 
@@ -672,8 +942,10 @@
 
 	for (j=0; j < DISTRIBUTE_MAX; j++)
 	  if (dist->list[j]) {
-	    output = j == DISTRIBUTE_OUT;
-	    vty_out (vty, " distribute-list %s %s %s%s",
+	    output = j == DISTRIBUTE_V4_OUT || j == DISTRIBUTE_V6_OUT;
+            v6 = j == DISTRIBUTE_V6_IN || j == DISTRIBUTE_V6_OUT;
+	    vty_out (vty, " %sdistribute-list %s %s %s%s",
+                     v6 ? "ipv6 " : "",
 		     dist->list[j],
 		     output ? "out" : "in",
 		     dist->ifname ? dist->ifname : "",
@@ -683,8 +955,10 @@
 
 	for (j=0; j < DISTRIBUTE_MAX; j++)
 	  if (dist->prefix[j]) {
-	    output = j == DISTRIBUTE_OUT;
-	    vty_out (vty, " distribute-list prefix %s %s %s%s",
+	    output = j == DISTRIBUTE_V4_OUT || j == DISTRIBUTE_V6_OUT;
+            v6 = j == DISTRIBUTE_V6_IN || j == DISTRIBUTE_V6_OUT;
+	    vty_out (vty, " %sdistribute-list prefix %s %s %s%s",
+                     v6 ? "ipv6 " : "",
 		     dist->prefix[j],
 		     output ? "out" : "in",
 		     dist->ifname ? dist->ifname : "",
@@ -708,8 +982,8 @@
 {
   disthash = hash_create (distribute_hash_make,
                           (int (*) (const void *, const void *)) distribute_cmp);
-
-  if(node==RIP_NODE) {
+  /* install v4 */
+  if (node == RIP_NODE || node == BABEL_NODE) {
     install_element (node, &distribute_list_all_cmd);
     install_element (node, &no_distribute_list_all_cmd);
     install_element (node, &distribute_list_cmd);
@@ -718,10 +992,10 @@
     install_element (node, &no_distribute_list_prefix_all_cmd);
     install_element (node, &distribute_list_prefix_cmd);
     install_element (node, &no_distribute_list_prefix_cmd);
-  } else if (node == RIPNG_NODE || node == BABEL_NODE) {
-    /* WARNING: two identical commands installed do a crash, so be worry with
-     aliases. For this reason, and because all these commands are aliases, Babel
-     is not set with RIP. */
+  }
+
+  /* install v6 */
+  if (node == RIPNG_NODE || node == BABEL_NODE) {
     install_element (node, &ipv6_distribute_list_all_cmd);
     install_element (node, &no_ipv6_distribute_list_all_cmd);
     install_element (node, &ipv6_distribute_list_cmd);
@@ -731,4 +1005,16 @@
     install_element (node, &ipv6_distribute_list_prefix_cmd);
     install_element (node, &no_ipv6_distribute_list_prefix_cmd);
   }
+
+  /* install v4 syntax command for v6 only protocols. */
+  if (node == RIPNG_NODE) {
+    install_element (node, &ipv6_as_v4_distribute_list_all_cmd);
+    install_element (node, &no_ipv6_as_v4_distribute_list_all_cmd);
+    install_element (node, &ipv6_as_v4_distribute_list_cmd);
+    install_element (node, &no_ipv6_as_v4_distribute_list_cmd);
+    install_element (node, &ipv6_as_v4_distribute_list_prefix_all_cmd);
+    install_element (node, &no_ipv6_as_v4_distribute_list_prefix_all_cmd);
+    install_element (node, &ipv6_as_v4_distribute_list_prefix_cmd);
+    install_element (node, &no_ipv6_as_v4_distribute_list_prefix_cmd);
+  }
 }
diff --git a/lib/distribute.h b/lib/distribute.h
index a2ffffd..e9625a3 100644
--- a/lib/distribute.h
+++ b/lib/distribute.h
@@ -29,8 +29,10 @@
 /* Disctirubte list types. */
 enum distribute_type
 {
-  DISTRIBUTE_IN,
-  DISTRIBUTE_OUT,
+  DISTRIBUTE_V4_IN,
+  DISTRIBUTE_V6_IN,
+  DISTRIBUTE_V4_OUT,
+  DISTRIBUTE_V6_OUT,
   DISTRIBUTE_MAX
 };
 
diff --git a/ripd/ripd.c b/ripd/ripd.c
index 990db60..385dab9 100644
--- a/ripd/ripd.c
+++ b/ripd/ripd.c
@@ -321,7 +321,7 @@
   struct access_list *alist;
   struct prefix_list *plist;
   int distribute = rip_distribute == RIP_FILTER_OUT ?
-      DISTRIBUTE_OUT : DISTRIBUTE_IN;
+      DISTRIBUTE_V4_OUT : DISTRIBUTE_V4_IN;
   const char *inout = rip_distribute == RIP_FILTER_OUT ? "out" : "in";
 
   /* Input distribute-list filtering. */
@@ -3799,9 +3799,9 @@
 
   ri = ifp->info;
 
-  if (dist->list[DISTRIBUTE_IN])
+  if (dist->list[DISTRIBUTE_V4_IN])
     {
-      alist = access_list_lookup (AFI_IP, dist->list[DISTRIBUTE_IN]);
+      alist = access_list_lookup (AFI_IP, dist->list[DISTRIBUTE_V4_IN]);
       if (alist)
 	ri->list[RIP_FILTER_IN] = alist;
       else
@@ -3810,9 +3810,9 @@
   else
     ri->list[RIP_FILTER_IN] = NULL;
 
-  if (dist->list[DISTRIBUTE_OUT])
+  if (dist->list[DISTRIBUTE_V4_OUT])
     {
-      alist = access_list_lookup (AFI_IP, dist->list[DISTRIBUTE_OUT]);
+      alist = access_list_lookup (AFI_IP, dist->list[DISTRIBUTE_V4_OUT]);
       if (alist)
 	ri->list[RIP_FILTER_OUT] = alist;
       else
@@ -3821,9 +3821,9 @@
   else
     ri->list[RIP_FILTER_OUT] = NULL;
 
-  if (dist->prefix[DISTRIBUTE_IN])
+  if (dist->prefix[DISTRIBUTE_V4_IN])
     {
-      plist = prefix_list_lookup (AFI_IP, dist->prefix[DISTRIBUTE_IN]);
+      plist = prefix_list_lookup (AFI_IP, dist->prefix[DISTRIBUTE_V4_IN]);
       if (plist)
 	ri->prefix[RIP_FILTER_IN] = plist;
       else
@@ -3832,9 +3832,9 @@
   else
     ri->prefix[RIP_FILTER_IN] = NULL;
 
-  if (dist->prefix[DISTRIBUTE_OUT])
+  if (dist->prefix[DISTRIBUTE_V4_OUT])
     {
-      plist = prefix_list_lookup (AFI_IP, dist->prefix[DISTRIBUTE_OUT]);
+      plist = prefix_list_lookup (AFI_IP, dist->prefix[DISTRIBUTE_V4_OUT]);
       if (plist)
 	ri->prefix[RIP_FILTER_OUT] = plist;
       else
diff --git a/ripngd/ripngd.c b/ripngd/ripngd.c
index dd54440..9105831 100644
--- a/ripngd/ripngd.c
+++ b/ripngd/ripngd.c
@@ -615,7 +615,7 @@
   struct access_list *alist;
   struct prefix_list *plist;
   int distribute = ripng_distribute == RIPNG_FILTER_OUT ?
-      DISTRIBUTE_OUT : DISTRIBUTE_IN;
+      DISTRIBUTE_V6_OUT : DISTRIBUTE_V6_IN;
   const char *inout = ripng_distribute == RIPNG_FILTER_OUT ? "out" : "in";
 
   /* Input distribute-list filtering. */
@@ -2757,9 +2757,9 @@
 
   ri = ifp->info;
 
-  if (dist->list[DISTRIBUTE_IN])
+  if (dist->list[DISTRIBUTE_V6_IN])
     {
-      alist = access_list_lookup (AFI_IP6, dist->list[DISTRIBUTE_IN]);
+      alist = access_list_lookup (AFI_IP6, dist->list[DISTRIBUTE_V6_IN]);
       if (alist)
 	ri->list[RIPNG_FILTER_IN] = alist;
       else
@@ -2768,9 +2768,9 @@
   else
     ri->list[RIPNG_FILTER_IN] = NULL;
 
-  if (dist->list[DISTRIBUTE_OUT])
+  if (dist->list[DISTRIBUTE_V6_OUT])
     {
-      alist = access_list_lookup (AFI_IP6, dist->list[DISTRIBUTE_OUT]);
+      alist = access_list_lookup (AFI_IP6, dist->list[DISTRIBUTE_V6_OUT]);
       if (alist)
 	ri->list[RIPNG_FILTER_OUT] = alist;
       else
@@ -2779,9 +2779,9 @@
   else
     ri->list[RIPNG_FILTER_OUT] = NULL;
 
-  if (dist->prefix[DISTRIBUTE_IN])
+  if (dist->prefix[DISTRIBUTE_V6_IN])
     {
-      plist = prefix_list_lookup (AFI_IP6, dist->prefix[DISTRIBUTE_IN]);
+      plist = prefix_list_lookup (AFI_IP6, dist->prefix[DISTRIBUTE_V6_IN]);
       if (plist)
 	ri->prefix[RIPNG_FILTER_IN] = plist;
       else
@@ -2790,9 +2790,9 @@
   else
     ri->prefix[RIPNG_FILTER_IN] = NULL;
 
-  if (dist->prefix[DISTRIBUTE_OUT])
+  if (dist->prefix[DISTRIBUTE_V6_OUT])
     {
-      plist = prefix_list_lookup (AFI_IP6, dist->prefix[DISTRIBUTE_OUT]);
+      plist = prefix_list_lookup (AFI_IP6, dist->prefix[DISTRIBUTE_V6_OUT]);
       if (plist)
 	ri->prefix[RIPNG_FILTER_OUT] = plist;
       else
