diff --git a/bgpd/ChangeLog b/bgpd/ChangeLog
index 6bee4de..269c552 100644
--- a/bgpd/ChangeLog
+++ b/bgpd/ChangeLog
@@ -1,3 +1,15 @@
+2005-02-01 Akihiro Mizutani <mizutani@net-chef.net>
+
+	* bgp_nexthop.c: Improve debug.
+	* bgpd.[ch], bgp_nexthop.c, bgp_snmp.c: Remove useless bgp_get_master()
+	  function.
+	* bgp_packet.c: MP AFI_IP update and withdraw parsing.
+	* bgp_fsm.c: Reset peer synctime in bgp_stop(). bgp_fsm_change_status()
+	  is better place to log about peer status change than bgp_event().
+	  Log in bgp_connect_success().
+	* bgp_vty.c: Fix typo in comment.
+	* bgp_attr.c: Better log about unknown attribute.
+
 2005-01-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
 
 	* bgp_filter.c: (ip_as_path,no_ip_as_path) Use argv_concat instead
diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
index 8ffcfdd..cad9168 100644
--- a/bgpd/bgp_attr.c
+++ b/bgpd/bgp_attr.c
@@ -1084,6 +1084,10 @@
   bgp_size_t total;
   struct transit *transit;
 
+  if (BGP_DEBUG (normal, NORMAL))
+  zlog_debug ("%s Unknown attribute is received (type %d, length %d)",
+	      peer->host, type, length);
+  
   if (BGP_DEBUG (events, EVENTS))
     zlog (peer->log, LOG_DEBUG, 
 	  "Unknown attribute type %d length %d is received", type, length);
diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c
index 8919586..7327db0 100644
--- a/bgpd/bgp_fsm.c
+++ b/bgpd/bgp_fsm.c
@@ -367,6 +367,9 @@
 
       /* Need of clear of peer. */
       bgp_clear_route_all (peer);
+
+      /* Reset peer synctime */
+      peer->synctime = 0;
     }
 
   /* Stop read and write threads when exists. */
