diff --git a/library/net.c b/library/net.c
index 78525c3..df79bf3 100644
--- a/library/net.c
+++ b/library/net.c
@@ -18,11 +18,11 @@
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#include "xyssl/config.h"
+#include "polarssl/config.h"
 
-#if defined(XYSSL_NET_C)
+#if defined(POLARSSL_NET_C)
 
-#include "xyssl/net.h"
+#include "polarssl/net.h"
 
 #if defined(WIN32) || defined(_WIN32_WCE)
 
@@ -89,7 +89,7 @@
     if( wsa_init_done == 0 )
     {
         if( WSAStartup( MAKEWORD(2,0), &wsaData ) == SOCKET_ERROR )
-            return( XYSSL_ERR_NET_SOCKET_FAILED );
+            return( POLARSSL_ERR_NET_SOCKET_FAILED );
 
         wsa_init_done = 1;
     }
@@ -98,10 +98,10 @@
 #endif
 
     if( ( server_host = gethostbyname( host ) ) == NULL )
-        return( XYSSL_ERR_NET_UNKNOWN_HOST );
+        return( POLARSSL_ERR_NET_UNKNOWN_HOST );
 
     if( ( *fd = socket( AF_INET, SOCK_STREAM, IPPROTO_IP ) ) < 0 )
-        return( XYSSL_ERR_NET_SOCKET_FAILED );
+        return( POLARSSL_ERR_NET_SOCKET_FAILED );
 
     memcpy( (void *) &server_addr.sin_addr,
             (void *) server_host->h_addr,
@@ -114,7 +114,7 @@
                  sizeof( server_addr ) ) < 0 )
     {
         close( *fd );
-        return( XYSSL_ERR_NET_CONNECT_FAILED );
+        return( POLARSSL_ERR_NET_CONNECT_FAILED );
     }
 
     return( 0 );
@@ -134,7 +134,7 @@
     if( wsa_init_done == 0 )
     {
         if( WSAStartup( MAKEWORD(2,0), &wsaData ) == SOCKET_ERROR )
-            return( XYSSL_ERR_NET_SOCKET_FAILED );
+            return( POLARSSL_ERR_NET_SOCKET_FAILED );
 
         wsa_init_done = 1;
     }
@@ -143,7 +143,7 @@
 #endif
 
     if( ( *fd = socket( AF_INET, SOCK_STREAM, IPPROTO_IP ) ) < 0 )
-        return( XYSSL_ERR_NET_SOCKET_FAILED );
+        return( POLARSSL_ERR_NET_SOCKET_FAILED );
 
     n = 1;
     setsockopt( *fd, SOL_SOCKET, SO_REUSEADDR,
@@ -174,13 +174,13 @@
               sizeof( server_addr ) ) < 0 )
     {
         close( *fd );
-        return( XYSSL_ERR_NET_BIND_FAILED );
+        return( POLARSSL_ERR_NET_BIND_FAILED );
     }
 
     if( listen( *fd, 10 ) != 0 )
     {
         close( *fd );
-        return( XYSSL_ERR_NET_LISTEN_FAILED );
+        return( POLARSSL_ERR_NET_LISTEN_FAILED );
     }
 
     return( 0 );
@@ -227,9 +227,9 @@
     if( *client_fd < 0 )
     {
         if( net_is_blocking() != 0 )
-            return( XYSSL_ERR_NET_TRY_AGAIN );
+            return( POLARSSL_ERR_NET_TRY_AGAIN );
 
-        return( XYSSL_ERR_NET_ACCEPT_FAILED );
+        return( POLARSSL_ERR_NET_ACCEPT_FAILED );
     }
 
     if( client_ip != NULL )
@@ -281,25 +281,25 @@
     int ret = read( *((int *) ctx), buf, len );
 
     if( len > 0 && ret == 0 )
-        return( XYSSL_ERR_NET_CONN_RESET );
+        return( POLARSSL_ERR_NET_CONN_RESET );
 
     if( ret < 0 )
     {
         if( net_is_blocking() != 0 )
-            return( XYSSL_ERR_NET_TRY_AGAIN );
+            return( POLARSSL_ERR_NET_TRY_AGAIN );
 
 #if defined(WIN32) || defined(_WIN32_WCE)
         if( WSAGetLastError() == WSAECONNRESET )
-            return( XYSSL_ERR_NET_CONN_RESET );
+            return( POLARSSL_ERR_NET_CONN_RESET );
 #else
         if( errno == EPIPE || errno == ECONNRESET )
-            return( XYSSL_ERR_NET_CONN_RESET );
+            return( POLARSSL_ERR_NET_CONN_RESET );
 
         if( errno == EINTR )
-            return( XYSSL_ERR_NET_TRY_AGAIN );
+            return( POLARSSL_ERR_NET_TRY_AGAIN );
 #endif
 
-        return( XYSSL_ERR_NET_RECV_FAILED );
+        return( POLARSSL_ERR_NET_RECV_FAILED );
     }
 
     return( ret );
@@ -315,20 +315,20 @@
     if( ret < 0 )
     {
         if( net_is_blocking() != 0 )
-            return( XYSSL_ERR_NET_TRY_AGAIN );
+            return( POLARSSL_ERR_NET_TRY_AGAIN );
 
 #if defined(WIN32) || defined(_WIN32_WCE)
         if( WSAGetLastError() == WSAECONNRESET )
-            return( XYSSL_ERR_NET_CONN_RESET );
+            return( POLARSSL_ERR_NET_CONN_RESET );
 #else
         if( errno == EPIPE || errno == ECONNRESET )
-            return( XYSSL_ERR_NET_CONN_RESET );
+            return( POLARSSL_ERR_NET_CONN_RESET );
 
         if( errno == EINTR )
-            return( XYSSL_ERR_NET_TRY_AGAIN );
+            return( POLARSSL_ERR_NET_TRY_AGAIN );
 #endif
 
-        return( XYSSL_ERR_NET_SEND_FAILED );
+        return( POLARSSL_ERR_NET_SEND_FAILED );
     }
 
     return( ret );
