diff --git a/zebra/ChangeLog b/zebra/ChangeLog
index 1b1e1a9..04619ae 100644
--- a/zebra/ChangeLog
+++ b/zebra/ChangeLog
@@ -1,3 +1,12 @@
+2004-05-18 Hasso Tepper <hasso@estpak.ee>
+
+	* rtadv.c: Removed "[no] ipv6 nd send-ra" command. Replaced "ipv6 nd
+	  prefix-advertisement" with "ipv6 nd prefix". Rewrite syntax of
+	  "ipv6 nd prefix" command to allow various combinations of parameters
+	  and flags. No defaults in configuration. Replaced on-link and
+	  autoconfig with off-link and no-autoconfig flags in command syntax.
+	  Cosmetic fixes in all commands. Documentation to reflect all changes.
+
 2004-05-11 Paul Jakma <paul@dishone.st>
 
 	* Makefile.am: support for IOCTL_METHOD, as per Sowmini's patch.
diff --git a/zebra/rtadv.c b/zebra/rtadv.c
index c98b11c..a09053d 100644
--- a/zebra/rtadv.c
+++ b/zebra/rtadv.c
@@ -232,7 +232,8 @@
       {
 	u_char buf[INET6_ADDRSTRLEN];
 
-	zlog_info ("DEBUG %s", inet_ntop (AF_INET6, &pinfo->nd_opt_pi_prefix, buf, INET6_ADDRSTRLEN));
+	zlog_info ("DEBUG %s", inet_ntop (AF_INET6, &pinfo->nd_opt_pi_prefix, 
+	           buf, INET6_ADDRSTRLEN));
 
       }
 #endif /* DEBUG */
@@ -550,7 +551,7 @@
 DEFUN (ipv6_nd_suppress_ra,
        ipv6_nd_suppress_ra_cmd,
        "ipv6 nd suppress-ra",
-       IP_STR
+       "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
        "Suppress Router Advertisement\n")
 {
@@ -581,19 +582,11 @@
   return CMD_SUCCESS;
 }
 
-ALIAS (ipv6_nd_suppress_ra,
-       no_ipv6_nd_send_ra_cmd,
-       "no ipv6 nd send-ra",
-       NO_STR
-       IP_STR
-       "Neighbor discovery\n"
-       "Send Router Advertisement\n")
-
 DEFUN (no_ipv6_nd_suppress_ra,
        no_ipv6_nd_suppress_ra_cmd,
        "no ipv6 nd suppress-ra",
        NO_STR
-       IP_STR
+       "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
        "Suppress Router Advertisement\n")
 {
@@ -624,17 +617,10 @@
   return CMD_SUCCESS;
 }
 
-ALIAS (no_ipv6_nd_suppress_ra,
-       ipv6_nd_send_ra_cmd,
-       "ipv6 nd send-ra",
-       IP_STR
-       "Neighbor discovery\n"
-       "Send Router Advertisement\n")
-
 DEFUN (ipv6_nd_ra_interval,
        ipv6_nd_ra_interval_cmd,
        "ipv6 nd ra-interval SECONDS",
-       IP_STR
+       "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
        "Router Advertisement interval\n"
        "Router Advertisement interval in seconds\n")
@@ -665,7 +651,7 @@
        no_ipv6_nd_ra_interval_cmd,
        "no ipv6 nd ra-interval",
        NO_STR