@@ -491,6 +494,8 @@
 int
 bgp_connect_success (struct peer *peer)
 {
+  char buf1[BUFSIZ];
+
   if (peer->fd < 0)
     {
       zlog_err ("bgp_connect_success peer's fd is negative value %d",
@@ -499,7 +504,17 @@
     }
   BGP_READ_ON (peer->t_read, bgp_read, peer->fd);
 
-  /* bgp_getsockname (peer); */
+  if (! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
+    bgp_getsockname (peer);
+
+  if (BGP_DEBUG (normal, NORMAL))
+    {
+      if (! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
+	zlog_debug ("%s open active, local address %s", peer->host,
+		    sockunion2str (peer->su_local, buf1, SU_ADDRSTRLEN));
+      else
+	zlog_debug ("%s passive open", peer->host);
+    }
 
   if (! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
     bgp_open_send (peer);
@@ -594,6 +609,12 @@
   /* Preserve old status and change into new status. */
   peer->ostatus = peer->status;
   peer->status = status;
+
+  if (BGP_DEBUG (normal, NORMAL))
+    zlog_debug ("%s went from %s to %s",
+		peer->host,
+		LOOKUP (bgp_status_msg, peer->ostatus),
+		LOOKUP (bgp_status_msg, peer->status));
 }
 
 /* Keepalive send to peer. */
@@ -866,12 +887,6 @@
 	       bgp_event_str[event],
 	       LOOKUP (bgp_status_msg, peer->status),
 	       LOOKUP (bgp_status_msg, next));
-  if (BGP_DEBUG (normal, NORMAL)
-      && strcmp (LOOKUP (bgp_status_msg, peer->status), LOOKUP (bgp_status_msg, next)))
-    zlog_debug ("%s went from %s to %s",
-	       peer->host,
-	       LOOKUP (bgp_status_msg, peer->status),
-	       LOOKUP (bgp_status_msg, next));
 
   /* Call function. */
   ret = (*(FSM [peer->status - 1][event - 1].func))(peer);
diff --git a/bgpd/bgp_nexthop.c b/bgpd/bgp_nexthop.c
index c368eba..76c1c2a 100644
--- a/bgpd/bgp_nexthop.c
+++ b/bgpd/bgp_nexthop.c
@@ -507,6 +507,14 @@
     bgp_nexthop_cache_reset (cache2_table[afi]);
   else
     bgp_nexthop_cache_reset (cache1_table[afi]);
+
+  if (BGP_DEBUG (events, EVENTS))
+    {
+      if (afi == AFI_IP)
+	zlog_debug ("scanning IPv4 Unicast routing tables");
+      else if (afi == AFI_IP6)
+	zlog_debug ("scanning IPv6 Unicast routing tables");
+    }
 }
 
 /* BGP scan thread.  This thread check nexthop reachability. */
@@ -516,7 +524,7 @@
   bgp_scan_thread =
     thread_add_timer (master, bgp_scan_timer, NULL, bgp_scan_interval);
 
-  if (BGP_DEBUG (normal, NORMAL))
+  if (BGP_DEBUG (events, EVENTS))
     zlog_debug ("Performing BGP general scanning");
 
   bgp_scan (AFI_IP, SAFI_UNICAST);
@@ -1022,7 +1030,6 @@
 int
 bgp_import (struct thread *t)
 {
-  struct bgp_master *bm;
   struct bgp *bgp;
   struct bgp_node *rn;
   struct bgp_static *bgp_static;
@@ -1036,9 +1043,8 @@
   bgp_import_thread = 
     thread_add_timer (master, bgp_import, NULL, bgp_import_interval);
 
-  bm = bgp_get_master ();
-  if (! bm)
-    return 0;
+  if (BGP_DEBUG (events, EVENTS))
+    zlog_debug ("Import timer expired.");
 
   LIST_LOOP (bm->bgp, bgp, nn)
     {
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
index 5640e2b..04e5bd3 100644
--- a/bgpd/bgp_packet.c
+++ b/bgpd/bgp_packet.c
@@ -1527,6 +1527,16 @@
 	  bgp_nlri_parse (peer, &attr, &update);
 	}
 
+      if (mp_update.length
+	  && mp_update.afi == AFI_IP 
+	  && mp_update.safi == SAFI_UNICAST)
+	bgp_nlri_parse (peer, &attr, &mp_update);
+
+      if (mp_withdraw.length
+	  && mp_withdraw.afi == AFI_IP 
+	  && mp_withdraw.safi == SAFI_UNICAST)
+	bgp_nlri_parse (peer, NULL, &mp_withdraw);
+
       if (! attribute_len && ! withdraw_len)
 	{
 	  /* End-of-RIB received */
diff --git a/bgpd/bgp_snmp.c b/bgpd/bgp_snmp.c
index 6ffadf9..228060a 100644
--- a/bgpd/bgp_snmp.c
+++ b/bgpd/bgp_snmp.c
@@ -870,11 +870,6 @@
 void
 bgp_snmp_init ()
 {
-  struct bgp_master *bm;
-  
-  if ( !(bm = bgp_get_master ()) )
-    return;
-    
   smux_init (bm->master);
   REGISTER_MIB("mibII/bgp", bgp_variables, variable, bgp_oid);
 }
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index 5968f68..b94e66b 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -2770,7 +2770,7 @@
   return CMD_SUCCESS;
 }
 
-/* Set specified peer's BGP version.  */
+/* Set specified peer's BGP port.  */
 DEFUN (neighbor_port,
        neighbor_port_cmd,
        NEIGHBOR_CMD "port <0-65535>",
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index bd2f998..cb760d9 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -1780,15 +1780,6 @@
   return bgp;
 }
 
-/* Return master of BGP. */
-struct bgp_master *
-bgp_get_master ()
-{
-  if (bm)
-    return bm;
-  return NULL;
-}
-
 /* Return first entry of BGP. */
 struct bgp *
 bgp_get_default ()
@@ -4870,14 +4861,11 @@
 void
 bgp_terminate ()
 {
-  struct bgp_master *bm;
   struct bgp *bgp;
   struct peer *peer;
   struct listnode *nn;
   struct listnode *mm;
 
-  bm = bgp_get_master ();
-
   LIST_LOOP (bm->bgp, bgp, nn)
     LIST_LOOP (bgp->peer, peer, mm)
       if (peer->status == Established)
diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h
index 4137baf..42c3cea 100644
--- a/bgpd/bgpd.h
+++ b/bgpd/bgpd.h
@@ -764,7 +764,6 @@
 void bgp_zclient_reset ();
 int bgp_nexthop_set (union sockunion *, union sockunion *, 
 		     struct bgp_nexthop *, struct peer *);
-struct bgp_master *bgp_get_master ();
 struct bgp *bgp_get_default ();
 struct bgp *bgp_lookup (as_t, const char *);
 struct bgp *bgp_lookup_by_name (const char *);
