diff --git a/auto/configure b/auto/configure
index 4966a7c..6d3fc52 100755
--- a/auto/configure
+++ b/auto/configure
@@ -6,7 +6,7 @@
 . auto/os/conf
 
 . auto/cc
-. auto/lib/lib
+. auto/lib/conf
 . auto/make
 . auto/lib/make
 
@@ -15,3 +15,5 @@
 if [ "$PLATFORM" != win32 ]; then
     . auto/unix
 fi
+
+. auto/summary
diff --git a/auto/fmt/fmt b/auto/fmt/fmt
index ebfbd53..13b9bd3 100644
--- a/auto/fmt/fmt
+++ b/auto/fmt/fmt
@@ -1,59 +1,77 @@
 
-echo "checking for $NGX_TYPE printf() format"
+echo -n "checking for $ngx_type printf() format ..."
+echo >> $NGX_ERR
+echo "checking for $ngx_type printf() format" >> $NGX_ERR
 
-NGX_FMT=NO
+ngx_fmt=no
+comma=
 
-for FMT in $NGX_FORMATS
+for fmt in $ngx_formats
 do
-    echo "#include <stdio.h>" > autotest.c
-    echo "#include <sys/types.h>" >> autotest.c
-    echo "#include <sys/time.h>" >> autotest.c
-    echo "#include <sys/resource.h>" >> autotest.c
-    echo "$NGX_INTTYPES_H" >> autotest.c
-    echo "$NGX_AUTO_CONFIG" >> autotest.c
-    echo "int main() {" >> autotest.c
-    echo "printf(\"${FMT}\", ($NGX_TYPE) $NGX_MAX_SIZE);" >> autotest.c
-    echo "return 0; }" >> autotest.c
 
-    eval "$CC_WARN $CC_TEST_FLAGS -o autotest autotest.c > $NGX_ERR 2>&1"
+    cat << END > $NGX_AUTOTEST.c
 
-    MAX_SIZE=`echo $NGX_MAX_SIZE | sed -e "s/L*\$//"`
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+$NGX_INTTYPES_H
+$NGX_AUTO_CONFIG
 
-    if [ -x ./autotest ]; then
-        if [ "`./autotest`" = $MAX_SIZE ]; then
-            if [ $NGX_FMT_COLLECT = YES ]; then
-                echo " + \"${FMT}\" is appropriate"
+int main() {
+    printf("$fmt", ($ngx_type) $ngx_max_size);
+    return 0;
+}
+
+END
+
+    eval "$CC_WARN $CC_TEST_FLAGS -o $NGX_AUTOTEST $NGX_AUTOTEST.c \
+          >> $NGX_ERR 2>&1"
+
+    max_size=`echo $ngx_max_size | sed -e "s/L*\$//"`
+
+    if [ -x $NGX_AUTOTEST ]; then
+        if [ "`$NGX_AUTOTEST`" = $max_size ]; then
+            if [ $ngx_fmt_collect = yes ]; then
+                echo -n "$comma \"${fmt}\" is appropriate"
             else
-                echo " + \"${FMT}\" used"
+                echo -n "$comma \"${fmt}\" used"
             fi
-            NGX_FMT=$FMT
+            ngx_fmt=$fmt
         fi
     fi
 
-    rm autotest*
+    rm $NGX_AUTOTEST*
 
-    if [ $NGX_FMT != NO ]; then
-        if [ $NGX_FMT_COLLECT = YES ]; then
-            eval "NGX_${NGX_BYTES}_FMT=\"\${NGX_${NGX_BYTES}_FMT} \$NGX_FMT\""
+    if [ $ngx_fmt != no ]; then
+        if [ $ngx_fmt_collect = yes ]; then
+            eval "ngx_${ngx_bytes}_fmt=\"\${ngx_${ngx_bytes}_fmt} \$ngx_fmt\""
+            comma=","
             continue
         else
             break
         fi
     fi
 
-    echo " + \"${FMT}\" is not appropriate"
+    echo -n "$comma \"${fmt}\" is not appropriate"
+    comma=","
 done
 
+echo
 
-if [ $NGX_FMT = NO ]; then
-    echo "$0: error: printf() $NGX_TYPE format not found"
+if [ $ngx_fmt = no ]; then
+    echo "$0: error: printf() $ngx_type format not found"
     exit 1
 fi
 
 
-if [ $NGX_FMT_COLLECT = NO ]; then
-    echo "#ifndef $NGX_FMT_NAME"                 >> $NGX_AUTO_CONFIG_H
-    echo "#define $NGX_FMT_NAME  \"$NGX_FMT\""   >> $NGX_AUTO_CONFIG_H
-    echo "#endif"                                >> $NGX_AUTO_CONFIG_H
-    echo                                         >> $NGX_AUTO_CONFIG_H
+if [ $ngx_fmt_collect = no ]; then
+    cat << END >> $NGX_AUTO_CONFIG_H
+
+#ifndef $ngx_fmt_name
+#define $ngx_fmt_name  "$ngx_fmt"
+#endif
+
+END
+
 fi
diff --git a/auto/fmt/xfmt b/auto/fmt/xfmt
index 0256c5c..31f4d71 100644
--- a/auto/fmt/xfmt
+++ b/auto/fmt/xfmt
@@ -1,6 +1,6 @@
 
-echo "#ifndef $NGX_FMT_NAME"                 >> $NGX_AUTO_CONFIG_H
-echo "#define $NGX_FMT_NAME  \"$NGX_FMT\"" | sed -e 's/d"$/x"/' \
+echo "#ifndef $ngx_fmt_name"                 >> $NGX_AUTO_CONFIG_H
+echo "#define $ngx_fmt_name  \"$ngx_fmt\"" | sed -e 's/d"$/x"/' \
                                              >> $NGX_AUTO_CONFIG_H
 echo "#endif"                                >> $NGX_AUTO_CONFIG_H
 echo                                         >> $NGX_AUTO_CONFIG_H
diff --git a/auto/func b/auto/func
index 5a291d8..6035ef7 100644
--- a/auto/func
+++ b/auto/func
@@ -1,28 +1,42 @@
 
-echo "checking for $NGX_FUNC"
+echo -n "checking for $ngx_func ..."
+echo >> $NGX_ERR
+echo "checking for $ngx_func" >> $NGX_ERR
 
-NGX_FOUND=NO
+ngx_found=no
 
-func=`echo $NGX_FUNC | sed -e 's/()$//' | tr '[a-z]' '[A-Z]'`
+func=`echo $ngx_func | sed -e 's/()$//' | tr '[a-z]' '[A-Z]'`
 
-echo "$NGX_UNISTD_H" > autotest.c
-echo "$NGX_FUNC_INC" >> autotest.c
-echo "int main() { $NGX_FUNC_TEST; return 0; }" >> autotest.c
+cat << END > $NGX_AUTOTEST.c
 
-eval "$CC $CC_TEST_FLAGS -o autotest autotest.c $NGX_FUNC_LIBS > $NGX_ERR 2>&1"
+$NGX_UNISTD_H
+$ngx_func_inc
 
-if [ -x autotest ]; then
-    echo " + $NGX_FUNC found"
+int main() {
+    $ngx_func_test;
+    return 0;
+}
 
-    echo "#ifndef HAVE_$func"      >> $NGX_AUTO_CONFIG_H
-    echo "#define HAVE_$func  1"   >> $NGX_AUTO_CONFIG_H
-    echo "#endif"                  >> $NGX_AUTO_CONFIG_H
-    echo                           >> $NGX_AUTO_CONFIG_H
+END
 
-    NGX_FOUND=YES
+eval "$CC $CC_TEST_FLAGS -o $NGX_AUTOTEST $NGX_AUTOTEST.c $ngx_func_libs \
+     >> $NGX_ERR 2>&1"
+
+if [ -x $NGX_AUTOTEST ]; then
+    echo " found"
+
+    cat << END >> $NGX_AUTO_CONFIG_H
+
+#ifndef HAVE_$func
+#define HAVE_$func  1
+#endif
+
+END
+
+    ngx_found=yes
 
 else
-    echo " + $NGX_FUNC not found"
+    echo " not found"
 fi
 
-rm autotest*
+rm $NGX_AUTOTEST*
diff --git a/auto/inc b/auto/inc
index 1c84eae..2f3a68e 100644
--- a/auto/inc
+++ b/auto/inc
@@ -1,28 +1,40 @@
 
-echo "checking for $NGX_INC"
+echo -n "checking for $ngx_inc ..."
+echo >> $NGX_ERR
+echo "checking for $ngx_inc" >> $NGX_ERR
 
-NGX_FOUND=NO
+ngx_found=no
 
-inc=`echo $NGX_INC | sed -e 's/\./_/' | sed -e 's/\//_/' | tr '[a-z]' '[A-Z]'`
+inc=`echo $ngx_inc | sed -e 's/\./_/' | sed -e 's/\//_/' | tr '[a-z]' '[A-Z]'`
 
-echo "#include <$NGX_INC>" > autotest.c
-echo "int main() { return 0; }" >> autotest.c
+cat << END > $NGX_AUTOTEST.c
 
-eval "${CC} -o autotest autotest.c > /dev/null 2>&1"
+#include <$ngx_inc>
 
-if [ -x autotest ]; then
-    echo " + $NGX_INC found"
+int main() {
+    return 0;
+}
 
-    echo "#ifndef HAVE_$inc"      >> $NGX_AUTO_CONFIG_H
-    echo "#define HAVE_$inc  1"   >> $NGX_AUTO_CONFIG_H
-    echo "#endif"                 >> $NGX_AUTO_CONFIG_H
-    echo                          >> $NGX_AUTO_CONFIG_H
+END
 
-    eval "NGX_$inc='#include <$NGX_INC>'"
-    NGX_FOUND=YES
+eval "${CC} -o $NGX_AUTOTEST $NGX_AUTOTEST.c >> $NGX_ERR 2>&1"
+
+if [ -x $NGX_AUTOTEST ]; then
+    echo " found"
+
+    cat << END >> $NGX_AUTO_CONFIG_H
+
+#ifndef HAVE_$inc
+#define HAVE_$inc  1
+#endif
+
+END
+
+    eval "NGX_$inc='#include <$ngx_inc>'"
+    ngx_found=yes
 
 else
