diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
index c702946..417e622 100644
--- a/bgpd/bgp_attr.c
+++ b/bgpd/bgp_attr.c
@@ -701,7 +701,7 @@
     }
 
   /* Forward pointer. */
-  stream_forward (peer->ibuf, length);
+  stream_forward_getp (peer->ibuf, length);
 
   /* Set aspath attribute flag. */
   attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_AS_PATH);
@@ -789,7 +789,7 @@
      receiving speaker. */
   if (peer_sort (peer) == BGP_PEER_EBGP)
     {
-      stream_forward (peer->ibuf, length);
+      stream_forward_getp (peer->ibuf, length);
       return 0;
     }
 
@@ -859,7 +859,7 @@
     {
       attr->community = 
         community_parse ((u_int32_t *)stream_pnt (peer->ibuf), length);
-      stream_forward (peer->ibuf, length);
+      stream_forward_getp (peer->ibuf, length);
     }
 
   attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_COMMUNITIES);
@@ -908,7 +908,7 @@
   attr->cluster = cluster_parse ((struct in_addr *)stream_pnt (peer->ibuf), 
                                  length);
 
-  stream_forward (peer->ibuf, length);;
+  stream_forward_getp (peer->ibuf, length);;
 
   attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_CLUSTER_LIST);
 
@@ -991,7 +991,7 @@
   while (snpa_num--)
     {
       snpa_len = stream_getc (s);
-      stream_forward (s, (snpa_len + 1) >> 1);
+      stream_forward_getp (s, (snpa_len + 1) >> 1);
     }
   
   nlri_len = lim - stream_pnt (s);
@@ -1008,7 +1008,7 @@
   mp_update->nlri = stream_pnt (s);
   mp_update->length = nlri_len;
 
-  stream_forward (s, nlri_len);
+  stream_forward_getp (s, nlri_len);
 
   return 0;
 }
@@ -1045,7 +1045,7 @@
   mp_withdraw->nlri = stream_pnt (s);
   mp_withdraw->length = withdraw_len;
 
-  stream_forward (s, withdraw_len);
+  stream_forward_getp (s, withdraw_len);
 
   return 0;
 }
@@ -1061,7 +1061,7 @@
     {
       attr->ecommunity = 
         ecommunity_parse ((u_int8_t *)stream_pnt (peer->ibuf), length);
-      stream_forward (peer->ibuf, length);
+      stream_forward_getp (peer->ibuf, length);
     }
   attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_EXT_COMMUNITIES);
 
@@ -1085,7 +1085,7 @@
 	  "Unknown attribute type %d length %d is received", type, length);
 
   /* Forward read pointer of input stream. */
-  stream_forward (peer->ibuf, length);
+  stream_forward_getp (peer->ibuf, length);
 
   /* Adjest total length to include type and length. */
   total = length + (CHECK_FLAG (flag, BGP_ATTR_FLAG_EXTLEN) ? 4 : 3);
@@ -1348,7 +1348,7 @@
     bgp = bgp_get_default ();
 
   /* Remember current pointer. */
-  cp = stream_get_putp (s);
+  cp = stream_get_endp (s);
 
   /* Origin attribute. */
   stream_putc (s, BGP_ATTR_FLAG_TRANS);
@@ -1533,7 +1533,7 @@
 
       stream_putc (s, BGP_ATTR_FLAG_OPTIONAL);
       stream_putc (s, BGP_ATTR_MP_REACH_NLRI);
-      sizep = stream_get_putp (s);
+      sizep = stream_get_endp (s);
       stream_putc (s, 0);	/* Length of this attribute. */
       stream_putw (s, AFI_IP6);	/* AFI */
       stream_putc (s, safi);	/* SAFI */
@@ -1555,7 +1555,7 @@
       stream_put_prefix (s, p);
 
       /* Set MP attribute length. */
-      stream_putc_at (s, sizep, (stream_get_putp (s) - sizep) - 1);
+      stream_putc_at (s, sizep, (stream_get_endp (s) - sizep) - 1);
     }
 #endif /* HAVE_IPV6 */
 
