diff --git a/vtysh/ChangeLog b/vtysh/ChangeLog
index bca51bb..5d8b7e4 100644
--- a/vtysh/ChangeLog
+++ b/vtysh/ChangeLog
@@ -1,3 +1,28 @@
+2004-10-03 Hasso Tepper <hasso at quagga.net>
+
+	* vtsyh_main.c: Enter into enable node by default. Disable node doesn't
+	  make sense if we don't have any authentication for enable.
+	* vtysh.c: Implement "show running-daemons" command.
+	* vtysh.c: Use either integrated conf or daemon conf not both. Move
+	  configuration command into "service" level.
+	* vtysh.c: Remove "write ..." commands from other nodes than enable.
+	  We have "do ..." extension for that.
+	* vtysh_config.c, vtysh.c: Integrate vtysh configuration into
+	  integrated one.
+	* vtysh_config.c: Use FORWARD_NODE and SERVICE_NODE vty nodes.
+	* vtysh_config.c: Make "service" lines unique in integrated config.
+	* vtysh.c: Make "service password-encryption" command work in vtysh.
+	* vtysh_config.c, vtysh.c, Makefile.am, extract.pl.in: Introduce line
+	  vty commands in vtysh. Parse lib/vty.c for commands, but ignore
+	  commands that don't make sense in vtysh. Closes Bugzilla #104.
+	* vtysh.c: Make "[enable] password" commands work in vtysh. Behavior
+	  is similar to "log" commands - vtysh just passes commands to all
+	  daemons.
+	* vtysh_main.c, vtysh_config.c, vtysh.h: Remove any code dealing with
+	  configuration files specified from command line. We read/write files
+	  from/to system location only (ie. remove -f again).
+	* Makefile.am: Parse zebra/router-id.c.
+
 2004-09-26 Hasso Tepper <hasso at quagga.net>
 
 	* vtysh.c: Fix compiler warning.
