diff --git a/auto/os/freebsd b/auto/os/freebsd
index 7ddd6dc..82e442c 100644
--- a/auto/os/freebsd
+++ b/auto/os/freebsd
@@ -53,7 +53,7 @@
 if [ \( $version -lt 500000 -a $version -ge 430000 \) \
      -o $version -ge 500018 ]
 then
-    echo " + using kqueue's NOTE_LAWAT"
+    echo " + using kqueue's NOTE_LOWAT"
 
     have=HAVE_LOWAT_EVENT . auto/have
 fi
diff --git a/src/core/nginx.h b/src/core/nginx.h
index 436f1e8..224605a 100644
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -2,7 +2,7 @@
 #define _NGINX_H_INCLUDED_
 
 
-#define NGINX_VER          "nginx/0.0.2"
+#define NGINX_VER          "nginx/0.0.3"
 #define NGINX_CONF         (u_char *) "nginx.conf"
 #define NGINX_PID          "nginx.pid"
 #define NGINX_NEW_PID_EXT  ".newbin"
diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c
index 9f593f0..fd67b76 100644
--- a/src/core/ngx_inet.c
+++ b/src/core/ngx_inet.c
@@ -3,14 +3,62 @@
 #include <ngx_core.h>
 
 
+ngx_inline static size_t ngx_sprint_uchar(u_char *text, u_char c, size_t len)
+{
+    size_t      n;
+    ngx_uint_t  c1, c2;
+
+    n = 0;
+
+    if (len == n) {
+        return n;
+    }
+
+    c1 = c / 100;
+
+    if (c1) {
+        *text++ = (u_char) (c1 + '0');
+        n++;
+
+        if (len == n) {
+            return n;
+        }
+    }
+
+    c2 = (c % 100) / 10;
+
+    if (c1 || c2) {
+        *text++ = (u_char) (c2 + '0');
+        n++;
+
+        if (len == n) {
+            return n;
+        }
+    }
+
+    c2 = c % 10;
+
+    *text++ = (u_char) (c2 + '0');
+    n++;
+
+    return n;
+}
+
+
 /* AF_INET only */
 
 size_t ngx_sock_ntop(int family, struct sockaddr *addr, u_char *text,
                      size_t len)
 {
     u_char              *p;
+    size_t               n;
+    ngx_uint_t           i;
     struct sockaddr_in  *addr_in;
 
+    if (len == 0) {
+        return 0;
+    }
+
     if (family != AF_INET) {
         return 0;
     }
@@ -18,19 +66,101 @@
     addr_in = (struct sockaddr_in *) addr;
     p = (u_char *) &addr_in->sin_addr;
 
+    if (len > INET_ADDRSTRLEN) {
+        len = INET_ADDRSTRLEN;
+    }
+
+    n = ngx_sprint_uchar(text, p[0], len);
+
+    i = 1;
+
+    do {
+        if (len == n) {
+            text[n - 1] = '\0';
+            return n;
+        }
+
+        text[n++] = '.';
+
+        if (len == n) {
+            text[n - 1] = '\0';
+            return n;
+        }
+
+        n += ngx_sprint_uchar(&text[n], p[i++], len - n);
+
+    } while (i < 4);
+
+    if (len == n) {
+        text[n] = '\0';
+        return n;
+    }
+
+    text[n] = '\0';
+
+    return n;
+
+#if 0
     return ngx_snprintf((char *) text,
                         len > INET_ADDRSTRLEN ? INET_ADDRSTRLEN : len,
                         "%u.%u.%u.%u", p[0], p[1], p[2], p[3]);
+#endif
 }
 
 
-size_t ngx_inet_ntop(int family, u_char *addr, u_char *text, size_t len)
+size_t ngx_inet_ntop(int family, void *addr, u_char *text, size_t len)
 {
+    u_char      *p;
+    size_t       n;
+    ngx_uint_t   i;
+
+    if (len == 0) {
+        return 0;
+    }
+
     if (family != AF_INET) {
         return 0;
     }
 
+    p = (u_char *) addr;
+
+    if (len > INET_ADDRSTRLEN) {
+        len = INET_ADDRSTRLEN;
+    }
+
+    n = ngx_sprint_uchar(text, p[0], len);
+
+    i = 1;
+
+    do {
+        if (len == n) {
+            text[n - 1] = '\0';
+            return n;
+        }
+
+        text[n++] = '.';
+
+        if (len == n) {
+            text[n - 1] = '\0';
+            return n;
+        }
+
+        n += ngx_sprint_uchar(&text[n], p[i++], len - n);
+
+    } while (i < 4);
+
+    if (len == n) {
+        text[n] = '\0';
+        return n;
+    }
+
+    text[n] = '\0';
+
+    return n;
+
+#if 0
     return ngx_snprintf((char *) text,
                         len > INET_ADDRSTRLEN ? INET_ADDRSTRLEN : len,
-                        "%u.%u.%u.%u", addr[0], addr[1], addr[2], addr[3]);
+                        "%u.%u.%u.%u", p[0], p[1], p[2], p[3]);
+#endif
 }