@@ -1565,7 +1565,7 @@
 
       stream_putc (s, BGP_ATTR_FLAG_OPTIONAL);
       stream_putc (s, BGP_ATTR_MP_REACH_NLRI);
-      sizep = stream_get_putp (s);
+      sizep = stream_get_endp (s);
       stream_putc (s, 0);	/* Length of this attribute. */
       stream_putw (s, AFI_IP);	/* AFI */
       stream_putc (s, SAFI_MULTICAST);	/* SAFI */
@@ -1580,7 +1580,7 @@
       stream_put_prefix (s, p);
 
       /* Set MP attribute length. */
-      stream_putc_at (s, sizep, (stream_get_putp (s) - sizep) - 1);
+      stream_putc_at (s, sizep, (stream_get_endp (s) - sizep) - 1);
     }
 
   if (p->family == AF_INET && safi == SAFI_MPLS_VPN)
@@ -1589,7 +1589,7 @@
 
       stream_putc (s, BGP_ATTR_FLAG_OPTIONAL);
       stream_putc (s, BGP_ATTR_MP_REACH_NLRI);
-      sizep = stream_get_putp (s);
+      sizep = stream_get_endp (s);
       stream_putc (s, 0);	/* Length of this attribute. */
       stream_putw (s, AFI_IP);	/* AFI */
       stream_putc (s, BGP_SAFI_VPNV4);	/* SAFI */
@@ -1609,7 +1609,7 @@
       stream_put (s, &p->u.prefix, PSIZE (p->prefixlen));
 
       /* Set MP attribute length. */
-      stream_putc_at (s, sizep, (stream_get_putp (s) - sizep) - 1);
+      stream_putc_at (s, sizep, (stream_get_endp (s) - sizep) - 1);
     }
 
   /* Extended Communities attribute. */
@@ -1684,7 +1684,7 @@
     stream_put (s, attr->transit->val, attr->transit->length);
 
   /* Return total size of attribute. */
-  return stream_get_putp (s) - cp;
+  return stream_get_endp (s) - cp;
 }
 
 bgp_size_t
@@ -1696,12 +1696,12 @@
   unsigned long attrlen_pnt;
   bgp_size_t size;
 
-  cp = stream_get_putp (s);
+  cp = stream_get_endp (s);
 
   stream_putc (s, BGP_ATTR_FLAG_OPTIONAL);
   stream_putc (s, BGP_ATTR_MP_UNREACH_NLRI);
 
-  attrlen_pnt = stream_get_putp (s);
+  attrlen_pnt = stream_get_endp (s);
   stream_putc (s, 0);		/* Length of this attribute. */
 
   stream_putw (s, family2afi (p->family));
@@ -1727,10 +1727,10 @@
     }
 
   /* Set MP attribute length. */
-  size = stream_get_putp (s) - attrlen_pnt - 1;
+  size = stream_get_endp (s) - attrlen_pnt - 1;
   stream_putc_at (s, attrlen_pnt, size);
 
-  return stream_get_putp (s) - cp;
+  return stream_get_endp (s) - cp;
 }
 
 /* Initialization of attribute. */
@@ -1757,7 +1757,7 @@
   struct aspath *aspath;
 
   /* Remember current pointer. */
-  cp = stream_get_putp (s);
+  cp = stream_get_endp (s);
 
   /* Place holder of length. */
   stream_putw (s, 0);
@@ -1861,7 +1861,7 @@
 
       stream_putc(s, BGP_ATTR_FLAG_OPTIONAL);
       stream_putc(s, BGP_ATTR_MP_REACH_NLRI);
-      sizep = stream_get_putp (s);
+      sizep = stream_get_endp (s);
 
       /* MP header */
       stream_putc (s, 0);		/* Length of this attribute. */
@@ -1881,11 +1881,11 @@
       stream_put_prefix(s, prefix);
 
       /* Set MP attribute length. */