diff --git a/vtysh/Makefile.am b/vtysh/Makefile.am
index 1ac5ee4..830ed80 100644
--- a/vtysh/Makefile.am
+++ b/vtysh/Makefile.am
@@ -24,13 +24,13 @@
 vtysh_cmd.c: $(top_srcdir)/ripd/*.c $(top_srcdir)/ripngd/*.c $(top_srcdir)/ospfd/*.c $(top_srcdir)/ospf6d/*.c \
   $(top_srcdir)/isisd/*.c $(top_srcdir)/bgpd/*.c $(top_srcdir)/lib/keychain.c $(top_srcdir)/lib/routemap.c \
   $(top_srcdir)/lib/filter.c $(top_srcdir)/lib/plist.c $(top_srcdir)/lib/distribute.c $(top_srcdir)/lib/if_rmap.c \
-  $(top_srcdir)/zebra/debug.c $(top_srcdir)/zebra/interface.c \
+  $(top_srcdir)/lib/vty.c $(top_srcdir)/zebra/debug.c $(top_srcdir)/zebra/interface.c \
   $(top_srcdir)/zebra/irdp_interface.c $(top_srcdir)/zebra/rtadv.c $(top_srcdir)/zebra/zebra_vty.c \
-  $(top_srcdir)/zebra/zserv.c
+  $(top_srcdir)/zebra/zserv.c $(top_srcdir)/zebra/router-id.c
 	./extract.pl $(top_srcdir)/ripd/*.c $(top_srcdir)/ripngd/*.c $(top_srcdir)/ospfd/*.c $(top_srcdir)/ospf6d/*.c \
 	  $(top_srcdir)/isisd/*.c $(top_srcdir)/bgpd/*.c $(top_srcdir)/lib/keychain.c $(top_srcdir)/lib/routemap.c \
 	  $(top_srcdir)/lib/filter.c $(top_srcdir)/lib/plist.c $(top_srcdir)/lib/distribute.c $(top_srcdir)/lib/if_rmap.c \
-	  $(top_srcdir)/zebra/debug.c $(top_srcdir)/zebra/interface.c  \
+	  $(top_srcdir)/lib/vty.c $(top_srcdir)/zebra/debug.c $(top_srcdir)/zebra/interface.c  \
 	  $(top_srcdir)/zebra/irdp_interface.c $(top_srcdir)/zebra/rtadv.c $(top_srcdir)/zebra/zebra_vty.c \
-	  $(top_srcdir)/zebra/zserv.c > vtysh_cmd.c
+	  $(top_srcdir)/zebra/zserv.c $(top_srcdir)/zebra/router-id.c > vtysh_cmd.c
 
diff --git a/vtysh/extract.pl.in b/vtysh/extract.pl.in
index 053b17e..d2fc42b 100755
--- a/vtysh/extract.pl.in
+++ b/vtysh/extract.pl.in
@@ -52,6 +52,11 @@
 $ignore{'"key <0-2147483647>"'} = "ignore";
 $ignore{'"route-map WORD (deny|permit) <1-65535>"'} = "ignore";
 $ignore{'"show route-map"'} = "ignore";
+$ignore{'"line vty"'} = "ignore";
+$ignore{'"who"'} = "ignore";
+$ignore{'"terminal monitor"'} = "ignore";
+$ignore{'"terminal no monitor"'} = "ignore";
+$ignore{'"show history"'} = "ignore";
 
 foreach (@ARGV) {
     $file = $_;
@@ -118,6 +123,9 @@
                  $protocol = "VTYSH_RIPD";
               }
            }
+	   if ($file =~ /vty.c/) {
+	      $protocol = "VTYSH_ALL";
+	   }
         } else {
            ($protocol) = ($file =~ /^.*\/([a-z0-9]+)\/[a-zA-Z0-9_\-]+\.c$/);
            $protocol = "VTYSH_" . uc $protocol;
diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c
index ba49ede..79e0742 100644
--- a/vtysh/vtysh.c
+++ b/vtysh/vtysh.c
@@ -46,6 +46,11 @@
   int fd;
 } vtysh_client[VTYSH_INDEX_MAX];
 
+/* Using integrated config from Quagga.conf. Default is no. */
+int vtysh_writeconfig_integrated = 0;
+
+extern char config_default[];
+
 void
 vclient_close (struct vtysh_client *vclient)
 {
@@ -148,6 +153,7 @@
     }
 
   /* Parse anything left in the buffer. */
+
   vtysh_config_parse (buf);
 
   XFREE(MTYPE_TMP, buf);
@@ -756,6 +762,9 @@
   "%s(config-keychain-key)# "
 };
 
+/* Defined in lib/vty.c */
+extern struct cmd_node vty_node;
+
 /* When '^Z' is received from vty, move down to the enable mode. */
 int
 vtysh_end ()
@@ -777,7 +786,7 @@
 	 vtysh_end_all,
 	 vtysh_end_all_cmd,
 	 "end",
-	 "End current mode and down to previous mode\n")
+	 "End current mode and change to enable mode\n")
 {
   return vtysh_end ();
 }
@@ -958,6 +967,17 @@
 }
 
 DEFUNSH (VTYSH_ALL,
+	 vtysh_line_vty,
+	 vtysh_line_vty_cmd,
+	 "line vty",
+	 "Configure a terminal line\n"
+	 "Virtual terminal\n")
+{
+  vty->node = VTY_NODE;
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_ALL,
 	 vtysh_enable, 
 	 vtysh_enable_cmd,
 	 "enable",
@@ -1172,6 +1192,20 @@
        "quit",
        "Exit current mode and down to previous mode\n")
 
+DEFUNSH (VTYSH_ALL,
+         vtysh_exit_line_vty,
+         vtysh_exit_line_vty_cmd,
+         "exit",
+         "Exit current mode and down to previous mode\n")
+{
+  return vtysh_exit (vty);
+}
+
+ALIAS (vtysh_exit_line_vty,
+       vtysh_quit_line_vty_cmd,
+       "quit",
+       "Exit current mode and down to previous mode\n")
+
 DEFUNSH (VTYSH_INTERFACE,
 	 vtysh_interface,
 	 vtysh_interface_cmd,
@@ -1328,6 +1362,84 @@
   return CMD_SUCCESS;
 }
 