diff --git a/src/core/ngx_inet.h b/src/core/ngx_inet.h
index f5f5e0d..074d43c 100644
--- a/src/core/ngx_inet.h
+++ b/src/core/ngx_inet.h
@@ -4,7 +4,7 @@
 
 size_t ngx_sock_ntop(int family, struct sockaddr *addr, u_char *text,
                      size_t len);
-size_t ngx_inet_ntop(int family, u_char *addr, u_char *text, size_t len);
+size_t ngx_inet_ntop(int family, void *addr, u_char *text, size_t len);
 
 
 #endif /* _NGX_INET_H_INCLUDED_ */
diff --git a/src/core/ngx_output_chain.c b/src/core/ngx_output_chain.c
index 10326bc..55c4a50 100644
--- a/src/core/ngx_output_chain.c
+++ b/src/core/ngx_output_chain.c
@@ -265,8 +265,14 @@
         ctx->last = &cl->next;
     }
 
+    ngx_log_debug1(NGX_LOG_DEBUG_CORE, ctx->connection->log, 0,
+                   "WRITER0: %X", ctx->out);
+
     ctx->out = ngx_write_chain(ctx->connection, ctx->out);
 
+    ngx_log_debug1(NGX_LOG_DEBUG_CORE, ctx->connection->log, 0,
+                   "WRITER1: %X", ctx->out);
+
     if (ctx->out == NGX_CHAIN_ERROR) {
         return NGX_ERROR;
     }
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c
index 6bc238e..586f560 100644
--- a/src/event/ngx_event_connect.c
+++ b/src/event/ngx_event_connect.c
@@ -207,8 +207,8 @@
     addr.sin_port = (u_short) peer->port;
     addr.sin_addr.s_addr = peer->addr;
 
-    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, pc->log, 0,
-                   "connect to %s", peer->addr_port_text.data);
+    ngx_log_debug2(NGX_LOG_DEBUG_EVENT, pc->log, 0,
+                   "connect to %s, #%d", peer->addr_port_text.data, c->number);
 
     rc = connect(s, (struct sockaddr *) &addr, sizeof(struct sockaddr_in));
 
diff --git a/src/http/modules/proxy/ngx_http_proxy_handler.c b/src/http/modules/proxy/ngx_http_proxy_handler.c
index d36867d..61fea1c 100644
--- a/src/http/modules/proxy/ngx_http_proxy_handler.c
+++ b/src/http/modules/proxy/ngx_http_proxy_handler.c
@@ -984,7 +984,7 @@
                           NGX_CONF_ERROR);
 
             len = ngx_inet_ntop(AF_INET,
-                                (u_char *) &lcf->peers->peers[i].addr,
+                                &lcf->peers->peers[i].addr,
                                 lcf->peers->peers[i].addr_port_text.data,
                                 len);
 
diff --git a/src/http/modules/proxy/ngx_http_proxy_upstream.c b/src/http/modules/proxy/ngx_http_proxy_upstream.c
index 7704cb1..a4b6fda 100644
--- a/src/http/modules/proxy/ngx_http_proxy_upstream.c
+++ b/src/http/modules/proxy/ngx_http_proxy_upstream.c
@@ -303,8 +303,8 @@
 
     ngx_chain_t               *cl;
     ngx_http_request_t        *r;
-    ngx_output_chain_ctx_t    *octx;
-    ngx_chain_writer_ctx_t    *wctx;
+    ngx_output_chain_ctx_t    *output;
+    ngx_chain_writer_ctx_t    *writer;
     ngx_http_proxy_log_ctx_t  *lctx;
 
     r = p->request;