-      stream_putc_at (s, sizep, (stream_get_putp (s) - sizep) - 1);
+      stream_putc_at (s, sizep, (stream_get_endp (s) - sizep) - 1);
     }
 #endif /* HAVE_IPV6 */
 
   /* Return total size of attribute. */
-  len = stream_get_putp (s) - cp - 2;
+  len = stream_get_endp (s) - cp - 2;
   stream_putw_at (s, cp, len);
 }
diff --git a/bgpd/bgp_dump.c b/bgpd/bgp_dump.c
index 549a4f0..0fb5ed8 100644
--- a/bgpd/bgp_dump.c
+++ b/bgpd/bgp_dump.c
@@ -185,7 +185,7 @@
 void
 bgp_dump_set_size (struct stream *s, int type)
 {
-  stream_putl_at (s, 8, stream_get_putp (s) - BGP_DUMP_HEADER_SIZE);
+  stream_putl_at (s, 8, stream_get_endp (s) - BGP_DUMP_HEADER_SIZE);
 }
 
 void
@@ -290,7 +290,7 @@
   /* Set length. */
   bgp_dump_set_size (obuf, type);
 
-  fwrite (STREAM_DATA (obuf), stream_get_putp (obuf), 1, bgp_dump_routes.fp);
+  fwrite (STREAM_DATA (obuf), stream_get_endp (obuf), 1, bgp_dump_routes.fp);
   fflush (bgp_dump_routes.fp);
 }
 
@@ -416,7 +416,7 @@
   bgp_dump_set_size (obuf, MSG_PROTOCOL_BGP4MP);
 
   /* Write to the stream. */
-  fwrite (STREAM_DATA (obuf), stream_get_putp (obuf), 1, bgp_dump_all.fp);
+  fwrite (STREAM_DATA (obuf), stream_get_endp (obuf), 1, bgp_dump_all.fp);
   fflush (bgp_dump_all.fp);
 }
 
@@ -445,7 +445,7 @@
   bgp_dump_set_size (obuf, MSG_PROTOCOL_BGP4MP);
 
   /* Write to the stream. */
-  fwrite (STREAM_DATA (obuf), stream_get_putp (obuf), 1, bgp_dump->fp);
+  fwrite (STREAM_DATA (obuf), stream_get_endp (obuf), 1, bgp_dump->fp);
   fflush (bgp_dump->fp);
 }
 
diff --git a/bgpd/bgp_open.c b/bgpd/bgp_open.c
index 7250383..b1d0fc1 100644
--- a/bgpd/bgp_open.c
+++ b/bgpd/bgp_open.c
@@ -675,15 +675,15 @@
     safi = BGP_SAFI_VPNV4;
 
   stream_putc (s, BGP_OPEN_OPT_CAP);
-  capp = stream_get_putp (s);           /* Set Capability Len Pointer */
+  capp = stream_get_endp (s);           /* Set Capability Len Pointer */
   stream_putc (s, 0);                   /* Capability Length */
   stream_putc (s, code);                /* Capability Code */
-  orfp = stream_get_putp (s);           /* Set ORF Len Pointer */
+  orfp = stream_get_endp (s);           /* Set ORF Len Pointer */
   stream_putc (s, 0);                   /* ORF Length */
   stream_putw (s, afi);
   stream_putc (s, 0);
   stream_putc (s, safi);
-  numberp = stream_get_putp (s);        /* Set Number Pointer */
+  numberp = stream_get_endp (s);        /* Set Number Pointer */
   stream_putc (s, 0);                   /* Number of ORFs */
 
   /* Address Prefix ORF */
@@ -717,11 +717,11 @@
   stream_putc_at (s, numberp, number_of_orfs);
 
   /* Total ORF Len. */
-  orf_len = stream_get_putp (s) - orfp - 1;
+  orf_len = stream_get_endp (s) - orfp - 1;
   stream_putc_at (s, orfp, orf_len);
 
   /* Total Capability Len. */