+DEFUNSH (VTYSH_ALL,
+	 vtysh_service_password_encrypt,
+	 vtysh_service_password_encrypt_cmd,
+	 "service password-encryption",
+	 "Set up miscellaneous service\n"
+	 "Enable encrypted passwords\n")
+{
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_ALL,
+	 no_vtysh_service_password_encrypt,
+	 no_vtysh_service_password_encrypt_cmd,
+	 "no service password-encryption",
+	 NO_STR
+	 "Set up miscellaneous service\n"
+	 "Enable encrypted passwords\n")
+{
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_ALL,
+	 vtysh_config_password,
+	 vtysh_password_cmd,
+	 "password (8|) WORD",
+	 "Assign the terminal connection password\n"
+	 "Specifies a HIDDEN password will follow\n"
+	 "dummy string \n"
+	 "The HIDDEN line password string\n")
+{
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_ALL,
+	 vtysh_password_text,
+	 vtysh_password_text_cmd,
+	 "password LINE",
+	 "Assign the terminal connection password\n"
+	 "The UNENCRYPTED (cleartext) line password\n")
+{
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_ALL,
+	 vtysh_config_enable_password,
+	 vtysh_enable_password_cmd,
+	 "enable password (8|) WORD",
+	 "Modify enable password parameters\n"
+	 "Assign the privileged level password\n"
+	 "Specifies a HIDDEN password will follow\n"
+	 "dummy string \n"
+	 "The HIDDEN 'enable' password string\n")
+{
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_ALL,
+	 vtysh_enable_password_text,
+	 vtysh_enable_password_text_cmd,
+	 "enable password LINE",
+	 "Modify enable password parameters\n"
+	 "Assign the privileged level password\n"
+	 "The UNENCRYPTED (cleartext) 'enable' password\n")
+{
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_ALL,
+	 no_vtysh_config_enable_password,
+	 no_vtysh_enable_password_cmd,
+	 "no enable password",
+	 NO_STR
+	 "Modify enable password parameters\n"
+	 "Assign the privileged level password\n")
+{
+  return CMD_SUCCESS;
+}
+
 DEFUN (vtysh_write_terminal,
        vtysh_write_terminal_cmd,
        "write terminal",
@@ -1353,8 +1465,7 @@
   vty_out (vty, "Building configuration...%s", VTY_NEWLINE);
   vty_out (vty, "%sCurrent configuration:%s", VTY_NEWLINE,
 	   VTY_NEWLINE);
-
-  vtysh_config_write (fp);
+  vty_out (vty, "!%s", VTY_NEWLINE);
 
   ret = vtysh_client_config (&vtysh_client[VTYSH_INDEX_ZEBRA], line);
   ret = vtysh_client_config (&vtysh_client[VTYSH_INDEX_RIP], line);
@@ -1364,6 +1475,9 @@
   ret = vtysh_client_config (&vtysh_client[VTYSH_INDEX_BGP], line);
   ret = vtysh_client_config (&vtysh_client[VTYSH_INDEX_ISIS], line);
 
+  /* Integrate vtysh specific configuration. */
+  vtysh_config_write ();
+
   vtysh_config_dump (fp);
 
   if (vtysh_pager_name && fp)
@@ -1380,37 +1494,25 @@
   return CMD_SUCCESS;
 }
 
-struct vtysh_writeconfig_t {
-	int daemon;
-	int integrated;
-} vtysh_wc = {-1,0};
-
-DEFUN (vtysh_write_config,
-       vtysh_write_config_cmd,
-       "write-config (daemon|integrated)",
-       "Specify config files to write to\n"
-       "Write per daemon file\n"
-       "Write integrated file\n")
+DEFUN (vtysh_integrated_config,
+       vtysh_integrated_config_cmd,
+       "service integrated-vtysh-config",
+       "Set up miscellaneous service\n"
+       "Write configuration into integrated file\n")
 {
-	if (!strncmp(argv[0],"d",1))
-	  vtysh_wc.daemon = 1;
-	else if (!strncmp(argv[0],"i",1))
-	  vtysh_wc.integrated = 1;
-
-	return CMD_SUCCESS;
+  vtysh_writeconfig_integrated = 1;
+  return CMD_SUCCESS;
 }
 