@@ -359,27 +359,27 @@
     r->connection->log->handler = ngx_http_proxy_log_error;
     p->action = "connecting to upstream";
 
-    if (!(octx = ngx_pcalloc(r->pool, sizeof(ngx_output_chain_ctx_t)))) {
+    if (!(output = ngx_pcalloc(r->pool, sizeof(ngx_output_chain_ctx_t)))) {
         ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
         return;
     }
 
-    p->upstream->output_chain_ctx = octx;
+    p->upstream->output_chain_ctx = output;
 
-    octx->sendfile = r->sendfile;
-    octx->pool = r->pool;
-    octx->bufs.num = 1;
-    octx->tag = (ngx_hunk_tag_t) &ngx_http_proxy_module;
-    octx->output_filter = (ngx_output_chain_filter_pt) ngx_chain_writer;
+    output->sendfile = r->sendfile;
+    output->pool = r->pool;
+    output->bufs.num = 1;
+    output->tag = (ngx_hunk_tag_t) &ngx_http_proxy_module;
+    output->output_filter = (ngx_output_chain_filter_pt) ngx_chain_writer;
 
-    if (!(wctx = ngx_palloc(r->pool, sizeof(ngx_chain_writer_ctx_t)))) {
+    if (!(writer = ngx_palloc(r->pool, sizeof(ngx_chain_writer_ctx_t)))) {
         ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
         return;
     }
 
-    octx->output_ctx = wctx;
+    output->output_ctx = writer;
 
-    wctx->pool = r->pool;
+    writer->pool = r->pool;
 
     if (p->lcf->busy_lock && !p->busy_locked) {
         ngx_http_proxy_upstream_busy_lock(p);
@@ -392,9 +392,9 @@
 static void ngx_http_proxy_reinit_upstream(ngx_http_proxy_ctx_t *p)
 {
     ngx_chain_t             *cl;
-    ngx_output_chain_ctx_t  *octx;
+    ngx_output_chain_ctx_t  *output;
 
-    octx = p->upstream->output_chain_ctx;
+    output = p->upstream->output_chain_ctx;
 
     /* reinit the request chain */
 
@@ -404,10 +404,10 @@
 
     /* reinit ngx_output_chain() context */
 
-    octx->hunk = NULL;
-    octx->in = NULL;
-    octx->free = NULL;
-    octx->busy = NULL;
+    output->hunk = NULL;
+    output->in = NULL;
+    output->free = NULL;
+    output->busy = NULL;
 
     /* reinit r->header_in buffer */
 
@@ -487,7 +487,7 @@
     int                      rc;
     ngx_connection_t        *c;
     ngx_http_request_t      *r;
-    ngx_output_chain_ctx_t  *octx;
+    ngx_output_chain_ctx_t  *output;
 
     p->action = "connecting to upstream";
 
@@ -517,7 +517,7 @@
     c->pool = r->pool;
     c->read->log = c->write->log = c->log = r->connection->log;
 
-    octx = p->upstream->output_chain_ctx;
+    output = p->upstream->output_chain_ctx;
 
     if (p->upstream->peer.tries > 1 && p->request_sent) {
         ngx_http_proxy_reinit_upstream(p);
@@ -526,14 +526,14 @@
     /* init or reinit ngx_output_chain() context */
 
     if (r->request_body_hunk) {
-        if (!(octx->free = ngx_alloc_chain_link(r->pool))) {
+        if (!(output->free = ngx_alloc_chain_link(r->pool))) {
             ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
             return;
         }
 
-        octx->free->hunk = r->request_body_hunk;
-        octx->free->next = NULL;
-        octx->hunks = 1;
+        output->free->hunk = r->request_body_hunk;
+        output->free->next = NULL;
+        output->hunks = 1;
 
         r->request_body_hunk->pos = r->request_body_hunk->start;
         r->request_body_hunk->last = r->request_body_hunk->start;
@@ -565,7 +565,7 @@
 {
     int                      rc;
     ngx_connection_t        *c;
-    ngx_chain_writer_ctx_t  *wctx;
+    ngx_chain_writer_ctx_t  *writer;
 
     c = p->upstream->peer.connection;
 
@@ -586,10 +586,10 @@
 
     p->action = "sending request to upstream";
 
-    wctx = p->upstream->output_chain_ctx->output_ctx;
-    wctx->out = NULL;
-    wctx->last = &wctx->out;
-    wctx->connection = c;
+    writer = p->upstream->output_chain_ctx->output_ctx;
+    writer->out = NULL;
+    writer->last = &writer->out;
+    writer->connection = c;
 
     rc = ngx_output_chain(p->upstream->output_chain_ctx,
                           p->request_sent ? NULL : p->request->request_hunks);
diff --git a/src/http/ngx_http.c b/src/http/ngx_http.c
index 9d53d88..4ddca78 100644
--- a/src/http/ngx_http.c
+++ b/src/http/ngx_http.c
@@ -496,8 +496,7 @@
             ls->addr_text.len =
                         ngx_snprintf((char *) ls->addr_text.data
                                      + ngx_inet_ntop(AF_INET,
-                                                     (u_char *)
-                                                               &in_addr[a].addr,
+                                                     &in_addr[a].addr,
                                                      ls->addr_text.data,
                                                      INET_ADDRSTRLEN),
                                      6, ":%d", in_port[p].port);
@@ -597,7 +596,7 @@
         in_addr = in_port[p].addrs.elts;
         for (a = 0; a < in_port[p].addrs.nelts; a++) {
             u_char ip[20];
-            ngx_inet_ntop(AF_INET, (u_char *) &in_addr[a].addr, ip, 20);
+            ngx_inet_ntop(AF_INET, &in_addr[a].addr, ip, 20);
             ngx_log_debug2(NGX_LOG_DEBUG_HTTP, cf->log, 0,
                            "%s %08x", ip, in_addr[a].core_srv_conf);
             s_name = in_addr[a].names.elts;
diff --git a/src/http/ngx_http_parse.c b/src/http/ngx_http_parse.c
index c860245..e1304e8 100644
--- a/src/http/ngx_http_parse.c
+++ b/src/http/ngx_http_parse.c
@@ -458,7 +458,7 @@
                 state = sw_name;
                 r->header_name_start = p - 1;
 
-                c = (char) (ch | 0x20);
+                c = (u_char) (ch | 0x20);
                 if (c >= 'a' && c <= 'z') {
                     break;
                 }
@@ -778,15 +778,15 @@
 
         case sw_quoted:
             if (ch >= '0' && ch <= '9') {
-                decoded = (char) (ch - '0');
+                decoded = (u_char) (ch - '0');
                 state = sw_quoted_second;
                 ch = *p++;
                 break;
             }
 
-            c = (char) (ch | 0x20);
+            c = (u_char) (ch | 0x20);
             if (c >= 'a' && c <= 'f') {
-                decoded = (char) (c - 'a' + 10);
+                decoded = (u_char) (c - 'a' + 10);
                 state = sw_quoted_second;
                 ch = *p++;
                 break;
@@ -796,7 +796,7 @@
 
         case sw_quoted_second:
             if (ch >= '0' && ch <= '9') {
-                ch = (char) ((decoded << 4) + ch - '0');
+                ch = (u_char) ((decoded << 4) + ch - '0');
                 if (ch == '%') {
                     state = sw_usual;
                     *u++ = ch;
@@ -807,9 +807,9 @@
                 break;
             }
 
-            c = (char) (ch | 0x20);
+            c = (u_char) (ch | 0x20);
             if (c >= 'a' && c <= 'f') {
-                ch = (char) ((decoded << 4) + c - 'a' + 10);
+                ch = (u_char) ((decoded << 4) + c - 'a' + 10);
                 if (ch == '%') {
                     state = sw_usual;
                     *u++ = ch;
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index 4113279..b69e790 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -64,6 +64,7 @@
     c->addr_text.len = ngx_sock_ntop(c->listening->family, c->sockaddr,
                                      c->addr_text.data,
                                      c->listening->addr_text_max_len);
+
     if (c->addr_text.len == 0) {
         ngx_http_close_connection(c);
         return;
diff --git a/src/os/unix/ngx_errno.h b/src/os/unix/ngx_errno.h
index cbfc98b..e7028bb 100644
--- a/src/os/unix/ngx_errno.h
+++ b/src/os/unix/ngx_errno.h
@@ -43,7 +43,7 @@
 #else
 
 #define ngx_strerror_r(err, errstr, size)  \
-             ngx_cpystrn(errstr, strerror(err), size) - (errstr)
+             (char *) ngx_cpystrn(errstr, strerror(err), size) - (errstr)
 
 #endif
 