-    echo " + $NGX_INC not found"
+    echo " not found"
 fi
 
-rm autotest*
+rm $NGX_AUTOTEST*
diff --git a/auto/init b/auto/init
index 962c02e..bc82034 100644
--- a/auto/init
+++ b/auto/init
@@ -4,4 +4,5 @@
 NGX_AUTO_CONFIG_H=$OBJS/ngx_auto_config.h
 NGX_MODULES_C=$OBJS/ngx_modules.c
 
-NGX_ERR=autoconf.err
+NGX_AUTOTEST=$OBJS/autotest
+NGX_ERR=$OBJS/autoconf.err
diff --git a/auto/lib/conf b/auto/lib/conf
new file mode 100644
index 0000000..b5271a2
--- /dev/null
+++ b/auto/lib/conf
@@ -0,0 +1,24 @@
+
+if [ $PCRE != NO ]; then
+
+    CORE_INCS="$CORE_INCS -I $PCRE"
+
+    if [ "$PLATFORM" = "win32" ]; then
+        CFLAGS="$CFLAGS -D PCRE_STATIC"
+        CORE_LIBS="$CORE_LIBS pcre.lib"
+        CORE_LINK="$CORE_LINK -libpath:$PCRE"
+    else 
+        CORE_DEPS="$CORE_DEPS $PCRE/.libs/libpcre.a"
+        CORE_LIBS="$CORE_LIBS -L $PCRE/.libs -lpcre"
+    fi
+fi
+
+
+if [ $USE_MD5 = YES ]; then
+    . auto/lib/md5/conf
+fi
+
+
+if [ $USE_ZLIB = YES ]; then
+    . auto/lib/zlib/conf
+fi
diff --git a/auto/lib/lib b/auto/lib/lib
deleted file mode 100644
index 8485679..0000000
--- a/auto/lib/lib
+++ /dev/null
@@ -1,48 +0,0 @@
-
-if [ $PCRE != NO ]; then
-
-    CORE_INCS="$CORE_INCS -I $PCRE"
-
-    if [ "$PLATFORM" = "win32" ]; then
-        CFLAGS="$CFLAGS -D PCRE_STATIC"
-        CORE_LIBS="$CORE_LIBS pcre.lib"
-        CORE_LINK="$CORE_LINK -libpath:$PCRE"
-    else 
-        CORE_DEPS="$CORE_DEPS $PCRE/.libs/libpcre.a"
-        CORE_LIBS="$CORE_LIBS -L $PCRE/.libs -lpcre"
-    fi
-fi
-
-
-if [ $MD5 != NO ]; then
-
-    CFLAGS="$CFLAGS -D HAVE_OPENSSL_MD5"
-    CORE_INCS="$CORE_INCS -I $MD5"
-
-    if [ "$PLATFORM" = "win32" ]; then
-        CORE_LIBS="$CORE_LIBS md5.lib"
-        CORE_LINK="$CORE_LINK -libpath:$MD5"
-    else 
-        LINK_DEPS="$LINK_DEPS $MD5/libmd5.a"
-        CORE_LIBS="$CORE_LIBS -L $MD5 -lmd5"
-    fi
-
-elif [ $MD5_LIB != NO ]; then
-    CORE_LIBS="$CORE_LIBS $MD5_LIB"
-fi
-
-
-if [ $ZLIB != NO ]; then
-    CORE_INCS="$CORE_INCS -I $ZLIB"
-
-    if [ "$PLATFORM" = "win32" ]; then
-        CORE_LIBS="$CORE_LIBS zlib.lib"
-        CORE_LINK="$CORE_LINK -libpath:$ZLIB"
-    else 
-        LINK_DEPS="$LINK_DEPS $ZLIB/libz.a"
-        CORE_LIBS="$CORE_LIBS -L $ZLIB -lz"
-    fi
-
-elif [ $ZLIB_LIB != NO ]; then
-    CORE_LIBS="$CORE_LIBS $ZLIB_LIB"
-fi
diff --git a/auto/lib/md5/conf b/auto/lib/md5/conf
new file mode 100644
index 0000000..e1755c1
--- /dev/null
+++ b/auto/lib/md5/conf
@@ -0,0 +1,67 @@
+
+if [ $MD5 != NO ]; then
+
+    if grep MD5_Init $MD5/md5.h >/dev/null; then
+        # OpenSSL md5
+        OPENSSL_MD5=YES
+        CFLAGS="$CFLAGS -D HAVE_OPENSSL_MD5"
+    else
+        # rsaref md5
+        OPENSSL_MD5=NO
+    fi
+
+    CORE_INCS="$CORE_INCS -I $MD5"
+
+    if [ "$PLATFORM" = "win32" ]; then
+        CORE_LIBS="$CORE_LIBS md5.lib"
+        CORE_LINK="$CORE_LINK -libpath:$MD5"
+    else 
+        LINK_DEPS="$LINK_DEPS $MD5/libmd5.a"
+        CORE_LIBS="$CORE_LIBS -L $MD5 -lmd5"
+    fi
+
+else
+
+ngx_lib_inc="#include <sys/types.h>
+#include <md5.h>"
+
+        # Solaris 8/9
+        ngx_lib="rsaref md5"
+        ngx_lib_test="MD5_CTX md5; MD5Init(&md5)"
+        ngx_libs=-lmd5
+        . auto/lib/test
+
+
+    if [ $ngx_found = yes ]; then
+        CORE_LIBS="$CORE_LIBS $ngx_libs"
+        MD5=YES
+        ngx_found=no
+
+    else
+        # FreeBSD
+        ngx_lib="rsaref md"
+        ngx_lib_test="MD5_CTX md5; MD5Init(&md5)"
+        ngx_libs=-lmd
+        . auto/lib/test
+    fi
+
+
+    if [ $ngx_found = yes ]; then
+        CORE_LIBS="$CORE_LIBS $ngx_libs"
+        MD5=YES
+        ngx_found=no
+
+    else
+        ngx_lib="OpenSSL md5"
+        ngx_lib_test="MD5_CTX md5; MD5_Init(&md5)"
+        ngx_libs=-lmd5
+        . auto/lib/test
+    fi
+
+
+    if [ $ngx_found = yes ]; then
+        CFLAGS="$CFLAGS -D HAVE_OPENSSL_MD5"
+        CORE_LIBS="$CORE_LIBS $ngx_libs"
+        MD5=YES
+    fi
+fi
diff --git a/auto/lib/test b/auto/lib/test
new file mode 100644
index 0000000..6d3f7e3
--- /dev/null
+++ b/auto/lib/test
@@ -0,0 +1,23 @@
+
+echo "checking for $ngx_lib library"
+echo >> $NGX_ERR
+echo "checking for $ngx_lib library" >> $NGX_ERR
+
+ngx_found=no
+
+echo "$ngx_lib_inc" > $NGX_AUTOTEST.c
+echo "int main() { $ngx_lib_test; return 0; }" >> $NGX_AUTOTEST.c
+
+eval "$CC $cc_test_flags -o $NGX_AUTOTEST $NGX_AUTOTEST.c $ngx_libs \
+     >> $NGX_ERR 2>&1"
+
+if [ -x $NGX_AUTOTEST ]; then
+    echo " + $ngx_lib found"
+
+    ngx_found=yes
+
+else
+    echo " + $ngx_lib not found"
+fi
+
+rm $NGX_AUTOTEST*
diff --git a/auto/lib/zlib/conf b/auto/lib/zlib/conf
new file mode 100644
index 0000000..b8bbade
--- /dev/null
+++ b/auto/lib/zlib/conf
@@ -0,0 +1,28 @@
+
+if [ $ZLIB != NO ]; then
+    CORE_INCS="$CORE_INCS -I $ZLIB"
+
+    if [ "$PLATFORM" = "win32" ]; then
+        CORE_LIBS="$CORE_LIBS zlib.lib"
+        CORE_LINK="$CORE_LINK -libpath:$ZLIB"
+    else
+        LINK_DEPS="$LINK_DEPS $ZLIB/libz.a"
+        CORE_LIBS="$CORE_LIBS -L $ZLIB -lz"
+    fi
+
+else
+
+    ngx_lib_inc="#include <zlib.h>"
+
+    ngx_lib="zlib"
+    ngx_lib_test="z_stream z; deflate(&z, Z_NO_FLUSH)"
+    ngx_libs=-lz
+    . auto/lib/test
+
+
+    if [ $ngx_found = yes ]; then
+        CORE_LIBS="$CORE_LIBS $ngx_libs"
+        ZLIB=YES
+    fi
+
+fi
diff --git a/auto/options b/auto/options
index 5b8ae4c..1eb45a2 100644
--- a/auto/options
+++ b/auto/options
@@ -1,5 +1,5 @@
 
-HELP=NO
+help=no
 
 CC=gcc
 OBJS=objs
@@ -11,9 +11,11 @@
 
 PCRE=NO
 
+USE_MD5=YES
 MD5=NO
 MD5_LIB=NO
 
+USE_ZLIB=YES
 ZLIB=NO
 ZLIB_LIB=NO
 
@@ -26,7 +28,7 @@
     esac
 
     case "$option" in
-        --help)                          HELP=YES                   ;;
+        --help)                          help=yes                   ;;
 
         --crossbuild=*)                  PLATFORM="$value"          ;;
 
@@ -51,7 +53,8 @@
 done
 
 
-if [ $HELP = YES ]; then
+if [ $help = yes ]; then
+    echo
     echo "  --help                        this message"
 
     echo "  --without-http_gzip_module    disable http_gzip_module"
@@ -63,6 +66,7 @@
     echo "  --with-pcre=DIR               path to PCRE library"
     echo "  --with-md5=DIR                path to md5 library"
     echo "  --with-zlib=DIR               path to zlib library"
+    echo
 
     exit 1
 fi