-DEFUN (no_vtysh_write_config,
-       no_vtysh_write_config_cmd,
-       "no write-config (daemon|integrated)",
-       "Negate per daemon and/or integrated config files\n")
+DEFUN (no_vtysh_integrated_config,
+       no_vtysh_integrated_config_cmd,
+       "no service integrated-vtysh-config",
+       NO_STR
+       "Set up miscellaneous service\n"
+       "Write configuration into integrated file\n")
 {
-	if (!strncmp(argv[0],"d",1))
-	  vtysh_wc.daemon = 0;
-	else if (!strncmp(argv[0],"i",1))
-	  vtysh_wc.integrated = 0;
-
-	return CMD_SUCCESS;
+  vtysh_writeconfig_integrated = 0;
+  return CMD_SUCCESS;
 }
 
 int write_config_integrated(void)
@@ -1440,8 +1542,6 @@
       return CMD_SUCCESS;
     }
 
-  vtysh_config_write (fp);
-
   ret = vtysh_client_config (&vtysh_client[VTYSH_INDEX_ZEBRA], line);
   ret = vtysh_client_config (&vtysh_client[VTYSH_INDEX_RIP], line);
   ret = vtysh_client_config (&vtysh_client[VTYSH_INDEX_RIPNG], line);
@@ -1476,13 +1576,13 @@
 {
   int ret = CMD_SUCCESS;
   char line[] = "write memory\n";
+  char *vtysh_conf;
+  extern struct host host;
+  FILE *fp;
   
-  /* If integrated Zebra.conf explicitely set. */
-  if (vtysh_wc.integrated == 1)
-    ret = write_config_integrated();
-
-  if (!vtysh_wc.daemon)
-    return ret;
+  /* If integrated Quagga.conf explicitely set. */
+  if (vtysh_writeconfig_integrated)
+    return write_config_integrated();
 
   fprintf (stdout,"Building Configuration...\n");
 	  
@@ -1493,7 +1593,7 @@
   ret = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_OSPF6], line, stdout);
   ret = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_BGP], line, stdout);
   ret = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_ISIS], line, stdout);
-
+  
   fprintf (stdout,"[OK]\n");
 
   return ret;
@@ -1573,6 +1673,31 @@
   return CMD_SUCCESS;
 }
 
+DEFUN (vtysh_show_running_daemons,
+       vtysh_show_running_daemons_cmd,
+       "show running-daemons",
+       SHOW_STR
+       "Show list of running daemons\n")
+{
+  if ( vtysh_client[VTYSH_INDEX_ZEBRA].fd > 0 )
+    vty_out(vty, " zebra");
+  if ( vtysh_client[VTYSH_INDEX_RIP].fd > 0 )
+    vty_out(vty, " ripd");
+  if ( vtysh_client[VTYSH_INDEX_RIPNG].fd > 0 )
+    vty_out(vty, " ripngd");
+  if ( vtysh_client[VTYSH_INDEX_OSPF].fd > 0 )
+    vty_out(vty, " ospfd");
+  if ( vtysh_client[VTYSH_INDEX_OSPF6].fd > 0 )
+    vty_out(vty, " ospf6d");
+  if ( vtysh_client[VTYSH_INDEX_BGP].fd > 0 )
+    vty_out(vty, " bgpd");
+  if ( vtysh_client[VTYSH_INDEX_ISIS].fd > 0 )
+    vty_out(vty, " isisd");
+  vty_out(vty, "%s", VTY_NEWLINE);
+
+  return CMD_SUCCESS;
+}
+
 /* Execute command in child process. */
 int
 execute_command (char *command, int argc, char *arg1, char *arg2)
@@ -1898,6 +2023,7 @@
   install_node (&keychain_node, NULL);
   install_node (&keychain_key_node, NULL);
   install_node (&isis_node, NULL);
