diff --git a/ChangeLog b/ChangeLog
index 90ed1ba08f3ac156263e98114a93c73d954dd6fb..d7c7753ce9335dc2e26d9ab1ce3e37594b1ff5ad 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -872,3 +872,10 @@
 	  stdout to output debug data.  That works fine unless (1) the dbg() macro
 	  is interrupt logic and the interrupted task has redirected stdout!  Most
 	  changes were in uIP.
+	* net/uip/uip_tcpinput.c.  Connection reference count was not being set correctly
+	  when a socket is created by accepting a new connection.  Since the reference
+	  count is bad, such sockets are not successfully duplicated when being passed
+	  to new tasks.
+	* net/net_clone.c.  Similarly, after a socket is cloned, its reference count
+	  was not being initialized.
+
diff --git a/Documentation/NuttX.html b/Documentation/NuttX.html
index 121ba36a5ceb4bdad28f67c19dcd4cde2d5bd3c4..834ba4075af6a6f28cbcbbb9f74d247484b1a0ae 100644
--- a/Documentation/NuttX.html
+++ b/Documentation/NuttX.html
@@ -1532,6 +1532,12 @@ nuttx-0.4.11 2009-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
 	* Changed lots of occurrents of debug macro dbg() to lldbg().  dbg() uses
 	  stdout to output debug data.  That works fine unless (1) the dbg() macro
 	  is interrupt logic and the interrupted task has redirected stdout!  Most
+	* net/uip/uip_tcpinput.c.  Connection reference count was not being set correctly
+	  when a socket is created by accepting a new connection.  Since the reference
+	  count is bad, such sockets are not successfully duplicated when being passed
+	  to new tasks.
+	* net/net_clone.c.  Similarly, after a socket is cloned, its reference count
+	  was not being initialized.
 
 pascal-0.1.3 2009-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
 
diff --git a/net/net_clone.c b/net/net_clone.c
index ab5e5a952acdfff59125b46e2c43b0204991d2ce..313daee24e026b8b6f2a36a908e5892289cc6e44 100644
--- a/net/net_clone.c
+++ b/net/net_clone.c
@@ -86,6 +86,7 @@ int net_clone(FAR struct socket *psock1, FAR struct socket *psock2)
   /* Increment the reference count on the connection */
 
   DEBUGASSERT(psock2->s_conn);
+  psock2->s_crefs    = 1;                   /* One reference on the new socket itself */
 
 #ifdef CONFIG_NET_TCP
   if (psock2->s_type == SOCK_STREAM)
diff --git a/net/uip/uip_tcpinput.c b/net/uip/uip_tcpinput.c
index b1885a093cec10ee0d53746b9164407269689c12..5f0430ed26cb717996773225d3e6898fd6ccdf6b 100644
--- a/net/uip/uip_tcpinput.c
+++ b/net/uip/uip_tcpinput.c
@@ -167,6 +167,8 @@ void uip_tcpinput(struct uip_driver_s *dev)
                */
 
               conn->tcpstateflags = UIP_ESTABLISHED;
+              conn->crefs         = 1;
+
               if (uip_accept(dev, conn, tmp16) != OK)
                 {
                   /* No, then we have to give the connection back */