diff --git a/auto/sources b/auto/sources
index fa2b2df..1e8790f 100644
--- a/auto/sources
+++ b/auto/sources
@@ -88,6 +88,7 @@
 
 UNIX_SRCS="$CORE_SRCS $EVENT_SRCS \
             src/os/unix/ngx_time.c \
+            src/os/unix/ngx_errno.c \
             src/os/unix/ngx_sendv.c \
             src/os/unix/ngx_files.c \
             src/os/unix/ngx_socket.c \
diff --git a/auto/summary b/auto/summary
new file mode 100644
index 0000000..19afd04
--- /dev/null
+++ b/auto/summary
@@ -0,0 +1,17 @@
+
+echo
+echo "Configuration summary"
+
+case $MD5 in
+    YES) echo " + using system md5 library" ;;
+    NO)  echo " + md5 library is not found" ;;
+    *)   echo " + using md5 library: $MD5" ;;
+esac
+
+case $ZLIB in
+    YES) echo " + using system zlib library" ;;
+    NO)  echo " + zlib library is not found" ;;
+    *)   echo " + using zlib library: $ZLIB" ;;
+esac
+
+echo
diff --git a/auto/types/sizeof b/auto/types/sizeof
index 2e9e9b2..d015aea 100644
--- a/auto/types/sizeof
+++ b/auto/types/sizeof
@@ -1,44 +1,52 @@
 
-echo "checking for $NGX_TYPE size"
+echo -n "checking for $ngx_type size ..."
+echo >> $NGX_ERR
+echo "checking for $ngx_type size" >> $NGX_ERR
 
-NGX_BYTES=
+ngx_bytes=
 
-echo "#include <sys/types.h>" > autotest.c
-echo "#include <sys/time.h>" >> autotest.c
-echo "#include <sys/resource.h>" >> autotest.c
-echo "$NGX_INTTYPES_H" >> autotest.c
-echo "$NGX_AUTO_CONFIG" >> autotest.c
-echo "int main() {" >> autotest.c
-echo "printf(\"%d\", sizeof($NGX_TYPE));" >> autotest.c
-echo "return 0; }" >> autotest.c
+cat << END > $NGX_AUTOTEST.c
 
-eval "$CC $CC_TEST_FLAGS -o autotest autotest.c > /dev/null 2>&1"
+#include <sys/time.h>
+#include <sys/resource.h>
+$NGX_INTTYPES_H
+$NGX_AUTO_CONFIG
 
-if [ -x ./autotest ]; then
-    NGX_BYTES=`./autotest`
-    echo " + $NGX_TYPE is $NGX_BYTES bytes"
+int main() {
+    printf("%d", sizeof($ngx_type));
+    return 0;
+}
+
+END
+
+eval "$CC $CC_TEST_FLAGS -o $NGX_AUTOTEST $NGX_AUTOTEST.c >> $NGX_ERR 2>&1"
+
+if [ -x $NGX_AUTOTEST ]; then
+    ngx_bytes=`$NGX_AUTOTEST`
+    echo " $ngx_bytes bytes"
 fi
 
-rm autotest*
+rm $NGX_AUTOTEST*
 
-case $NGX_BYTES in
+case $ngx_bytes in
     4)
-        if [ "$NGX_TYPE"="long" ]; then
-            NGX_MAX_SIZE=2147483647L
+        if [ "$ngx_type"="long" ]; then
+            ngx_max_size=2147483647L
         else
-            NGX_MAX_SIZE=2147483647
+            ngx_max_size=2147483647
         fi
     ;;
 
     8)
-        if [ "$NGX_TYPE"="long long" ]; then
-            NGX_MAX_SIZE=9223372036854775807LL
+        if [ "$ngx_type"="long long" ]; then
+            ngx_max_size=9223372036854775807LL
         else
-            NGX_MAX_SIZE=9223372036854775807L
+            ngx_max_size=9223372036854775807L
         fi
     ;;
 
     *)
-        echo "$0: error: can not detect $NGX_TYPE size"
+        echo
+        echo "$0: error: can not detect $ngx_type size"
         exit 1
 esac
diff --git a/auto/types/typedef b/auto/types/typedef
index c3155c4..d093e01 100644
--- a/auto/types/typedef
+++ b/auto/types/typedef
@@ -1,45 +1,56 @@
 
-echo "checking for $NGX_TYPE"
+echo -n "checking for $ngx_type ..."
+echo >> $NGX_ERR
+echo "checking for $ngx_type" >> $NGX_ERR
 
-FOUND=NO
+found=no
 
-for TYPE in $NGX_TYPE $NGX_TYPES
+for type in $ngx_type $ngx_types
 do
-    echo "#include <sys/types.h>" > autotest.c
-    echo "#include <sys/socket.h>" >> autotest.c
-    echo "#include <sys/time.h>" >> autotest.c
-    echo "#include <sys/resource.h>" >> autotest.c
-    echo "#include <netinet/in.h>" >> autotest.c
-    echo "$NGX_INTTYPES_H" >> autotest.c
-    echo "int main() { $TYPE i = 0; return 0; }" >> autotest.c
 
-    eval "$CC -o autotest autotest.c > $NGX_ERR 2>&1"
+    cat << END > $NGX_AUTOTEST.c
 
-    if [ -x autotest ]; then
-        if [ $TYPE = $NGX_TYPE ]; then
-            echo " + $NGX_TYPE found"
-            FOUND=YES
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <netinet/in.h>
+$NGX_INTTYPES_H
+
+int main() {
+    $type i = 0;
+    return 0;
+}
+
+END
+
+    eval "$CC -o $NGX_AUTOTEST $NGX_AUTOTEST.c >> $NGX_ERR 2>&1"
+
+    if [ -x $NGX_AUTOTEST ]; then
+        if [ $type = $ngx_type ]; then
+            echo " found"
+            found=yes
         else
-            echo " + $TYPE used"
-            FOUND=$TYPE
+            echo ", $type used"
+            found=$type
         fi
     fi
 
-    rm autotest*
+    rm $NGX_AUTOTEST*
 
-    if [ $FOUND = NO ]; then
-        echo " + $TYPE not found"
+    if [ $found = no ]; then
+        echo -n " $type not found"
     else
         break
     fi
 done
 
-if [ $FOUND = NO ]; then
-    echo "$0: error: can not define $NGX_TYPE"
+if [ $found = no ]; then
+    echo
+    echo "$0: error: can not define $ngx_type"
     exit 1
 fi
 
-if [ $FOUND != YES ]; then
-    echo "typedef $FOUND  $NGX_TYPE;"   >> $NGX_AUTO_CONFIG_H
-    echo                                >> $NGX_AUTO_CONFIG_H
+if [ $found != yes ]; then
+    echo "typedef $found  $ngx_type;"   >> $NGX_AUTO_CONFIG_H
 fi
diff --git a/auto/types/uintptr_t b/auto/types/uintptr_t
index 7c941c0..eb375b0 100644
--- a/auto/types/uintptr_t
+++ b/auto/types/uintptr_t
@@ -1,27 +1,37 @@
 
-echo 'checking for uintptr_t'
+echo -n "checking for uintptr_t ... "
+echo >> $NGX_ERR
+echo "checking for uintptr_t" >> $NGX_ERR
 
-FOUND=NO
+found=no
 
-echo "#include <sys/types.h>" > autotest.c
-echo "$NGX_INTTYPES_H" >> autotest.c
-echo "int main() { uintptr_t i = 0; return 0; }" >> autotest.c
+cat << END > $NGX_AUTOTEST.c
 
-eval "$CC -o autotest autotest.c > /dev/null 2>&1"
+#include <sys/types.h>
+$NGX_INTTYPES_H
 
-if [ -x autotest ]; then
-    echo " + uintptr_t found"
-    FOUND=YES
+int main() {
+    uintptr_t i = 0;
+    return 0;
+}
+
+END
+
+eval "$CC -o $NGX_AUTOTEST $NGX_AUTOTEST.c >> $NGX_ERR 2>&1"
+
+if [ -x $NGX_AUTOTEST ]; then
+    echo " uintptr_t found"
+    found=yes
 else
-    echo " + uintptr_t not found"
+    echo -n " uintptr_t not found"
 fi
 
-rm autotest*
+rm $NGX_AUTOTEST*
 
 
-if [ $FOUND = NO ]; then
-    FOUND="uint`expr 8 \* $NGX_PTR_BYTES`_t"
-    echo " + $FOUND used"
-    echo "typedef $FOUND  uintptr_t;"   >> $NGX_AUTO_CONFIG_H
-    echo                                >> $NGX_AUTO_CONFIG_H
+if [ $found = no ]; then
+    found="uint`expr 8 \* $ngx_ptr_bytes`_t"
+    echo ", $found used"
+
+    echo "typedef $found  uintptr_t;"   >> $NGX_AUTO_CONFIG_H
 fi
diff --git a/auto/unix b/auto/unix
index c9e2a8e..09115f5 100755
--- a/auto/unix
+++ b/auto/unix
@@ -1,41 +1,41 @@
 
 CC_WARN=$CC
-NGX_FMT_COLLECT=YES
+ngx_fmt_collect=yes
 
 # C types
 
-NGX_TYPE="int"; . auto/types/sizeof;
-NGX_FORMATS="%d"; . auto/fmt/fmt
+ngx_type="int"; . auto/types/sizeof;
+ngx_formats="%d"; . auto/fmt/fmt
 
-NGX_TYPE="long"; . auto/types/sizeof;
-NGX_FORMATS="%ld"; . auto/fmt/fmt
+ngx_type="long"; . auto/types/sizeof;
+ngx_formats="%ld"; . auto/fmt/fmt
 
-NGX_TYPE="long long"; . auto/types/sizeof;
-NGX_FORMATS="%lld %qd"; . auto/fmt/fmt
+ngx_type="long long"; . auto/types/sizeof;
+ngx_formats="%lld %qd"; . auto/fmt/fmt
 
-NGX_TYPE="void *"; . auto/types/sizeof; NGX_PTR_BYTES=$NGX_BYTES
+ngx_type="void *"; . auto/types/sizeof; ngx_ptr_bytes=$ngx_bytes
 
 
 # headers
 
-NGX_INC="unistd.h"; . auto/inc
-NGX_INC="inttypes.h"; . auto/inc
+ngx_inc="unistd.h"; . auto/inc
+ngx_inc="inttypes.h"; . auto/inc
 
 #POSIX types
 