+  install_node (&vty_node, NULL);
 
   vtysh_install_default (VIEW_NODE);
   vtysh_install_default (ENABLE_NODE);
@@ -1917,6 +2043,7 @@
   vtysh_install_default (ISIS_NODE);
   vtysh_install_default (KEYCHAIN_NODE);
   vtysh_install_default (KEYCHAIN_KEY_NODE);
+  vtysh_install_default (VTY_NODE);
 
   install_element (VIEW_NODE, &vtysh_enable_cmd);
   install_element (ENABLE_NODE, &vtysh_config_terminal_cmd);
@@ -1955,6 +2082,8 @@
   install_element (KEYCHAIN_KEY_NODE, &vtysh_quit_ripd_cmd);
   install_element (RMAP_NODE, &vtysh_exit_rmap_cmd);
   install_element (RMAP_NODE, &vtysh_quit_rmap_cmd);
+  install_element (VTY_NODE, &vtysh_exit_line_vty_cmd);
+  install_element (VTY_NODE, &vtysh_quit_line_vty_cmd);
 
   /* "end" command. */
   install_element (CONFIG_NODE, &vtysh_end_all_cmd);
@@ -1972,6 +2101,7 @@
   install_element (KEYCHAIN_NODE, &vtysh_end_all_cmd);
   install_element (KEYCHAIN_KEY_NODE, &vtysh_end_all_cmd);
   install_element (RMAP_NODE, &vtysh_end_all_cmd);
+  install_element (VTY_NODE, &vtysh_end_all_cmd);
 
   install_element (INTERFACE_NODE, &interface_desc_cmd);
   install_element (INTERFACE_NODE, &no_interface_desc_cmd);
@@ -2002,6 +2132,7 @@
   install_element (BGP_IPV6_NODE, &exit_address_family_cmd);
   install_element (CONFIG_NODE, &key_chain_cmd);
   install_element (CONFIG_NODE, &route_map_cmd);
+  install_element (CONFIG_NODE, &vtysh_line_vty_cmd);
   install_element (KEYCHAIN_NODE, &key_cmd);
   install_element (KEYCHAIN_NODE, &key_chain_cmd);
   install_element (KEYCHAIN_KEY_NODE, &key_chain_cmd);
@@ -2014,44 +2145,19 @@
 
   /* "write terminal" command. */
   install_element (ENABLE_NODE, &vtysh_write_terminal_cmd);
-  install_element (CONFIG_NODE, &vtysh_write_terminal_cmd);
-  install_element (BGP_NODE, &vtysh_write_terminal_cmd);
-  install_element (BGP_VPNV4_NODE, &vtysh_write_terminal_cmd);
-  install_element (BGP_IPV4_NODE, &vtysh_write_terminal_cmd);
-  install_element (BGP_IPV4M_NODE, &vtysh_write_terminal_cmd);
-  install_element (BGP_IPV6_NODE, &vtysh_write_terminal_cmd);
-  install_element (RIP_NODE, &vtysh_write_terminal_cmd);
-  install_element (RIPNG_NODE, &vtysh_write_terminal_cmd);
-  install_element (OSPF_NODE, &vtysh_write_terminal_cmd);
-  install_element (OSPF6_NODE, &vtysh_write_terminal_cmd);
-  install_element (ISIS_NODE, &vtysh_write_terminal_cmd);
-  install_element (INTERFACE_NODE, &vtysh_write_terminal_cmd);
-  install_element (RMAP_NODE, &vtysh_write_terminal_cmd);
-  install_element (KEYCHAIN_NODE, &vtysh_write_terminal_cmd);
-  install_element (KEYCHAIN_KEY_NODE, &vtysh_write_terminal_cmd);
+ 
+  install_element (CONFIG_NODE, &vtysh_integrated_config_cmd);
+  install_element (CONFIG_NODE, &no_vtysh_integrated_config_cmd);
 
   /* "write memory" command. */
   install_element (ENABLE_NODE, &vtysh_write_memory_cmd);