-  cap_len = stream_get_putp (s) - capp - 1;
+  cap_len = stream_get_endp (s) - capp - 1;
   stream_putc_at (s, capp, cap_len);
 }
 
@@ -735,7 +735,7 @@
   safi_t safi;
 
   /* Remember current pointer for Opt Parm Len. */
-  cp = stream_get_putp (s);
+  cp = stream_get_endp (s);
 
   /* Opt Parm Len. */
   stream_putc (s, 0);
@@ -851,6 +851,6 @@
      }
 
   /* Total Opt Parm Len. */
-  len = stream_get_putp (s) - cp - 1;
+  len = stream_get_endp (s) - cp - 1;
   stream_putc_at (s, cp, len);
 }
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
index 201ffbb..8f7577b 100644
--- a/bgpd/bgp_packet.c
+++ b/bgpd/bgp_packet.c
@@ -67,7 +67,7 @@
   stream_putc (s, type);
 
   /* Return current stream size. */
-  return stream_get_putp (s);
+  return stream_get_endp (s);
 }
 
 /* Set BGP packet header size entry.  If size is zero then use current
@@ -78,12 +78,8 @@
   int cp;
 
   /* Preserve current pointer. */
-  cp = stream_get_putp (s);
-  stream_set_putp (s, BGP_MARKER_SIZE);
-  stream_putw (s, cp);
-
-  /* Write back current pointer. */
-  stream_set_putp (s, cp);
+  cp = stream_get_endp (s);
+  stream_putw_at (s, BGP_MARKER_SIZE, cp);
 
   return cp;
 }
@@ -112,7 +108,6 @@
   new = stream_new (stream_get_endp (s));
 
   new->endp = s->endp;
-  new->putp = s->putp;
   new->getp = s->getp;
 
   memcpy (new->data, s->data, stream_get_endp (s));