-NGX_AUTO_CONFIG="#include \"$NGX_AUTO_CONFIG_H\""
+NGX_AUTO_CONFIG="#include \"../$NGX_AUTO_CONFIG_H\""
 
-NGX_TYPE="uint64_t"
-NGX_TYPES="u_int64_t"; . auto/types/typedef
+ngx_type="uint64_t"
+ngx_types="u_int64_t"; . auto/types/typedef
 
-NGX_TYPE="socklen_t"
-NGX_TYPES="uint32_t"; . auto/types/typedef
+ngx_type="socklen_t"
+ngx_types="uint32_t"; . auto/types/typedef
 
-NGX_TYPE="in_addr_t"
-NGX_TYPES="uint32_t"; . auto/types/typedef
+ngx_type="in_addr_t"
+ngx_types="uint32_t"; . auto/types/typedef
 
-NGX_TYPE="rlim_t"
-NGX_TYPES="int"; . auto/types/typedef
+ngx_type="rlim_t"
+ngx_types="int"; . auto/types/typedef
 
 . auto/types/uintptr_t
 
@@ -43,47 +43,53 @@
 # printf() formats
 
 CC_WARN=$CC_STRONG
-NGX_FMT_COLLECT=NO
+ngx_fmt_collect=no
 
-NGX_FMT_NAME=OFF_T_FMT
-NGX_TYPE="off_t"; . auto/types/sizeof
-eval NGX_FORMATS=\${NGX_${NGX_BYTES}_FMT}; . auto/fmt/fmt
+ngx_fmt_name=OFF_T_FMT; ngx_type="off_t"; . auto/types/sizeof
+eval ngx_formats=\${ngx_${ngx_bytes}_fmt}; . auto/fmt/fmt
 
-NGX_FMT_NAME=TIME_T_FMT
-NGX_TYPE="time_t"; . auto/types/sizeof
-eval NGX_FORMATS=\${NGX_${NGX_BYTES}_FMT}; . auto/fmt/fmt
+ngx_fmt_name=TIME_T_FMT; ngx_type="time_t"; . auto/types/sizeof
+eval ngx_formats=\${ngx_${ngx_bytes}_fmt}; . auto/fmt/fmt
 
-NGX_FMT_NAME=SIZE_T_FMT
-NGX_TYPE="size_t"; . auto/types/sizeof
-eval NGX_FORMATS=\${NGX_${NGX_BYTES}_FMT}; . auto/fmt/fmt
+ngx_fmt_name=SIZE_T_FMT; ngx_type="size_t"; . auto/types/sizeof
+eval ngx_formats=\${ngx_${ngx_bytes}_fmt}; . auto/fmt/fmt
 
-NGX_FMT_NAME=SIZE_T_X_FMT; . auto/fmt/xfmt
+ngx_fmt_name=SIZE_T_X_FMT; . auto/fmt/xfmt
 
-NGX_FMT_NAME=PID_T_FMT
-NGX_TYPE="pid_t"; . auto/types/sizeof
-eval NGX_FORMATS=\${NGX_${NGX_BYTES}_FMT}; . auto/fmt/fmt
+ngx_fmt_name=PID_T_FMT; ngx_type="pid_t"; . auto/types/sizeof
+eval ngx_formats=\${ngx_${ngx_bytes}_fmt}; . auto/fmt/fmt
 
-NGX_FMT_NAME=RLIM_T_FMT
-NGX_TYPE="rlim_t"; . auto/types/sizeof
-eval NGX_FORMATS=\${NGX_${NGX_BYTES}_FMT}; . auto/fmt/fmt
+ngx_fmt_name=RLIM_T_FMT; ngx_type="rlim_t"; . auto/types/sizeof
+eval ngx_formats=\${ngx_${ngx_bytes}_fmt}; . auto/fmt/fmt
 
 
 # syscalls and libc calls
 
-NGX_FUNC_INC=
-NGX_FUNC_TEST="int fd = 0; char buf[1]; size_t size = 1;
-               ssize_t n; off_t offset = 0;
-               n = pread(fd, buf, size, offset)"
-NGX_FUNC="pread()"; . auto/func
+ngx_func="pread()"
+ngx_func_inc=
+ngx_func_test="
+char    buf[1];
+ssize_t n;
+n = pread(0, buf, 1, 0)"
+. auto/func
 
 
-NGX_FUNC_INC=
-NGX_FUNC_TEST="int fd = 1; char buf[1]; size_t size = 1;
-               ssize_t n; off_t offset = 0;
-               n = pwrite(fd, buf, size, offset)"
-NGX_FUNC="pwrite()"; . auto/func
+ngx_func="pwrite()"
+ngx_func_inc=
+ngx_func_test="
+char    buf[1];
+ssize_t n;
+n = pwrite(1, buf, 1, 0)"
+. auto/func
 
 
-NGX_FUNC_INC="#include <time.h>"
-NGX_FUNC_TEST="struct tm t; time_t c=0; localtime_r(&c, &t)"
-NGX_FUNC="localtime_r()"; . auto/func
+ngx_func="strerror_r()"
+ngx_func_inc="#include <string.h>"
+ngx_func_test="char buf[20]; strerror_r(1, buf, 20)"
+. auto/func
+
+
+ngx_func="localtime_r()"
+ngx_func_inc="#include <time.h>"
+ngx_func_test="struct tm t; time_t c=0; localtime_r(&c, &t)"
+. auto/func
diff --git a/src/core/nginx.c b/src/core/nginx.c
index e02866e..36a8b4b 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -16,7 +16,8 @@
 
 
 typedef struct {
-     int   daemon;
+     int        daemon;
+     ngx_str_t  pid;
 } ngx_core_conf_t;
 
 
@@ -61,6 +62,7 @@
 u_int ngx_connection_counter;
 
 
+int done;
 int restart;
 int rotate;
 
@@ -73,6 +75,9 @@
     ngx_cycle_t      *cycle;
     ngx_open_file_t  *file;
 #if !(WIN32)
+    size_t            len;
+    char              pid[/* STUB */ 10];
+    ngx_file_t        pidfile;
     ngx_core_conf_t  *ccf;
 #endif
 
@@ -119,6 +124,33 @@
         return 1;
     }
 
+    if (ccf->pid.len == 0) {
+        ccf->pid.len = sizeof(NGINX_PID) - 1;
+        ccf->pid.data = NGINX_PID;
+    }
+
+    len = ngx_snprintf(pid, /* STUB */ 10, PID_T_FMT, ngx_getpid());
+    ngx_memzero(&pidfile, sizeof(ngx_file_t));
+    pidfile.name = ccf->pid;
+
+    pidfile.fd = ngx_open_file(pidfile.name.data, NGX_FILE_RDWR,
+                               NGX_FILE_CREATE_OR_OPEN);
+
+    if (pidfile.fd == NGX_INVALID_FILE) {
+        ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
+                      ngx_open_file_n " \"%s\" failed", pidfile.name.data);
+        return 1;
+    }
+
+    if (ngx_write_file(&pidfile, pid, len, 0) == NGX_ERROR) {
+        return 1;
+    }
+
+    if (ngx_close_file(pidfile.fd) == NGX_FILE_ERROR) {
+        ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+                      ngx_close_file_n " \"%s\" failed", pidfile.name.data);
+    }
+
 #endif
 
     /* life cycle */
@@ -162,8 +194,20 @@
 
                 ngx_process_events(cycle->log);
 
+                if (done) {
+                    if (ngx_delete_file(pidfile.name.data) == NGX_FILE_ERROR) {
+                        ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+                                      ngx_delete_file_n " \"%s\" failed",
+                                      pidfile.name.data);
+                    }
+
+                    ngx_log_error(NGX_LOG_INFO,
+                                  cycle->log, 0, "exiting");
+                    exit(0);
+                }
+
                 if (rotate) {
-                    ngx_log_debug(cycle->log, "rotate");
+                    ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "rotating logs");
 
                     file = cycle->open_files.elts;
                     for (i = 0; i < cycle->open_files.nelts; i++) {
@@ -313,6 +357,10 @@
         ngx_destroy_pool(pool);
         return NULL;
     }
+    /* set by pcalloc()
+     *
+     * ccf->pid = NULL;
+     */
     ccf->daemon = -1;
     ((void **)(cycle->conf_ctx))[ngx_core_module.index] = ccf;
 
diff --git a/src/core/nginx.h b/src/core/nginx.h
index 6a9fd49..38942aa 100644
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -4,6 +4,7 @@
 
 #define  NGINX_VER   "nginx/0.0.1"
 #define  NGINX_CONF  "nginx.conf"
+#define  NGINX_PID   "nginx.pid"
 
 
 extern int           ngx_max_module;
diff --git a/src/core/ngx_config.h b/src/core/ngx_config.h
index b943960..bf393f6 100644
--- a/src/core/ngx_config.h
+++ b/src/core/ngx_config.h
@@ -39,7 +39,7 @@
 typedef u_int  ngx_uint_t;
 
 /* STUB: autoconf */
-#define PTR_FMT  "%X"
+#define PTR_FMT  "%08X"
 
 #include <ngx_auto_config.h>
 
@@ -60,6 +60,8 @@
 /* TODO: #ifndef */
 #define NGX_RESTART_SIGNAL    HUP
 #define NGX_ROTATE_SIGNAL     USR1
+#define NGX_SHUTDOWN_SIGNAL   TERM
+#define NGX_INTERRUPT_SIGNAL  INT
 
 #endif
 
diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c
index fede0a0..98b71c8 100644
--- a/src/core/ngx_log.c
+++ b/src/core/ngx_log.c
@@ -82,13 +82,6 @@
 
     len = ngx_cached_err_log_time.len;
 
-#if 0
-    ngx_localtime(&tm);
-    len = ngx_snprintf(errstr, sizeof(errstr), "%4d/%02d/%02d %02d:%02d:%02d",
-                       tm.ngx_tm_year, tm.ngx_tm_mon, tm.ngx_tm_mday,
-                       tm.ngx_tm_hour, tm.ngx_tm_min, tm.ngx_tm_sec);
-#endif
-
     len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
                         " [%s] ", err_levels[level]);
 