-  install_element (CONFIG_NODE, &vtysh_write_memory_cmd);
-  install_element (BGP_NODE, &vtysh_write_memory_cmd);
-  install_element (BGP_VPNV4_NODE, &vtysh_write_memory_cmd);
-  install_element (BGP_IPV4_NODE, &vtysh_write_memory_cmd);
-  install_element (BGP_IPV4M_NODE, &vtysh_write_memory_cmd);
-  install_element (BGP_IPV6_NODE, &vtysh_write_memory_cmd);
-  install_element (RIP_NODE, &vtysh_write_memory_cmd);
-  install_element (RIPNG_NODE, &vtysh_write_memory_cmd);
-  install_element (OSPF_NODE, &vtysh_write_memory_cmd);
-  install_element (OSPF6_NODE, &vtysh_write_memory_cmd);
-  install_element (ISIS_NODE, &vtysh_write_memory_cmd);
-  install_element (INTERFACE_NODE, &vtysh_write_memory_cmd);
-  install_element (RMAP_NODE, &vtysh_write_memory_cmd);
-  install_element (KEYCHAIN_NODE, &vtysh_write_memory_cmd);
-  install_element (KEYCHAIN_KEY_NODE, &vtysh_write_memory_cmd);
 
   install_element (VIEW_NODE, &vtysh_terminal_length_cmd);
   install_element (ENABLE_NODE, &vtysh_terminal_length_cmd);
   install_element (VIEW_NODE, &vtysh_terminal_no_length_cmd);
   install_element (ENABLE_NODE, &vtysh_terminal_no_length_cmd);
+  install_element (VIEW_NODE, &vtysh_show_running_daemons_cmd);
+  install_element (ENABLE_NODE, &vtysh_show_running_daemons_cmd);
 
   install_element (VIEW_NODE, &vtysh_ping_cmd);
   install_element (VIEW_NODE, &vtysh_ping_ip_cmd);
@@ -2089,6 +2195,14 @@
   install_element (CONFIG_NODE, &no_vtysh_log_trap_cmd);
   install_element (CONFIG_NODE, &vtysh_log_record_priority_cmd);
   install_element (CONFIG_NODE, &no_vtysh_log_record_priority_cmd);
-  install_element (CONFIG_NODE, &vtysh_write_config_cmd);
-  install_element (CONFIG_NODE, &no_vtysh_write_config_cmd);
+
+  install_element (CONFIG_NODE, &vtysh_service_password_encrypt_cmd);
+  install_element (CONFIG_NODE, &no_vtysh_service_password_encrypt_cmd);
+
+  install_element (CONFIG_NODE, &vtysh_password_cmd);
+  install_element (CONFIG_NODE, &vtysh_password_text_cmd);
+  install_element (CONFIG_NODE, &vtysh_enable_password_cmd);
+  install_element (CONFIG_NODE, &vtysh_enable_password_text_cmd);
+  install_element (CONFIG_NODE, &no_vtysh_enable_password_cmd);
+
 }
diff --git a/vtysh/vtysh.conf.sample b/vtysh/vtysh.conf.sample
index 29d6808..e2aa564 100644
--- a/vtysh/vtysh.conf.sample
+++ b/vtysh/vtysh.conf.sample
@@ -1,4 +1,7 @@
 !
-! vtysh sample configuratin file
+! Sample configuration file for vtysh.
 !
-!username kunihiro nopassword
+!service integrated-vtysh-conf
+!hostname quagga-router
+!username root nopassword
+!
diff --git a/vtysh/vtysh.h b/vtysh/vtysh.h
index 895c8c0..b632b6d 100644
--- a/vtysh/vtysh.h
+++ b/vtysh/vtysh.h
@@ -60,7 +60,7 @@
 
 int vtysh_config_from_file (struct vty *, FILE *);
 
-void vtysh_read_config (char *, char *);
+int vtysh_read_config (char *);
 
 void vtysh_config_parse (char *);
 
diff --git a/vtysh/vtysh_config.c b/vtysh/vtysh_config.c
index 86f5731..2687918 100644
--- a/vtysh/vtysh_config.c
+++ b/vtysh/vtysh_config.c
@@ -28,6 +28,8 @@
 
 vector configvec;
 