-       IP_STR
+       "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
        "Router Advertisement interval\n")
 {
@@ -685,7 +671,7 @@
 DEFUN (ipv6_nd_ra_lifetime,
        ipv6_nd_ra_lifetime_cmd,
        "ipv6 nd ra-lifetime SECONDS",
-       IP_STR
+       "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
        "Router lifetime\n"
        "Router lifetime in seconds\n")
@@ -714,7 +700,7 @@
        no_ipv6_nd_ra_lifetime_cmd,
        "no ipv6 nd ra-lifetime",
        NO_STR
-       IP_STR
+       "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
        "Router lifetime\n")
 {
@@ -732,7 +718,7 @@
 DEFUN (ipv6_nd_reachable_time,
        ipv6_nd_reachable_time_cmd,
        "ipv6 nd reachable-time MILLISECONDS",
-       IP_STR
+       "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
        "Reachable time\n"
        "Reachable time in milliseconds\n")
@@ -761,7 +747,7 @@
        no_ipv6_nd_reachable_time_cmd,
        "no ipv6 nd reachable-time",
        NO_STR
-       IP_STR
+       "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
        "Reachable time\n")
 {
@@ -779,7 +765,7 @@
 DEFUN (ipv6_nd_managed_config_flag,
        ipv6_nd_managed_config_flag_cmd,
        "ipv6 nd managed-config-flag",
-       IP_STR
+       "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
        "Managed address configuration flag\n")
 {
@@ -798,7 +784,7 @@
        no_ipv6_nd_managed_config_flag_cmd,
        "no ipv6 nd managed-config-flag",
        NO_STR
-       IP_STR
+       "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
        "Managed address configuration flag\n")
 {
@@ -816,7 +802,7 @@
 DEFUN (ipv6_nd_other_config_flag,
        ipv6_nd_other_config_flag_cmd,
        "ipv6 nd other-config-flag",
-       IP_STR
+       "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
        "Other statefull configuration flag\n")
 {
@@ -835,7 +821,7 @@
        no_ipv6_nd_other_config_flag_cmd,
        "no ipv6 nd other-config-flag",
        NO_STR
-       IP_STR
+       "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
        "Other statefull configuration flag\n")
 {
@@ -850,20 +836,24 @@
   return CMD_SUCCESS;
 }
 
-DEFUN (ipv6_nd_prefix_advertisement,
-       ipv6_nd_prefix_advertisement_cmd,
-       "ipv6 nd prefix-advertisement IPV6PREFIX VALID PREFERRED [onlink] [autoconfig]",
-       IP_STR
+DEFUN (ipv6_nd_prefix,
+       ipv6_nd_prefix_cmd,
+       "ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) "
+       "(<0-4294967295>|infinite) (off-link|) (no-autoconfig|)",
+       "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
        "Prefix information\n"
        "IPv6 prefix\n"
        "Valid lifetime in seconds\n"
+       "Infinite valid lifetime\n"
        "Preferred lifetime in seconds\n"
-       "On link flag\n"
-       "Autonomous address-configuration flag\n")
+       "Infinite preferred lifetime\n"
+       "Do not use prefix for onlink determination\n"
+       "Do not use prefix for autoconfiguration\n")
 {
   int i;
   int ret;
+  int cursor = 1;
   struct interface *ifp;
   struct zebra_if *zebra_if;
   struct rtadv_prefix rp;
@@ -877,32 +867,43 @@
       vty_out (vty, "Malformed IPv6 prefix%s", VTY_NEWLINE);
       return CMD_WARNING;
     }
+  rp.AdvOnLinkFlag = 1;
+  rp.AdvAutonomousFlag = 1;
+  rp.AdvValidLifetime = RTADV_VALID_LIFETIME;
+  rp.AdvPreferredLifetime = RTADV_PREFERRED_LIFETIME;
 
-  if (argc == 1)
+  if (argc > 1)
     {
-      rp.AdvValidLifetime = RTADV_VALID_LIFETIME;
-      rp.AdvPreferredLifetime = RTADV_PREFERRED_LIFETIME;
-      rp.AdvOnLinkFlag = 1;
-      rp.AdvAutonomousFlag = 1;
-    }
-  else
-    {
-      rp.AdvValidLifetime = (u_int32_t) atol (argv[1]);
-      rp.AdvPreferredLifetime = (u_int32_t) atol (argv[2]);
-      if (rp.AdvPreferredLifetime > rp.AdvValidLifetime)
+      if ((isdigit(argv[1][0])) || strncmp (argv[1], "i", 1) == 0)
 	{
-	  vty_out (vty, "Invalid preferred lifetime%s", VTY_NEWLINE);
-	  return CMD_WARNING;
+	  if ( strncmp (argv[1], "i", 1) == 0)
+	    rp.AdvValidLifetime = UINT32_MAX;
+	  else
+	    rp.AdvValidLifetime = (u_int32_t) strtoll (argv[1],
+		(char **)NULL, 10);
+      
+	  if ( strncmp (argv[2], "i", 1) == 0)
+	    rp.AdvPreferredLifetime = UINT32_MAX;
+	  else
+	    rp.AdvPreferredLifetime = (u_int32_t) strtoll (argv[2],
+		(char **)NULL, 10);
+
+	  if (rp.AdvPreferredLifetime > rp.AdvValidLifetime)
+	    {
+	      vty_out (vty, "Invalid preferred lifetime%s", VTY_NEWLINE);
+	      return CMD_WARNING;
+	    }
+	  cursor = cursor + 2;
 	}
-
-      rp.AdvOnLinkFlag = 0;
-      rp.AdvAutonomousFlag = 0;
-      for (i = 3; i < argc; i++)
+      if (argc > cursor)
 	{
-	  if (! strcmp (argv[i], "onlink"))
-	    rp.AdvOnLinkFlag = 1;
-	  else if (! strcmp (argv[i], "autoconfig"))
-	    rp.AdvAutonomousFlag = 1;
+	  for (i = cursor; i < argc; i++)
+	    {
+	      if (strncmp (argv[i], "of", 2) == 0)
+		rp.AdvOnLinkFlag = 0;
+	      if (strncmp (argv[i], "no", 2) == 0)
+		rp.AdvAutonomousFlag = 0;
+	    }
 	}
     }
 
@@ -911,19 +912,113 @@
   return CMD_SUCCESS;
 }
 
-ALIAS (ipv6_nd_prefix_advertisement,
-       ipv6_nd_prefix_advertisement_no_val_cmd,
-       "ipv6 nd prefix-advertisement IPV6PREFIX",
-       IP_STR
+ALIAS (ipv6_nd_prefix,
+       ipv6_nd_prefix_val_rev_cmd,
+       "ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) "
+       "(<0-4294967295>|infinite) (no-autoconfig|) (off-link|)",
+       "Interface IPv6 config commands\n"
+       "Neighbor discovery\n"
+       "Prefix information\n"
+       "IPv6 prefix\n"
+       "Valid lifetime in seconds\n"
+       "Infinite valid lifetime\n"
+       "Preferred lifetime in seconds\n"
+       "Infinite preferred lifetime\n"
+       "Do not use prefix for autoconfiguration\n"
+       "Do not use prefix for onlink determination\n")
+
+ALIAS (ipv6_nd_prefix,
+       ipv6_nd_prefix_val_noauto_cmd,
+       "ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) "
+       "(<0-4294967295>|infinite) (no-autoconfig|)",
+       "Interface IPv6 config commands\n"
+       "Neighbor discovery\n"
+       "Prefix information\n"
+       "IPv6 prefix\n"
+       "Valid lifetime in seconds\n"
+       "Infinite valid lifetime\n"
+       "Preferred lifetime in seconds\n"
+       "Infinite preferred lifetime\n"
+       "Do not use prefix for autoconfigurationn")
+
+ALIAS (ipv6_nd_prefix,
+       ipv6_nd_prefix_val_offlink_cmd,
+       "ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) "
+       "(<0-4294967295>|infinite) (off-link|)",
+       "Interface IPv6 config commands\n"
+       "Neighbor discovery\n"
+       "Prefix information\n"
+       "IPv6 prefix\n"
+       "Valid lifetime in seconds\n"
+       "Infinite valid lifetime\n"
+       "Preferred lifetime in seconds\n"
+       "Infinite preferred lifetime\n"
+       "Do not use prefix for onlink determination\n")
+
+ALIAS (ipv6_nd_prefix,
+       ipv6_nd_prefix_val_cmd,
+       "ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) "
+       "(<0-4294967295>|infinite)",
+       "Interface IPv6 config commands\n"
+       "Neighbor discovery\n"
+       "Prefix information\n"
+       "IPv6 prefix\n"
+       "Valid lifetime in seconds\n"
+       "Infinite valid lifetime\n"
+       "Preferred lifetime in seconds\n"
+       "Infinite preferred lifetime\n")
+
+ALIAS (ipv6_nd_prefix,
+       ipv6_nd_prefix_noval_cmd,
+       "ipv6 nd prefix X:X::X:X/M (no-autoconfig|) (off-link|)",
+       "Interface IPv6 config commands\n"
+       "Neighbor discovery\n"
+       "Prefix information\n"
+       "IPv6 prefix\n"
+       "Do not use prefix for autoconfiguration\n"
+       "Do not use prefix for onlink determination\n")
+
+ALIAS (ipv6_nd_prefix,
+       ipv6_nd_prefix_noval_rev_cmd,
+       "ipv6 nd prefix X:X::X:X/M (off-link|) (no-autoconfig|)",
+       "Interface IPv6 config commands\n"
+       "Neighbor discovery\n"
+       "Prefix information\n"
+       "IPv6 prefix\n"
+       "Do not use prefix for onlink determination\n"
+       "Do not use prefix for autoconfiguration\n")
+
+ALIAS (ipv6_nd_prefix,
+       ipv6_nd_prefix_noval_noauto_cmd,
+       "ipv6 nd prefix X:X::X:X/M (no-autoconfig|)",
+       "Interface IPv6 config commands\n"
+       "Neighbor discovery\n"
+       "Prefix information\n"
+       "IPv6 prefix\n"
+       "Do not use prefix for autoconfiguration\n")
+
+ALIAS (ipv6_nd_prefix,
+       ipv6_nd_prefix_noval_offlink_cmd,
+       "ipv6 nd prefix X:X::X:X/M (off-link|)",
+       "Interface IPv6 config commands\n"
+       "Neighbor discovery\n"
+       "Prefix information\n"
+       "IPv6 prefix\n"
+       "Do not use prefix for onlink determination\n")
+
+ALIAS (ipv6_nd_prefix,
+       ipv6_nd_prefix_prefix_cmd,
+       "ipv6 nd prefix X:X::X:X/M",
+       "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
        "Prefix information\n"
        "IPv6 prefix\n")
 
-DEFUN (no_ipv6_nd_prefix_advertisement,
-       no_ipv6_nd_prefix_advertisement_cmd,
-       "no ipv6 nd prefix-advertisement IPV6PREFIX",
+DEFUN (no_ipv6_nd_prefix,
+       no_ipv6_nd_prefix_cmd,
+       "no ipv6 nd prefix IPV6PREFIX",
        NO_STR
-       IP_STR
+       "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
        "Prefix information\n"
        "IPv6 prefix\n")
@@ -996,16 +1091,26 @@
   for (node = listhead(zif->rtadv.AdvPrefixList); node; node = nextnode (node))
     {
       rprefix = getdata (node);
-      vty_out (vty, " ipv6 nd prefix-advertisement %s/%d %d %d",
+      vty_out (vty, " ipv6 nd prefix %s/%d",
 	       inet_ntop (AF_INET6, &rprefix->prefix.u.prefix6, 
 			  buf, INET6_ADDRSTRLEN),
-	       rprefix->prefix.prefixlen,
-	       rprefix->AdvValidLifetime,
-	       rprefix->AdvPreferredLifetime);
-      if (rprefix->AdvOnLinkFlag)
-	vty_out (vty, " onlink");
-      if (rprefix->AdvAutonomousFlag)
-	vty_out (vty, " autoconfig");
+	       rprefix->prefix.prefixlen);
+      if ((rprefix->AdvValidLifetime != RTADV_VALID_LIFETIME) || 
+	  (rprefix->AdvPreferredLifetime != RTADV_PREFERRED_LIFETIME))
+	{
+	  if (rprefix->AdvValidLifetime == UINT32_MAX)
+	    vty_out (vty, " infinite");
+	  else
+	    vty_out (vty, " %u", rprefix->AdvValidLifetime);
+	  if (rprefix->AdvPreferredLifetime == UINT32_MAX)
+	    vty_out (vty, " infinite");
+	  else
+	    vty_out (vty, " %u", rprefix->AdvPreferredLifetime);
+	}
+      if (!rprefix->AdvOnLinkFlag)
+	vty_out (vty, " off-link");
+      if (!rprefix->AdvAutonomousFlag)
+	vty_out (vty, " no-autoconfig");
       vty_out (vty, "%s", VTY_NEWLINE);
     }
 }
@@ -1020,7 +1125,8 @@
       if (! rtadv->ra_read)
 	rtadv->ra_read = thread_add_read (zebrad.master, rtadv_read, NULL, val);
       if (! rtadv->ra_timer)
-	rtadv->ra_timer = thread_add_event (zebrad.master, rtadv_timer, NULL, 0);
+	rtadv->ra_timer = thread_add_event (zebrad.master, rtadv_timer,
+	                                    NULL, 0);
       break;
     case RTADV_STOP:
       if (rtadv->ra_timer)
@@ -1036,7 +1142,8 @@
       break;
     case RTADV_TIMER:
       if (! rtadv->ra_timer)
-	rtadv->ra_timer = thread_add_timer (zebrad.master, rtadv_timer, NULL, val);
+	rtadv->ra_timer = thread_add_timer (zebrad.master, rtadv_timer, NULL,
+	                                    val);
       break;
     case RTADV_READ:
       if (! rtadv->ra_read)
@@ -1062,8 +1169,6 @@
 
   install_element (INTERFACE_NODE, &ipv6_nd_suppress_ra_cmd);
   install_element (INTERFACE_NODE, &no_ipv6_nd_suppress_ra_cmd);
-  install_element (INTERFACE_NODE, &ipv6_nd_send_ra_cmd);
-  install_element (INTERFACE_NODE, &no_ipv6_nd_send_ra_cmd);
   install_element (INTERFACE_NODE, &ipv6_nd_ra_interval_cmd);
   install_element (INTERFACE_NODE, &no_ipv6_nd_ra_interval_cmd);
   install_element (INTERFACE_NODE, &ipv6_nd_ra_lifetime_cmd);
@@ -1074,9 +1179,17 @@
   install_element (INTERFACE_NODE, &no_ipv6_nd_managed_config_flag_cmd);
   install_element (INTERFACE_NODE, &ipv6_nd_other_config_flag_cmd);
   install_element (INTERFACE_NODE, &no_ipv6_nd_other_config_flag_cmd);
-  install_element (INTERFACE_NODE, &ipv6_nd_prefix_advertisement_cmd);
-  install_element (INTERFACE_NODE, &ipv6_nd_prefix_advertisement_no_val_cmd);
-  install_element (INTERFACE_NODE, &no_ipv6_nd_prefix_advertisement_cmd);
+  install_element (INTERFACE_NODE, &ipv6_nd_prefix_cmd);
+  install_element (INTERFACE_NODE, &ipv6_nd_prefix_val_rev_cmd);
+  install_element (INTERFACE_NODE, &ipv6_nd_prefix_val_noauto_cmd);
+  install_element (INTERFACE_NODE, &ipv6_nd_prefix_val_offlink_cmd);
+  install_element (INTERFACE_NODE, &ipv6_nd_prefix_val_cmd);
+  install_element (INTERFACE_NODE, &ipv6_nd_prefix_noval_cmd);
+  install_element (INTERFACE_NODE, &ipv6_nd_prefix_noval_rev_cmd);
+  install_element (INTERFACE_NODE, &ipv6_nd_prefix_noval_noauto_cmd);
+  install_element (INTERFACE_NODE, &ipv6_nd_prefix_noval_offlink_cmd);
+  install_element (INTERFACE_NODE, &ipv6_nd_prefix_prefix_cmd);
+  install_element (INTERFACE_NODE, &no_ipv6_nd_prefix_cmd);
 }
 
 int