diff --git a/src/core/ngx_log.h b/src/core/ngx_log.h
index 71da9d5..c3771d7 100644
--- a/src/core/ngx_log.h
+++ b/src/core/ngx_log.h
@@ -190,6 +190,24 @@
 #define ngx_log_debug1(level, log, err, fmt, arg1)
 #endif
 
+#if (NGX_DEBUG)
+#define ngx_log_debug2(level, log, err, fmt, arg1, arg2) \
+    if (log->log_level & level) \
+        ngx_log_error_core(NGX_LOG_DEBUG, log, err, fmt, arg1, arg2)
+#else
+#define ngx_log_debug2(level, log, err, fmt, arg1, arg2)
+#endif
+
+#if (NGX_DEBUG)
+#define ngx_log_debug6(level, log, err, fmt, \
+                       arg1, arg2, arg3, arg4, arg5, arg6) \
+    if (log->log_level & level) \
+        ngx_log_error_core(NGX_LOG_DEBUG, log, err, fmt, \
+                           arg1, arg2, arg3, arg4, arg5, arg6)
+#else
+#define ngx_log_debug6(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6)
+#endif
+
 /*********************************/
 
 #else /* NO VARIADIC MACROS */
@@ -209,6 +227,24 @@
 #else
 #define ngx_log_debug1(level, log, err, fmt, arg1)
 #endif
+
+#if (NGX_DEBUG)
+#define ngx_log_debug2(level, log, err, fmt, arg1, arg2) \
+    if (log->log_level & level) \
+        ngx_log_debug_core(log, err, fmt, arg1, arg2)
+#else
+#define ngx_log_debug2(level, log, err, fmt, arg1, arg2)
+#endif
+
+#if (NGX_DEBUG)
+#define ngx_log_debug6(level, log, err, fmt, \
+                       arg1, arg2, arg3, arg4, arg5, arg6) \
+    if (log->log_level & level) \
+        ngx_log_debug_core(log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6)
+#else
+#define ngx_log_debug6(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6)
+#endif
+
 #endif
 
 
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index d36160a..0ddf4f6 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -419,23 +419,17 @@
 
     for (i = 0; i < events; i++) {
 
-#if (NGX_DEBUG_EVENT)
-        if (event_list[i].ident > 0x8000000
-            && event_list[i].ident != (unsigned) -1)
-        {
-            ngx_log_debug(log,
-                          "kevent: %08x: ft:%d fl:%08x ff:%08x d:%d ud:%08x" _
-                          event_list[i].ident _ event_list[i].filter _
-                          event_list[i].flags _ event_list[i].fflags _
-                          event_list[i].data _ event_list[i].udata);
-        } else {
-            ngx_log_debug(log,
-                          "kevent: %d: ft:%d fl:%08x ff:%08x d:%d ud:%08x" _
-                          event_list[i].ident _ event_list[i].filter _
-                          event_list[i].flags _ event_list[i].fflags _
-                          event_list[i].data _ event_list[i].udata);
-        }
-#endif
+        ngx_log_debug6(NGX_LOG_DEBUG_EVENT, log, 0,
+
+                       (event_list[i].ident > 0x8000000
+                        && event_list[i].ident != (unsigned) -1) ?
+                        "kevent: " PTR_FMT ": ft:%d fl:%04X ff:%08X d:%d ud:"
+                                                                     PTR_FMT:
+                        "kevent: %d: ft:%d fl:%04X ff:%08X d:%d ud:" PTR_FMT,
+
+                        event_list[i].ident, event_list[i].filter,
+                        event_list[i].flags, event_list[i].fflags,
+                        event_list[i].data, event_list[i].udata);
 
         if (event_list[i].flags & EV_ERROR) {
             ngx_log_error(NGX_LOG_ALERT, log, event_list[i].data,
@@ -453,13 +447,15 @@
             instance = (uintptr_t) ev & 1;
             ev = (ngx_event_t *) ((uintptr_t) ev & (uintptr_t) ~1);
 
-            /*
-             * it's a stale event from a file descriptor
-             * that was just closed in this iteration
-             */
-
             if (ev->active == 0 || ev->instance != instance) {
-                ngx_log_debug(log, "stale kevent");
+
+                /*
+                 * it's a stale event from a file descriptor
+                 * that was just closed in this iteration
+                 */
+
+                ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0,
+                               "kevent: stale event " PTR_FMT, ev);
                 continue;
             }
 
@@ -511,6 +507,29 @@
 }
 
 
+static void ngx_kqueue_thread_handler(ngx_event_t *ev, ngx_log_t *log)
+{
+    ngx_int_t  instance;
+
+    instance = (uintptr_t) ev & 1;
+    ev = (ngx_event_t *) ((uintptr_t) ev & (uintptr_t) ~1);
+
+    if (ev->active && ev->instance == instance) {
+        ev->event_handler(ev);
+        return;
+    }
+
+    /*
+     * it's a stale event from a file descriptor
+     * that was just closed in this iteration
+     */
+
+    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0,
+                   "kevent: stale event " PTR_FMT, ev);
+
+}
+
+
 static void *ngx_kqueue_create_conf(ngx_cycle_t *cycle)
 {
     ngx_kqueue_conf_t  *kcf;
diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c
index c0852e8..4ed9498 100644
--- a/src/event/ngx_event_timer.c
+++ b/src/event/ngx_event_timer.c
@@ -4,6 +4,12 @@
 #include <ngx_event.h>
 
 
+/*
+ * TODO: in multithreaded enviroment all timer operations must be
+ * protected by the single mutex
+ */
+
+
 ngx_rbtree_t  *ngx_event_timer_rbtree;
 ngx_rbtree_t   ngx_event_timer_sentinel;
 
@@ -39,7 +45,11 @@
 
     } else {
         return (ngx_msec_t)
+         (node->key * NGX_TIMER_RESOLUTION -
+               ngx_elapsed_msec / NGX_TIMER_RESOLUTION * NGX_TIMER_RESOLUTION);
+#if 0
                          (node->key * NGX_TIMER_RESOLUTION - ngx_elapsed_msec);
+#endif
     }
 }
 
@@ -82,281 +92,3 @@
         break;
     }
 }