+extern int vtysh_writeconfig_integrated;
+
 struct config
 {
   /* Configuration node name. */
@@ -174,7 +176,8 @@
 		   strlen (" address-family ipv6")) == 0)
 	    config = config_get (BGP_IPV6_NODE, line);
 	  else if (config->index == RMAP_NODE ||
-	           config->index == INTERFACE_NODE )
+	           config->index == INTERFACE_NODE ||
+		   config->index == VTY_NODE)
 	    config_add_line_uniq (config->line, line);
 	  else
 	    config_add_line (config->line, line);
@@ -224,13 +227,24 @@
    	config = config_get (IP_NODE, line);
       else if (strncmp (line, "key", strlen ("key")) == 0)
 	config = config_get (KEYCHAIN_NODE, line);
+      else if (strncmp (line, "line", strlen ("line")) == 0)
+	config = config_get (VTY_NODE, line);
+      else if ( (strncmp (line, "ipv6 forwarding",
+		 strlen ("ipv6 forwarding")) == 0)
+	       || (strncmp (line, "ip forwarding",
+		   strlen ("ip forwarding")) == 0) )
+	config = config_get (FORWARDING_NODE, line);
+      else if (strncmp (line, "service", strlen ("service")) == 0)
+	config = config_get (SERVICE_NODE, line);
       else
 	{
 	  if (strncmp (line, "log", strlen ("log")) == 0
 	      || strncmp (line, "hostname", strlen ("hostname")) == 0
 	      || strncmp (line, "password", strlen ("password")) == 0
 	      || strncmp (line, "enable password",
-		          strlen ("enable password")) == 0)
+		          strlen ("enable password")) == 0
+	      || strncmp (line, "service", strlen ("service")) == 0
+	     )
 	    config_add_line_uniq (config_top, line);
 	  else
 	    config_add_line (config_top, line);
@@ -268,7 +282,8 @@
 #define NO_DELIMITER(I)  \
   ((I) == ACCESS_NODE || (I) == PREFIX_NODE || (I) == IP_NODE \
    || (I) == AS_LIST_NODE || (I) == COMMUNITY_LIST_NODE || \
-   (I) == ACCESS_IPV6_NODE || (I) == PREFIX_IPV6_NODE)
+   (I) == ACCESS_IPV6_NODE || (I) == PREFIX_IPV6_NODE \
+   || (I) == SERVICE_NODE)
 
 /* Display configuration to file pointer. */
 void
@@ -364,67 +379,40 @@
     }
 }
 
-/* Read up configuration file from file_name. */
-void
-vtysh_read_config (char *config_file,
-		   char *config_default_dir)
+/* Read up configuration file from config_default_dir. */
+int
+vtysh_read_config (char *config_default_dir)
 {
-  char *cwd;
   FILE *confp = NULL;
-  char *fullpath;
 
-  /* If -f flag specified. */
-  if (config_file != NULL)
-    {
-      if (! IS_DIRECTORY_SEP (config_file[0]))
-	{
-	  cwd = getcwd (NULL, MAXPATHLEN);
-	  fullpath = XMALLOC (MTYPE_TMP, 
-			      strlen (cwd) + strlen (config_file) + 2);
-	  sprintf (fullpath, "%s/%s", cwd, config_file);
-	}
-      else
-	fullpath = config_file;
-
-      confp = fopen (fullpath, "r");
-
-      if (confp == NULL)
-	{
-	  fprintf (stderr, "can't open configuration file [%s]\n", 
-		   config_file);
-	  exit(1);
-	}
-    }
-  else
-    {
-      /* No configuration specified from command line. Open system
-       * default file. */
-      confp = fopen (config_default_dir, "r");
-      if (confp == NULL)
-	{
-	  fprintf (stderr, "can't open configuration file [%s]\n",
-		   config_default_dir);
-	  exit (1);
-	}      
-      else
-	fullpath = config_default_dir;
-    }
+  confp = fopen (config_default_dir, "r");
+  if (confp == NULL)
+    return (1);
 
   vtysh_read_file (confp);
-
   fclose (confp);
+  host_config_set (config_default_dir);
 
-  host_config_set (fullpath);
+  return (0);
 }
 
