diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index ae8af9f..e9d81de 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -504,10 +504,11 @@
   return 0;
 }
 
+/* Peer comparison function for sorting.  */
 static int
 peer_cmp (struct peer *p1, struct peer *p2)
 {
-  return sockunion_cmp (&p1->su, &p2->su);  
+  return sockunion_cmp (&p1->su, &p2->su);
 }
 
 int
@@ -683,11 +684,8 @@
   peer = XMALLOC (MTYPE_BGP_PEER, sizeof (struct peer));
   memset (peer, 0, sizeof (struct peer));
 
-  peer->fd = &peer->fd_local;
-
   /* Set default value. */
-  peer->fd_local = -1;
-  peer->fd_accept = -1;
+  peer->fd = -1;
   peer->v_start = BGP_INIT_START_TIMER;
   peer->v_connect = BGP_DEFAULT_CONNECT_RETRY;
   peer->v_asorig = BGP_DEFAULT_ASORIGINATE;
@@ -771,6 +769,19 @@
   return peer;
 }
 
+/* Make accept BGP peer.  Called from bgp_accept (). */
+struct peer *
+peer_create_accept (struct bgp *bgp)
+{
+  struct peer *peer;
+
+  peer = peer_new ();
+  peer->bgp = bgp;
+  listnode_add_sort (bgp->peer, peer);
+
+  return peer;
+}
+
 /* Change peer's AS number.  */
 void
 peer_as_change (struct peer *peer, as_t as)
@@ -1799,8 +1810,9 @@
   
   LIST_LOOP (bgp->peer, peer, nn)
     {
-      if (sockunion_same (&peer->su, su))
-        return peer;
+      if (sockunion_same (&peer->su, su)
+	  && ! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
+	return peer;
     }
   return NULL;
 }
@@ -1819,25 +1831,27 @@
 
   LIST_LOOP (bgp->peer, peer, nn)
     {
-      if (sockunion_same (&peer->su, su))
-        {
-          if (peer->as == remote_as
-              && peer->remote_id.s_addr == remote_id->s_addr)
-            return peer;
-          if (peer->as == remote_as)
-            *as = 1;
-        }
+      if (sockunion_same (&peer->su, su)
+	  && ! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
+	{
+	  if (peer->as == remote_as
+	      && peer->remote_id.s_addr == remote_id->s_addr)
+	    return peer;
+	  if (peer->as == remote_as)
+	    *as = 1;
+	}
     }
   LIST_LOOP (bgp->peer, peer, nn)
     {
-      if (sockunion_same (&peer->su, su))
-        {
-          if (peer->as == remote_as
-              && peer->remote_id.s_addr == 0)
-            return peer;
-          if (peer->as == remote_as)
-            *as = 1;
-        }
+      if (sockunion_same (&peer->su, su)
+	  &&  ! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
+	{
+	  if (peer->as == remote_as
+	      && peer->remote_id.s_addr == 0)
+	    return peer;
+	  if (peer->as == remote_as)
+	    *as = 1;
+	}
     }
   return NULL;
 }
@@ -2264,24 +2278,22 @@
 
   if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
     {
-      if (*peer->fd >= 0 && peer_sort (peer) != BGP_PEER_IBGP)
-        sockopt_ttl (peer->su.sa.sa_family, *peer->fd, 
-                     peer->ttl);
+      if (peer->fd >= 0 && peer_sort (peer) != BGP_PEER_IBGP)
+	sockopt_ttl (peer->su.sa.sa_family, peer->fd, peer->ttl);
     }
   else
     {
       group = peer->group;
       LIST_LOOP (group->peer, peer, nn)
-        {
-          if (peer_sort (peer) == BGP_PEER_IBGP)
-            continue;
+	{
+	  if (peer_sort (peer) == BGP_PEER_IBGP)
+	    continue;
 
-          peer->ttl = group->conf->ttl;
+	  peer->ttl = group->conf->ttl;
 
-          if (*peer->fd >= 0)
-            sockopt_ttl (peer->su.sa.sa_family,
-                         *peer->fd, peer->ttl);
-        }
+	  if (peer->fd >= 0)
+	    sockopt_ttl (peer->su.sa.sa_family, peer->fd, peer->ttl);
+	}
     }
   return 0;
 }
@@ -2302,24 +2314,22 @@
 
   if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
     {
-      if (*peer->fd >= 0 && peer_sort (peer) != BGP_PEER_IBGP)
-        sockopt_ttl (peer->su.sa.sa_family, 
-                     *peer->fd, peer->ttl);
+      if (peer->fd >= 0 && peer_sort (peer) != BGP_PEER_IBGP)
+	sockopt_ttl (peer->su.sa.sa_family, peer->fd, peer->ttl);
     }
   else
     {
       group = peer->group;
       LIST_LOOP (group->peer, peer, nn)
-        {
-          if (peer_sort (peer) == BGP_PEER_IBGP)
-            continue;
+	{
+	  if (peer_sort (peer) == BGP_PEER_IBGP)
+	    continue;
 
-          peer->ttl = 1;
-          
-          if (*peer->fd >= 0)
-            sockopt_ttl (peer->su.sa.sa_family,
-                         *peer->fd, peer->ttl);
-        }
+	  peer->ttl = 1;
+	  
+	  if (peer->fd >= 0)
+	    sockopt_ttl (peer->su.sa.sa_family, peer->fd, peer->ttl);
+	}
     }
   return 0;
 }