-
-
-#if 0
-
-/* TODO: in multithreaded enviroment all timer operations must be
-   protected by the single mutex */
-
-
-#if 0
-static ngx_event_t  *ngx_timer_queue, ngx_temp_timer_queue;
-static int           ngx_expire_timers;
-#endif
-
-static ngx_event_t  *ngx_timer_queue;
-static ngx_msec_t   *ngx_timer_delta;
-static int           ngx_timer_cur_queue;
-static int           ngx_timer_queue_num;
-
-
-int ngx_event_timer_init(ngx_cycle_t *cycle)
-{
-    ngx_int_t          i;
-    ngx_msec_t        *new_delta;
-    ngx_event_t       *new_queue;
-    ngx_event_conf_t  *ecf;
-
-    ecf = ngx_event_get_conf(cycle->conf_ctx, ngx_event_core_module);
-
-    if (ngx_timer_queue_num < ecf->timer_queues) {
-        ngx_test_null(new_queue,
-                      ngx_alloc(ecf->timer_queues * sizeof(ngx_event_t),
-                                cycle->log),
-                      NGX_ERROR);
-
-        for (i = 0; i < ngx_timer_queue_num; i++) {
-            new_queue[i] = ngx_timer_queue[i];
-        }
-
-        if (ngx_timer_queue) {
-            ngx_free(ngx_timer_queue);
-        }
-
-        ngx_timer_queue = new_queue;
-
-        ngx_test_null(new_delta,
-                      ngx_calloc(ecf->timer_queues * sizeof(ngx_msec_t),
-                                 cycle->log),
-                      NGX_ERROR);
-
-        for (i = 0; i < ngx_timer_queue_num; i++) {
-            new_delta[i] = ngx_timer_delta[i];
-        }
-
-        if (ngx_timer_delta) {
-            ngx_free(ngx_timer_delta);
-        }
-
-        ngx_timer_delta = new_delta;
-
-        ngx_timer_queue_num = ecf->timer_queues;
-        ngx_timer_cur_queue = 0;
-
-        for (/* void */; i < ngx_timer_queue_num; i++) {
-            ngx_timer_queue[i].timer_prev = &ngx_timer_queue[i];
-            ngx_timer_queue[i].timer_next = &ngx_timer_queue[i];
-        }
-
-    } else if (ngx_timer_queue_num > ecf->timer_queues) {
-        /* STUB */
-        ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "NOT READY: timer");
-        exit(1);
-    }
-
-#if 0
-    ngx_temp_timer_queue.timer_prev = &ngx_temp_timer_queue;
-    ngx_temp_timer_queue.timer_next = &ngx_temp_timer_queue;
-#endif
-
-    return NGX_OK;;
-}
-
-
-void ngx_event_timer_done(ngx_cycle_t *cycle)
-{
-    ngx_free(ngx_timer_queue);
-    ngx_timer_queue = NULL;
-
-    ngx_free(ngx_timer_delta);
-    ngx_timer_delta = NULL;
-
-    ngx_timer_queue_num = 0;
-}
-
-
-void ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer)
-{
-    ngx_event_t  *e, *queue;
-#if (NGX_DEBUG_EVENT)
-    ngx_connection_t *c;
-#endif
-
-    if (ev->timer_set) {
-        ngx_del_timer(ev);
-    }
-
-#if (NGX_DEBUG_EVENT)
-    c = ev->data;
-    ngx_log_debug(ev->log, "set timer: %d:%d:%d, slot: %d" _
-                  c->fd _ ev->write _ timer _ ngx_timer_cur_queue);
-#endif
-
-    if (ev->timer_next || ev->timer_prev) {
-        ngx_log_error(NGX_LOG_ALERT, ev->log, 0, "timer already set");
-        return;
-    }
-
-    queue = &ngx_timer_queue[ngx_timer_cur_queue];
-    timer += ngx_timer_delta[ngx_timer_cur_queue++];
-
-    if (ngx_timer_cur_queue >= ngx_timer_queue_num) {
-        ngx_timer_cur_queue = 0;
-    }
-
-
-#if 0
-    if (ngx_expire_timers) {
-        queue = &ngx_temp_timer_queue;
-
-    } else {
-        queue = &ngx_timer_queue[ngx_timer_cur_queue++];
-
-        if (ngx_timer_cur_queue >= ngx_timer_queue_num) {
-            ngx_timer_cur_queue = 0;
-        }
-    }
-#endif
-
-    for (e = queue->timer_next;
-         e != queue && timer > e->timer_delta;
-         e = e->timer_next)
-    {
-        timer -= e->timer_delta;
-    }
-
-    ev->timer_delta = timer;
-
-    ev->timer_next = e;
-    ev->timer_prev = e->timer_prev;
-
-    e->timer_prev->timer_next = ev;
-    e->timer_prev = ev;
-
-    ev->timer_set = 1;
-
-    return;
-}
-
-
-int ngx_event_find_timer(void)
-{
-    ngx_int_t   i;
-    ngx_msec_t  timer;
-
-    timer = NGX_MAX_MSEC;
-
-    for (i = 0; i < ngx_timer_queue_num; i++) {
-        if (ngx_timer_queue[i].timer_next == &ngx_timer_queue[i]) {
-            continue;
-        }
-
-        if (timer > ngx_timer_queue[i].timer_next->timer_delta) {
-            timer = ngx_timer_queue[i].timer_next->timer_delta;
-        }
-    }
-
-    if (timer == NGX_MAX_MSEC) {
-        return 0;
-    }
-
-    return timer;
-}
-
-
-void ngx_event_set_timer_delta(ngx_msec_t timer)
-{
-    ngx_int_t  i;
-
-    for (i = 0; i < ngx_timer_queue_num; i++) {
-        ngx_timer_delta[i] = timer;
-    }
-}
-
-
-/* void ngx_event_expire_timers() */
-void ngx_event_expire_timers(ngx_msec_t timer)
-{
-    ngx_int_t     i;
-#if 0
-    ngx_msec_t    delta;
-#endif
-    ngx_event_t  *ev;
-
-#if 0
-    ngx_expire_timers = 1;
-#endif
-
-    for (i = 0; i < ngx_timer_queue_num; i++) {
-
-#if 0
-        delta = timer;
-#endif
-
-        for ( ;; ) {
-            ev = ngx_timer_queue[i].timer_next;
-
-            if (ev == &ngx_timer_queue[i]) {
-                break;
-            }
-
-            if (ev->timer_delta > ngx_timer_delta[i]) {
-                ev->timer_delta -= ngx_timer_delta[i];
-                break;
-            }
-
-            ngx_timer_delta[i] -= ev->timer_delta;
-
-#if 0
-            if (ev->timer_delta > delta) {
-                ev->timer_delta -= delta;
-                break;
-            }
-
-            delta -= ev->timer_delta;
-#endif
-
-            ngx_del_timer(ev);
-
-            if (ev->delayed) {
-                ev->delayed = 0;
-                if (ev->ready == 0) {
-                    continue;
-                }
-
-            } else {
-                ev->timedout = 1;
-            }
-
-            ev->event_handler(ev);
-        }
-
-        ngx_timer_delta[i] = 0;
-    }
-
-#if 0
-    ngx_expire_timers = 0;
-
-    if (ngx_temp_timer_queue.timer_next == &ngx_temp_timer_queue) {
-        return;
-    }
-
-    timer = 0;
-
-    while (ngx_temp_timer_queue.timer_next != &ngx_temp_timer_queue) {
-        timer += ngx_temp_timer_queue.timer_next->timer_delta;
-        ev = ngx_temp_timer_queue.timer_next;
-
-#if (NGX_DEBUG_EVENT)
-        ngx_log_debug(ev->log, "process temp timer queue");
-#endif
-
-        ngx_del_timer(ev);
-        ngx_add_timer(ev, timer);
-    }
-#endif
-}
-
-
-#endif
diff --git a/src/event/ngx_event_timer.h b/src/event/ngx_event_timer.h
index 21867ce..51e3229 100644
--- a/src/event/ngx_event_timer.h
+++ b/src/event/ngx_event_timer.h
@@ -8,7 +8,7 @@
 
 
 /*
- * 32 bit key value resolution
+ * 32 bit timer key value resolution
  *
  * 1 msec - 49 days
  * 10 msec - 1 years 4 months
@@ -28,15 +28,6 @@
 ngx_msec_t ngx_event_find_timer(void);
 void ngx_event_expire_timers(ngx_msec_t timer);
 
-#if 0
-int  ngx_event_timer_init(ngx_cycle_t *cycle);
-void ngx_event_timer_done(ngx_cycle_t *cycle);
-void ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer);
-int  ngx_event_find_timer(void);
-void ngx_event_set_timer_delta(ngx_msec_t timer);
-void ngx_event_expire_timers(ngx_msec_t timer);
-#endif
-
 
 extern ngx_rbtree_t  *ngx_event_timer_rbtree;
 extern ngx_rbtree_t   ngx_event_timer_sentinel;
@@ -59,7 +50,11 @@
     }
 
     ev->rbtree_key = (ngx_int_t)
+              (ngx_elapsed_msec / NGX_TIMER_RESOLUTION * NGX_TIMER_RESOLUTION
+                                              + timer) / NGX_TIMER_RESOLUTION;
+#if 0
                              (ngx_elapsed_msec + timer) / NGX_TIMER_RESOLUTION;
+#endif
 
     ngx_rbtree_insert(&ngx_event_timer_rbtree, &ngx_event_timer_sentinel,
                       (ngx_rbtree_t *) &ev->rbtree_key);
@@ -68,38 +63,4 @@
 }
 
 
-#if 0
-
-ngx_inline static void ngx_event_del_timer(ngx_event_t *ev)
-{
-#if (NGX_DEBUG_EVENT)
-    ngx_connection_t *c = ev->data;
-    ngx_log_debug(ev->log, "del timer: %d:%d" _ c->fd _ ev->write);
-#endif
-
-    if (!ev->timer_next || !ev->timer_prev) {
-        ngx_log_error(NGX_LOG_ALERT, ev->log, 0, "timer already deleted");
-        return;
-    }
-
-    if (ev->timer_prev) {
-        ev->timer_prev->timer_next = ev->timer_next;
-    }
-
-    if (ev->timer_next) {
-        ev->timer_next->timer_delta += ev->timer_delta;
-        ev->timer_next->timer_prev = ev->timer_prev;
-        ev->timer_next = NULL;
-    }
-
-    if (ev->timer_prev) {
-        ev->timer_prev = NULL;
-    }
-
-    ev->timer_set = 0;
-}
-
-#endif
-
-
 #endif /* _NGX_EVENT_TIMER_H_INCLUDED_ */
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index 2f5c923..6d20fdf 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -407,14 +407,17 @@
     clcfp = cscf->locations.elts;
     for (i = 0; i < cscf->locations.nelts; i++) {
 
-#if 1
-ngx_log_debug(r->connection->log, "trans: %s: %d" _
-              clcfp[i]->name.data _ clcfp[i]->exact_match);
-#endif
+#if (HAVE_PCRE)
 
         if (clcfp[i]->regex) {
             break;
         }
+#endif
+
+        ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+                       "find location: %s\"%s\"",
+                       clcfp[i]->exact_match ? "= " : "",
+                       clcfp[i]->name.data);
 
         if (clcfp[i]->auto_redirect
             && r->uri.len == clcfp[i]->name.len - 1
@@ -449,20 +452,23 @@
         }
     }
 
+#if (HAVE_PCRE)
+
     if (!exact && !auto_redirect) {
         /* regex matches */
 
         for (/* void */; i < cscf->locations.nelts; i++) {
 
-#if 1
-ngx_log_debug(r->connection->log, "trans: %s: %d" _
-              clcfp[i]->name.data _ clcfp[i]->exact_match);
-#endif
-
             if (!clcfp[i]->regex) {
                 continue;
             }
 
+            ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+                           "find location: %s\"%s\"",
+                           clcfp[i]->exact_match ? "= " :
+                                 clcfp[i]->regex ? "~ " : "",
+                           clcfp[i]->name.data);
+
             rc = ngx_regex_exec(clcfp[i]->regex, &r->uri);
 
             if (rc == NGX_DECLINED) {
@@ -488,6 +494,8 @@
         }
     }
 
+#endif /* HAVE_PCRE */
+
     clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
 
     if (!(ngx_io.flags & NGX_IO_SENDFILE) || !clcf->sendfile) {
@@ -504,10 +512,6 @@
             return NGX_HTTP_INTERNAL_SERVER_ERROR;
         }
 
-#if 0
-        r->headers_out.location->key.len = 8;
-        r->headers_out.location->key.data = "Location";
-#endif
         r->headers_out.location->value = *auto_redirect;
 
         return NGX_HTTP_MOVED_PERMANENTLY;
@@ -614,7 +618,8 @@
 {
     int  i;
 
-    ngx_log_debug(r->connection->log, "internal redirect: '%s'" _ uri->data);
+    ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+                   "internal redirect: \"%s\"", uri->data);
 
     r->uri.len = uri->len;
     r->uri.data = uri->data;
@@ -798,6 +803,8 @@
 
     ngx_int_t  rc;
 
+#if (HAVE_PCRE)
+
     if (first->regex && !second->regex) {
         /* shift regex matches to the end */
         return 1;
@@ -808,6 +815,8 @@
         return 0;
     }
 