@@ -202,7 +197,7 @@
 	{
 	  bgp_packet_set_marker (s, BGP_MSG_UPDATE);
 	  stream_putw (s, 0);		
-	  pos = stream_get_putp (s);
+	  pos = stream_get_endp (s);
 	  stream_putw (s, 0);
 	  total_attr_len = bgp_packet_attribute (NULL, peer, s, 
 	                                         adv->baa->attr,
@@ -330,7 +325,7 @@
 	stream_put_prefix (s, &rn->p);
       else
 	{
-	  pos = stream_get_putp (s);
+	  pos = stream_get_endp (s);
 	  stream_putw (s, 0);
 	  total_attr_len
 	    = bgp_packet_withdraw (peer, s, &rn->p, afi, safi, prd, NULL);
@@ -359,7 +354,7 @@
       if (afi == AFI_IP && safi == SAFI_UNICAST)
 	{
 	  unfeasible_len 
-	    = stream_get_putp (s) - BGP_HEADER_SIZE - BGP_UNFEASIBLE_LEN;
+	    = stream_get_endp (s) - BGP_HEADER_SIZE - BGP_UNFEASIBLE_LEN;
 	  stream_putw_at (s, BGP_HEADER_SIZE, unfeasible_len);
 	  stream_putw (s, 0);
 	}
@@ -414,7 +409,7 @@
   stream_putw (s, 0);
 
   /* Make place for total attribute length.  */
-  pos = stream_get_putp (s);
+  pos = stream_get_endp (s);
   stream_putw (s, 0);
   total_attr_len = bgp_packet_attribute (NULL, peer, s, attr, &p, afi, safi, from, NULL, NULL);
 
@@ -479,7 +474,7 @@
   bgp_packet_set_marker (s, BGP_MSG_UPDATE);
 
   /* Unfeasible Routes Length. */;
-  cp = stream_get_putp (s);
+  cp = stream_get_endp (s);
   stream_putw (s, 0);
 
   /* Withdrawn Routes. */
@@ -487,7 +482,7 @@
     {
       stream_put_prefix (s, &p);
 
-      unfeasible_len = stream_get_putp (s) - cp - 2;
+      unfeasible_len = stream_get_endp (s) - cp - 2;
 
       /* Set unfeasible len.  */
       stream_putw_at (s, cp, unfeasible_len);
@@ -497,7 +492,7 @@
     }
   else
     {
-      pos = stream_get_putp (s);
+      pos = stream_get_endp (s);
       stream_putw (s, 0);
       total_attr_len = bgp_packet_withdraw (peer, s, &p, afi, safi, NULL, NULL);
 
@@ -665,7 +660,7 @@
 	}
       if (num != writenum)
 	{
-	  stream_forward (s, num);
+	  stream_forward_getp (s, num);
 
 	  if (write_errno == EAGAIN)
 	    break;
@@ -1016,7 +1011,7 @@
 	orf_refresh = 1; 
 	stream_putc (s, when_to_refresh);
 	stream_putc (s, orf_type);
-	orfp = stream_get_putp (s);
+	orfp = stream_get_endp (s);
 	stream_putw (s, 0);
 
 	if (remove)
@@ -1043,7 +1038,7 @@
 	  }
 
 	/* Total ORF Entry Len. */
-	orf_len = stream_get_putp (s) - orfp - 2;
+	orf_len = stream_get_endp (s) - orfp - 2;
 	stream_putw_at (s, orfp, orf_len);
       }
 
@@ -1398,7 +1393,7 @@
       if (ret < 0)
 	return ret;
 
-      stream_forward (peer->ibuf, optlen);
+      stream_forward_getp (peer->ibuf, optlen);
     }
   else
     {
@@ -1506,7 +1501,7 @@
       withdraw.safi = SAFI_UNICAST;
       withdraw.nlri = stream_pnt (s);
       withdraw.length = withdraw_len;
-      stream_forward (s, withdraw_len);
+      stream_forward_getp (s, withdraw_len);
     }
   
   /* Attribute total length check. */
@@ -1568,7 +1563,7 @@
       update.safi = SAFI_UNICAST;
       update.nlri = stream_pnt (s);
       update.length = update_len;
-      stream_forward (s, update_len);
+      stream_forward_getp (s, update_len);
     }
 
   /* NLRI is processed only when the peer is configured specific
@@ -1992,7 +1987,7 @@
 	      peer->orf_plist[afi][safi] =
 			 prefix_list_lookup (AFI_ORF_PREFIX, name);
 	    }
-	  stream_forward (s, orf_len);
+	  stream_forward_getp (s, orf_len);
 	}
       if (BGP_DEBUG (normal, NORMAL))
 	zlog_debug ("%s rcvd Refresh %s ORF request", peer->host,
@@ -2162,7 +2157,7 @@
   int nbytes;
   int readsize;
 
-  readsize = peer->packet_size - peer->ibuf->putp;
+  readsize = peer->packet_size - stream_get_endp (peer->ibuf);
 
   /* If size is zero then return. */
   if (! readsize)
@@ -2218,7 +2213,7 @@
     }
 
   /* We read partial packet. */
-  if (peer->ibuf->putp != peer->packet_size)
+  if (stream_get_endp (peer->ibuf) != peer->packet_size)
     return -1;
 
   return 0;
@@ -2271,7 +2266,7 @@
   if (peer->packet_size == 0)
     peer->packet_size = BGP_HEADER_SIZE;
 
-  if (peer->ibuf->putp < BGP_HEADER_SIZE)
+  if (stream_get_endp (peer->ibuf) < BGP_HEADER_SIZE)
     {
       ret = bgp_read_packet (peer);
 
@@ -2280,7 +2275,7 @@
 	goto done;
 
       /* Get size and type. */
-      stream_forward (peer->ibuf, BGP_MARKER_SIZE);
+      stream_forward_getp (peer->ibuf, BGP_MARKER_SIZE);
       memcpy (notify_data_length, stream_pnt (peer->ibuf), 2);
       size = stream_getw (peer->ibuf);
       type = stream_getc (peer->ibuf);