+/* We don't write vtysh specific into file from vtysh. vtysh.conf should
+ * be edited by hand. So, we handle only "write terminal" case here and
+ * integrate vtysh specific conf with conf from daemons.
+ */
 void
-vtysh_config_write (FILE *fp)
+vtysh_config_write ()
 {
+  char *line;
   extern struct host host;
 
   if (host.name)
-    fprintf (fp, "hostname %s\n", host.name);
-  fprintf (fp, "!\n");
+    {
+      sprintf (line, "hostname %s", host.name);
+      vtysh_config_parse_line(line);
+    }
+  if (vtysh_writeconfig_integrated)
+    vtysh_config_parse_line ("service integrated-vtysh-config");
 }
 
 void
diff --git a/vtysh/vtysh_main.c b/vtysh/vtysh_main.c
index 223f0c6..5f7856c 100644
--- a/vtysh/vtysh_main.c
+++ b/vtysh/vtysh_main.c
@@ -40,16 +40,8 @@
 char *progname;
 
 /* Configuration file name and directory. */
-char *config_file = NULL;
 char config_default[] = SYSCONFDIR VTYSH_DEFAULT_CONFIG;
 
-/* Integrated configuration file. */
-char *integrate_file = NULL;
-char *integrate_current = NULL;
-#if 0
-char integrate_default[] = SYSCONFDIR INTEGRATE_DEFAULT_CONFIG;
-#endif
-
 /* Flag for indicate executing child command. */
 int execute_flag = 0;
 
@@ -143,7 +135,6 @@
 	    "Integrated shell for Quagga routing software suite. \n\n"\
 	    "-b, --boot               Execute boot startup configuration\n" \
 	    "-c, --command            Execute argument as command\n "\
-	    "-f, --config_file        Set configuration file name\n"\
 	    "-h, --help               Display this help and exit\n\n" \
 	    "Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS);
 
@@ -158,7 +149,6 @@
   { "eval",                 required_argument,       NULL, 'e'},
   { "command",              required_argument,       NULL, 'c'},
   { "help",                 no_argument,             NULL, 'h'},
-  { "config_file",          required_argument,       NULL, 'f'},
   { 0 }
 };
 
@@ -208,7 +198,7 @@
   /* Option handling. */
   while (1) 
     {
-      opt = getopt_long (argc, argv, "be:c:hf:", longopts, 0);
+      opt = getopt_long (argc, argv, "be:c:h", longopts, 0);
     
       if (opt == EOF)
 	break;
@@ -228,12 +218,6 @@
 	case 'h':
 	  usage (0);
 	  break;
-	/* XXX It isn't used in any way. */
-	case 'i':
-	  integrated_file = strdup (optarg);
-	case 'f':
-	  config_file = optarg;
-	  break;
 	default:
 	  usage (1);
 	  break;
@@ -259,7 +243,7 @@
   vtysh_connect_all ();
 
   /* Read vtysh configuration file. */
-  vtysh_read_config (config_file, config_default);
+  vtysh_read_config (config_default);
 
   /* If eval mode. */
   if (eval_flag)
@@ -271,8 +255,14 @@
   /* Boot startup configuration file. */
   if (boot_flag)
     {
-      vtysh_read_config (integrate_file, integrate_default);
-      exit (0);
+      if (vtysh_read_config (integrate_default))
+	{
+	  fprintf (stderr, "Can't open configuration file [%s]\n",
+		   integrate_default);
+	  exit (1);
+	}
+      else
+	exit (0);
     }
 
   vtysh_pager_init ();
@@ -283,6 +273,9 @@
 
   vtysh_auth ();
 
+  /* Enter into enable node. */
+  vtysh_execute ("enable");
+
   /* Preparation for longjmp() in sigtstp(). */
   sigsetjmp (jmpbuf, 1);
   jmpflag = 1;