+#endif
+
     rc = ngx_strcmp(first->name.data, second->name.data);
 
     if (rc == 0 && second->exact_match) {
@@ -876,6 +885,7 @@
                        && value[1].data[0] == '~'
                        && value[1].data[1] == '*'))
         {
+#if (HAVE_PCRE)
             err.len = NGX_MAX_CONF_ERRSTR;
             err.data = errstr;
 
@@ -890,6 +900,13 @@
 
             clcf->name.len = value[2].len;
             clcf->name.data = value[2].data;
+#else
+            ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+                               "the using of the regex \"%s\" "
+                               "requires PCRE library",
+                               value[2].data);
+            return NGX_CONF_ERROR;
+#endif
 
         } else {
             ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
diff --git a/src/http/ngx_http_core_module.h b/src/http/ngx_http_core_module.h
index ed228d7..17ee46f 100644
--- a/src/http/ngx_http_core_module.h
+++ b/src/http/ngx_http_core_module.h
@@ -134,7 +134,9 @@
 
     ngx_http_cache_hash_t  *open_files;
 
+#if (HAVE_PCRE)
     ngx_regex_t  *regex;
+#endif
 
     unsigned      exact_match:1;
     unsigned      auto_redirect:1;
diff --git a/src/http/ngx_http_header_filter.c b/src/http/ngx_http_header_filter.c
index 49f1dba..e3731d7 100644
--- a/src/http/ngx_http_header_filter.c
+++ b/src/http/ngx_http_header_filter.c
@@ -340,6 +340,8 @@
     /* the end of HTTP header */
     *(h->last++) = CR; *(h->last++) = LF;
 
+    r->header_size = h->last - h->pos;
+
     if (r->header_only) {
         h->type |= NGX_HUNK_LAST;
     }
diff --git a/src/http/ngx_http_log_handler.c b/src/http/ngx_http_log_handler.c
index ff94395..caef967 100644
--- a/src/http/ngx_http_log_handler.c
+++ b/src/http/ngx_http_log_handler.c
@@ -19,6 +19,8 @@
                                  uintptr_t data);
 static char *ngx_http_log_length(ngx_http_request_t *r, char *buf,
                                  uintptr_t data);
+static char *ngx_http_log_apache_length(ngx_http_request_t *r, char *buf,
+                                        uintptr_t data);
 static char *ngx_http_log_header_in(ngx_http_request_t *r, char *buf,
                                     uintptr_t data);
 static char *ngx_http_log_connection_header_out(ngx_http_request_t *r,
@@ -97,7 +99,7 @@
                           "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
 
 static ngx_str_t ngx_http_combined_fmt =
-    ngx_string("%addr - - [%time] \"%request\" %status %length "
+    ngx_string("%addr - - [%time] \"%request\" %status %apache_length "
                "\"%{Referer}i\" %{User-Agent}i\"");
 
 
@@ -110,6 +112,7 @@
     { ngx_string("request"), 0, ngx_http_log_request },
     { ngx_string("status"), 3, ngx_http_log_status },
     { ngx_string("length"), NGX_OFF_T_LEN, ngx_http_log_length },
+    { ngx_string("apache_length"), NGX_OFF_T_LEN, ngx_http_log_apache_length },
     { ngx_string("i"), NGX_HTTP_LOG_ARG, ngx_http_log_header_in },
     { ngx_string("o"), NGX_HTTP_LOG_ARG, ngx_http_log_header_out },
     { ngx_null_string, 0, NULL }
@@ -129,7 +132,8 @@
     u_int                     written;
 #endif
 
-    ngx_log_debug(r->connection->log, "log handler");
+    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+                   "http log handler");
 
     lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
 
@@ -248,6 +252,14 @@
 }
 
 
+static char *ngx_http_log_apache_length(ngx_http_request_t *r, char *buf,
+                                        uintptr_t data)
+{
+    return buf + ngx_snprintf(buf, NGX_OFF_T_LEN + 1, OFF_T_FMT,
+                              r->connection->sent - r->header_size);
+}
+
+
 static char *ngx_http_log_header_in(ngx_http_request_t *r, char *buf,
                                     uintptr_t data)
 {
diff --git a/src/http/ngx_http_parse.c b/src/http/ngx_http_parse.c
index 5dc0bc3..599114c 100644
--- a/src/http/ngx_http_parse.c
+++ b/src/http/ngx_http_parse.c
@@ -3,7 +3,7 @@
 #include <ngx_core.h>
 #include <ngx_http.h>
 
-int ngx_http_parse_request_line(ngx_http_request_t *r)
+ngx_int_t ngx_http_parse_request_line(ngx_http_request_t *r)
 {
     char   ch, *p;
     enum {
@@ -419,7 +419,7 @@
 }
 
 
-int ngx_http_parse_header_line(ngx_http_request_t *r, ngx_hunk_t *h)
+ngx_int_t ngx_http_parse_header_line(ngx_http_request_t *r, ngx_hunk_t *h)
 {
     char   c, ch, *p;
     enum {
@@ -621,7 +621,7 @@
 }
 
 
-int ngx_http_parse_complex_uri(ngx_http_request_t *r)
+ngx_int_t ngx_http_parse_complex_uri(ngx_http_request_t *r)
 {
     char  c, ch, decoded, *p, *u;
     enum {
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index 51478c6..66bf9be 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -42,10 +42,12 @@
 };
 
 
+#if 0
 static void ngx_http_dummy(ngx_event_t *wev)
 {
     return;
 }
+#endif
 
 
 void ngx_http_init_connection(ngx_connection_t *c)
@@ -110,7 +112,7 @@
 
 static void ngx_http_init_request(ngx_event_t *rev)
 {
-    int                        i;
+    ngx_int_t                  i;
     socklen_t                  len;
     struct sockaddr_in         addr_in;
     ngx_connection_t          *c;
@@ -147,8 +149,6 @@
     in_port = c->servers;
     in_addr = in_port->addrs.elts;
 
-ngx_log_debug(rev->log, "IN: %08x" _ in_port);
-
     r->port = in_port->port;
     r->port_name = &in_port->port_name;
 
@@ -274,8 +274,8 @@
 
 static void ngx_http_process_request_line(ngx_event_t *rev)
 {
-    int                        rc, offset;
     ssize_t                    n;
+    ngx_int_t                  rc, offset;
     ngx_connection_t          *c;
     ngx_http_request_t        *r;
     ngx_http_log_ctx_t        *ctx;
@@ -439,15 +439,18 @@
             ngx_cpystrn(r->args.data, r->args_start, r->args.len + 1);
         }
 
-#if 1 /* DEBUG */
-        if (r->exten.data == NULL) { r->exten.data = ""; }
-        if (r->args.data == NULL) { r->args.data = ""; }
-        ngx_log_debug(c->log, "HTTP: %d, %d, '%s', '%s', '%s'" _
-                      r->method _ r->http_version _
-                      r->uri.data _ r->exten.data _ r->args.data);
-        if (r->exten.data[0] == '\0') { r->exten.data = NULL; }
-        if (r->args.data[0] == '\0') { r->args.data = NULL; }
-#endif
+        ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
+                       "http request line: \"%s\"", r->request_line.data);
+
+        ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
+                       "http uri: \"%s\"", r->uri.data);
+
+        ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
+                       "http args: \"%s\"", r->args.data ? r->args.data : "");
+
+        ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
+                       "http exten: \"%s\"",
+                       r->exten.data ? r->exten.data : "");
 
         if (r->http_version < NGX_HTTP_VERSION_10) {
             rev->event_handler = ngx_http_block_read;
@@ -532,8 +535,8 @@
 
 static void ngx_http_process_request_headers(ngx_event_t *rev)
 {
-    int                        rc, i, offset;
     ssize_t                    n;
+    ngx_int_t                  rc, i, offset;
     ngx_table_elt_t           *h;
     ngx_connection_t          *c;
     ngx_http_request_t        *r;
@@ -616,8 +619,9 @@
                 }
             }
 
-            ngx_log_debug(r->connection->log, "HTTP header: '%s: %s'" _
-                          h->key.data _ h->value.data);
+            ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+                           "http header: \"%s: %s\"'",
+                           h->key.data, h->value.data);
 
             if (cscf->large_client_header
                 && r->header_in->pos == r->header_in->last)
@@ -631,7 +635,8 @@
 
             /* a whole header has been parsed successfully */
 
-            ngx_log_debug(r->connection->log, "HTTP header done");
+            ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+                           "http header done");
 
             rc = ngx_http_process_request_header(r);
 
@@ -746,10 +751,10 @@
 }
 
 
-static int ngx_http_process_request_header(ngx_http_request_t *r)
+static ngx_int_t ngx_http_process_request_header(ngx_http_request_t *r)
 {
-    int                        i;
     size_t                     len;
+    ngx_int_t                  i;
     ngx_http_server_name_t    *name;
     ngx_http_core_loc_conf_t  *clcf;
 
@@ -828,13 +833,16 @@
 
 void ngx_http_finalize_request(ngx_http_request_t *r, int rc)
 {
+    ngx_http_core_loc_conf_t  *clcf;
+
     /* r can be already destroyed when rc == NGX_DONE */
 
     if (rc == NGX_DONE || r->main) {
         return;
     }
 
-    ngx_log_debug(r->connection->log, "finalize http request");
+    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+                   "http finalize request");
 
     if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
 
@@ -868,10 +876,12 @@
         ngx_del_timer(r->connection->write);
     }
 
-    if (r->keepalive != 0) {
+    clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
+
+    if (r->keepalive != 0 && clcf->keepalive_timeout > 0) {
         ngx_http_set_keepalive(r);
 
-    } else if (r->lingering_close) {
+    } else if (r->lingering_close && clcf->lingering_timeout > 0) {
         ngx_http_set_lingering_close(r);
 
     } else {
@@ -916,7 +926,7 @@
     ngx_http_request_t        *r;
     ngx_http_core_loc_conf_t  *clcf;
 
-    ngx_log_debug(wev->log, "http writer handler");
+    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, wev->log, 0, "http writer handler");
 
     c = wev->data;
     r = c->data;
@@ -934,7 +944,8 @@
 
     rc = ngx_http_output_filter(r, NULL);
 
-    ngx_log_debug(c->log, "writer output filter: %d" _ rc);
+    ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
+                  "http writer output filter: %d", rc);
 
     if (rc == NGX_AGAIN) {
         if (!wev->ready) {
@@ -951,7 +962,7 @@
         return;
     }
 
-    ngx_log_debug(c->log, "http writer done");
+    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http writer done");
 
     ngx_http_finalize_request(r, rc);
 }
@@ -962,7 +973,7 @@
     ngx_connection_t          *c;
     ngx_http_request_t        *r;
 
-    ngx_log_debug(rev->log, "http read blocked");
+    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, rev->log, 0, "http read blocked");
 
     /* aio does not call this handler */
 
@@ -986,7 +997,7 @@
 
     rev = r->connection->read;
 
-    ngx_log_debug(rev->log, "set discard body");
+    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, rev->log, 0, "http set discard body");
 
     if (rev->timer_set) {
         ngx_del_timer(rev);
diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h
index 82e8bf7..785c8e1 100644
--- a/src/http/ngx_http_request.h
+++ b/src/http/ngx_http_request.h
@@ -217,6 +217,8 @@
 
     ngx_array_t          cleanup;
 
+    size_t               header_size;
+
     char                *discarded_buffer;
     void               **err_ctx;
     int                  err_status;
diff --git a/src/os/unix/ngx_errno.c b/src/os/unix/ngx_errno.c
new file mode 100644
index 0000000..e94f2c9
--- /dev/null
+++ b/src/os/unix/ngx_errno.c
@@ -0,0 +1,24 @@
+#include <ngx_config.h>
+#include <ngx_core.h>
+
+
+ngx_int_t ngx_strerror_r(int err, char *errstr, size_t size)
+{
+    size_t  len;
+
+    if (size == 0) {
+        return 0;
+    }
+
+    errstr[0] = '\0';
+
+    strerror_r(err, errstr, size);
+
+    for (len = 0; len < size; len++) {
+        if (errstr[len] == '\0') {
+            break;
+        }
+    }
+
+    return len;
+}
diff --git a/src/os/unix/ngx_errno.h b/src/os/unix/ngx_errno.h
index a7326b6..f9e68b4 100644
--- a/src/os/unix/ngx_errno.h
+++ b/src/os/unix/ngx_errno.h
@@ -29,12 +29,17 @@
 #define ngx_set_errno(err)         errno = err
 #define ngx_set_socket_errno(err)  errno = err
 
-#if 0
-#define ngx_strerror(err)          strerror(err)
-#endif
+
+#if (HAVE_STRERROR_R)
+
+ngx_int_t ngx_strerror_r(int err, char *errstr, size_t size);
+
+#else
 
 #define ngx_strerror_r(err, errstr, size)  \
              ngx_cpystrn(errstr, strerror(err), size) - (errstr)
 
+#endif
+
 
 #endif /* _NGX_ERRNO_H_INCLUDED_ */
diff --git a/src/os/unix/ngx_os.h b/src/os/unix/ngx_os.h
index a106514..cc693fa 100644
--- a/src/os/unix/ngx_os.h
+++ b/src/os/unix/ngx_os.h
@@ -49,6 +49,7 @@
 extern int          ngx_inherited_nonblocking;
 
 
+extern int          done;
 extern int          restart;
 extern int          rotate;
 
diff --git a/src/os/unix/ngx_posix_init.c b/src/os/unix/ngx_posix_init.c
index 7550af0..9ebc3d1 100644
--- a/src/os/unix/ngx_posix_init.c
+++ b/src/os/unix/ngx_posix_init.c
@@ -7,48 +7,66 @@
 int  ngx_inherited_nonblocking;
 
 
+void ngx_signal_handler(int signo);
+void ngx_exit_signal_handler(int signo);
 void ngx_restart_signal_handler(int signo);
 void ngx_rotate_signal_handler(int signo);
 
 
+typedef struct {
+     int     signo;
+     char   *signame;
+     char   *action;
+     void  (*handler)(int signo);
+} ngx_signal_t;
+
+
+ngx_signal_t  signals[] = {
+    { ngx_signal_value(NGX_RESTART_SIGNAL),
+      "SIG" ngx_value(NGX_RESTART_SIGNAL),
+      "restarting",
+      ngx_signal_handler },
+
+    { ngx_signal_value(NGX_ROTATE_SIGNAL),
+      "SIG" ngx_value(NGX_ROTATE_SIGNAL),
+      "reopen logs",
+      ngx_signal_handler },
+
+    { ngx_signal_value(NGX_INTERRUPT_SIGNAL),
+      "SIG" ngx_value(NGX_INTERRUPT_SIGNAL),
+      "exiting",
+      ngx_signal_handler },
+
+    { ngx_signal_value(NGX_SHUTDOWN_SIGNAL),
+      "SIG" ngx_value(NGX_SHUTDOWN_SIGNAL),
+      "shutdowning",
+      ngx_signal_handler },
+
+    { SIGCHLD, "SIGCHLD", NULL, ngx_sigchld_handler },
+
+    { SIGPIPE, "SIGPIPE, SIG_IGN", NULL, SIG_IGN },
+
+    { 0, NULL, NULL, NULL }
+};
+
+
 int ngx_posix_init(ngx_log_t *log)
 {
-    struct rlimit     rlmt;
-    struct sigaction  sa;
+    ngx_signal_t      *sig;
+    struct rlimit      rlmt;
+    struct sigaction   sa;
 
-    ngx_memzero(&sa, sizeof(struct sigaction));
-    sa.sa_handler = SIG_IGN;
-    sigemptyset(&sa.sa_mask);
-    if (sigaction(SIGPIPE, &sa, NULL) == -1) {
-        ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
-                      "sigaction(SIGPIPE, SIG_IGN) failed");
-        return NGX_ERROR;
+    for (sig = signals; sig->signo != 0; sig++) {
+        ngx_memzero(&sa, sizeof(struct sigaction));
+        sa.sa_handler = sig->handler;
+        sigemptyset(&sa.sa_mask);
+        if (sigaction(sig->signo, &sa, NULL) == -1) {
+            ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
+                          "sigaction(%s) failed", sig->signame);
+            return NGX_ERROR;
+        }
     }
 
-    ngx_memzero(&sa, sizeof(struct sigaction));
-    sa.sa_handler = ngx_sigchld_handler;
-    sigemptyset(&sa.sa_mask);
-    if (sigaction(SIGCHLD, &sa, NULL) == -1) {
-        ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
-                      "sigaction(SIGCHLD) failed");
-        return NGX_ERROR;
-    }
-
-    sa.sa_handler = ngx_restart_signal_handler;
-    if (sigaction(ngx_signal_value(NGX_RESTART_SIGNAL), &sa, NULL) == -1) {
-        ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
-                      "sigaction(SIG" ngx_value(NGX_RESTART_SIGNAL) ") failed");
-        return NGX_ERROR;
-    }
-
-    sa.sa_handler = ngx_rotate_signal_handler;
-    if (sigaction(ngx_signal_value(NGX_ROTATE_SIGNAL), &sa, NULL) == -1) {
-        ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
-                      "sigaction(SIG" ngx_value(NGX_ROTATE_SIGNAL) ") failed");
-        return NGX_ERROR;
-    }
-
-
     if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) {
         ngx_log_error(NGX_LOG_ALERT, log, errno,
                       "getrlimit(RLIMIT_NOFILE) failed)");
@@ -71,6 +89,56 @@
 }
 
 
+void ngx_signal_handler(int signo)
+{
+    char          *name;
+    ngx_signal_t  *sig;
+
+    for (sig = signals; sig->signo != 0; sig++) {
+        if (sig->signo == signo) {
+            break;
+        }
+    }
+
+    /* STUB */
+    name = strsignal(signo);
+    ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, 0,
+                  "signal #%d (%s: %s) received, %s",
+                  signo, sig->signame, name, sig->action);
+
+    switch (signo) {
+
+    /* STUB */
+    case SIGQUIT:
+    case SIGABRT:
+
+    case ngx_signal_value(NGX_SHUTDOWN_SIGNAL):
+    case ngx_signal_value(NGX_INTERRUPT_SIGNAL):
+        done = 1;
+        break;
+
+    case ngx_signal_value(NGX_RESTART_SIGNAL):
+        restart = 1;
+        break;
+
+    case ngx_signal_value(NGX_ROTATE_SIGNAL):
+        rotate = 1;
+        break;
+    }
+}
+
+
+void ngx_exit_signal_handler(int signo)
+{
+    char *s;
+
+    s = strsignal(signo);
+    ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, 0,
+                  "%s signal received, exiting", s);
+    done = 1;
+}
+
+
 void ngx_restart_signal_handler(int signo)
 {
     restart = 1;
diff --git a/src/os/win32/ngx_time.c b/src/os/win32/ngx_time.c
index 435f430..43d2c41 100644
--- a/src/os/win32/ngx_time.c
+++ b/src/os/win32/ngx_time.c
@@ -19,6 +19,8 @@
      * 134744 days,
      * 11644473600 seconds or
      * 11644473600,000,000,0 100-nanosecond intervals.
+     *
+     * See also MSKB Q167296.
      */
 
     intervals = ((uint64_t) ft.dwHighDateTime << 32) | ft.dwLowDateTime;
diff --git a/src/os/win32/ngx_win32_init.c b/src/os/win32/ngx_win32_init.c
index 3c3509c..aaeca21 100644
--- a/src/os/win32/ngx_win32_init.c
+++ b/src/os/win32/ngx_win32_init.c
@@ -52,6 +52,8 @@
     }
 
     /*
+     *  Windows 3.1 Win32s   0xxxxx
+     *
      *  Windows 95           140000
      *  Windows 98           141000
      *  Windows ME           149000
@@ -61,6 +63,8 @@
      *  Windows 2000         250000
      *  Windows XP           250100
      *  Windows 2003         250200
+     *
+     *  Windows CE x.x       3xxxxx
      */
 
     ngx_win32_version = osvi.dwPlatformId * 100000
@@ -84,7 +88,7 @@
 #endif
 
     } else {
-        if (osvi.dwPlatformId == 1) {
+        if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
 
             /* Win9x build */
 
@@ -96,6 +100,14 @@
                           osvi.szCSDVersion);
 
         } else {
+
+            /*
+             * VER_PLATFORM_WIN32_NT
+             *
+             * we do not currently support VER_PLATFORM_WIN32_CE
+             * and we do not support VER_PLATFORM_WIN32s at all
+             */
+
             ngx_log_error(NGX_LOG_INFO, log, 0, "OS: %u build:%u, \"%s\"",
                           ngx_win32_version, osvi.dwBuildNumber,
                           osvi.szCSDVersion);
