diff --git a/auto/configure b/auto/configure
index c30b52d..8b182d9 100755
--- a/auto/configure
+++ b/auto/configure
@@ -4,6 +4,20 @@
 
 echo > ngx_auto_config.h
 
+NGX_TYPE="long"; . auto/types/sizeof; NGX_MAX_LONG=$NGX_MAX_SIZE
+NGX_FORMATS="l"; . auto/fmt/fmt
+
+
+NGX_TYPE="long long"; . auto/types/sizeof; NGX_MAX_LONG_LONG=$NGX_MAX_SIZE
+NGX_FORMATS="ll q"; . auto/fmt/fmt
+
+#NGX_TYPE="__int64_t"; . auto/types/typedef; NGX_TIME_T_FMT=$NGX_FMT
+
+#NGX_TYPE="time_t"; . auto/types/typedef; NGX_TIME_T_FMT=$NGX_FMT
+
+
+#exit
+
 . auto/types/time_t
 
 . auto/types/uint64_t
diff --git a/auto/fmt/fmt b/auto/fmt/fmt
new file mode 100644
index 0000000..5d270e8
--- /dev/null
+++ b/auto/fmt/fmt
@@ -0,0 +1,32 @@
+
+echo "Checking for printf() $NGX_TYPE format"
+
+NGX_FMT=NO
+
+for FMT in $NGX_FORMATS
+do
+    echo "int main() {" > autotest.c
+    echo "printf(\"%${FMT}u\", (unsigned $NGX_TYPE) -1);" >> autotest.c
+    echo "return 0; }" >> autotest.c
+
+    eval "${CC} -o autotest autotest.c > /dev/null 2>&1"
+
+    if [ -x ./autotest -a "`./autotest`" = $NGX_MAX_SIZE ]; then
+        echo " + \"%${FMT}\" used"
+        NGX_FMT=$FMT
+    else
+        echo " + \"%${FMT}\" is not appropriate"
+    fi
+
+    rm autotest*
+
+    if [ $NGX_FMT != NO ]; then
+        break
+    fi
+done
+
+
+if [ $NGX_FMT = NO ]; then
+    echo "printf() $NGX_TYPE format not found"
+    exit 1
+fi
diff --git a/auto/fmt/longlong b/auto/fmt/longlong
new file mode 100644
index 0000000..4a5e084
--- /dev/null
+++ b/auto/fmt/longlong
@@ -0,0 +1,45 @@
+
+echo "Checking for printf() long long format"
+
+NGX_LONG_LONG_FMT=NO
+
+    echo "int main() {" > autotest.c
+    echo "printf(\"%llu\", (unsigned long long) -1);" >> autotest.c
+    echo "return 0; }" >> autotest.c
+
+    eval "${CC} -o autotest autotest.c > /dev/null 2>&1"
+
+    if [ -x ./autotest -a "`./autotest`" = $NGX_MAX_LONG_LONG ]; then
+        echo " + \"%ll\" used"
+        NGX_LONG_LONG_FMT="ll"
+    else
+        echo " + \"%ll\" is not appropriate"
+    fi
+
+    rm autotest*
+
+
+if [ $NGX_LONG_LONG_FMT = NO ]; then
+
+    echo "int main() {" > autotest.c
+    echo "printf(\"%qu\", (unsigned long long) -1);" >> autotest.c
+    echo "return 0; }" >> autotest.c
+
+    eval "${CC} -o autotest autotest.c > /dev/null 2>&1"
+
+    if [ -x ./autotest -a "`./autotest`" = $NGX_MAX_LONG_LONG ]; then
+        echo " + \"%q\" used"
+        NGX_LONG_LONG_FMT="q"
+    else
+        echo " + \"%q\" is not appropriate"
+    fi
+
+    rm autotest*
+
+fi
+
+
+if [ $NGX_LONG_LONG_FMT = NO ]; then
+    echo "printf() long long format not found"
+    exit 1
+fi
diff --git a/auto/types/longlong b/auto/types/longlong
new file mode 100644
index 0000000..f843d5a
--- /dev/null
+++ b/auto/types/longlong
@@ -0,0 +1,31 @@
+
+echo "Checking for long long size"
+
+BYTES=
+
+echo "int main() {" > autotest.c
+echo "printf(\"%d\", sizeof(long long));" >> autotest.c
+echo "return 0; }" >> autotest.c
+
+eval "${CC} -o autotest autotest.c > /dev/null 2>&1"
+
+if [ -x ./autotest ]; then
+    BYTES=`./autotest`
+    echo " + long long is $BYTES bytes"
+fi
+
+rm autotest*
+
+case $BYTES in
+    4)
+        NGX_MAX_LONG_LONG=4294967295
+    ;;
+
+    8)
+        NGX_MAX_LONG_LONG=18446744073709551615
+    ;;
+
+    *)
+        echo "$0: error: can not detect long long size"
+        exit 1
+esac
diff --git a/auto/types/sizeof b/auto/types/sizeof
new file mode 100644
index 0000000..f24f4b6
--- /dev/null
+++ b/auto/types/sizeof
@@ -0,0 +1,31 @@
+
+echo "Checking for $NGX_TYPE size"
+
+BYTES=
+
+echo "int main() {" > autotest.c
+echo "printf(\"%d\", sizeof($NGX_TYPE));" >> autotest.c
+echo "return 0; }" >> autotest.c
+
+eval "${CC} -o autotest autotest.c > /dev/null 2>&1"
+
+if [ -x ./autotest ]; then
+    BYTES=`./autotest`
+    echo " + $NGX_TYPE is $BYTES bytes"
+fi
+
+rm autotest*
+
+case $BYTES in
+    4)
+        NGX_MAX_SIZE=4294967295
+    ;;
+
+    8)
+        NGX_MAX_SIZE=18446744073709551615
+    ;;
+
+    *)
+        echo "$0: error: can not detect $NGX_TYPE size"
+        exit 1
+esac
diff --git a/auto/types/typedef b/auto/types/typedef
new file mode 100644
index 0000000..4c7acbd
--- /dev/null
+++ b/auto/types/typedef
@@ -0,0 +1,32 @@
+
+echo "Checking for $NGX_TYPE definition"
+
+echo "#include <sys/types.h>" > autotest.c
+TYPE=`${CPP} autotest.c | \
+      awk "/^typedef.*$NGX_TYPE/ { for (i = 1; i< NF; i++) print $i}"`
+#rm autotest.c
+
+echo $TYPE
+
+case $TYPE in
+    "long long")
+        echo ' + defined as long long'
+        NGX_FMT=$NGX_LONG_LONG_FMT
+    ;;
+
+    long)
+        echo ' + defined as long'
+        NGX_FMT=$NGX_LONG_FMT
+    ;;
+
+    int)
+        echo ' + defined as int'
+        NGX_FMT=$NGX_INT_FMT
+    ;;
+
+    *)
+        echo "$0: error: unknown $NGX_TYPE definition: \"$TYPE\""
+        exit 1
+    ;;
+
+esac
diff --git a/auto/types/uintptr_t b/auto/types/uintptr_t
index f2cfe62..568c609 100644
--- a/auto/types/uintptr_t
+++ b/auto/types/uintptr_t
@@ -29,6 +29,8 @@
         type="typedef $type  uintptr_t;"
         found=2
     fi
+
+    rm autotest*
 fi
 
 
diff --git a/src/http/modules/proxy/ngx_http_proxy_cache.c b/src/http/modules/proxy/ngx_http_proxy_cache.c
index 958471b..05fec3a 100644
--- a/src/http/modules/proxy/ngx_http_proxy_cache.c
+++ b/src/http/modules/proxy/ngx_http_proxy_cache.c
@@ -252,6 +252,8 @@
     rc = ngx_http_busy_lock_cachable(p->lcf->busy_lock, &p->busy_lock,
                                      p->try_busy_lock);
 
+ngx_log_debug(p->request->connection->log, "LOCK CACHABLE: %d" _ rc);
+
     if (rc == NGX_OK) {
         if (p->try_busy_lock) {
             p->busy_locked = 1;
@@ -344,7 +346,7 @@
 
     rc = ngx_http_cache_open_file(ctx, ngx_file_uniq(&p->cache->ctx.file.info));
 
-    if (rc == NGX_HTTP_CACHE_THE_SAME) {
+    if (rc == NGX_DECLINED || rc == NGX_HTTP_CACHE_THE_SAME) {
         p->try_busy_lock = 1;
         p->busy_lock.time = 0;
         ngx_http_proxy_cache_busy_lock(p);
diff --git a/src/http/modules/proxy/ngx_http_proxy_handler.c b/src/http/modules/proxy/ngx_http_proxy_handler.c
index b7487f8..25f5b33 100644
--- a/src/http/modules/proxy/ngx_http_proxy_handler.c
+++ b/src/http/modules/proxy/ngx_http_proxy_handler.c
@@ -448,8 +448,11 @@
 
 void ngx_http_proxy_finalize_request(ngx_http_proxy_ctx_t *p, int rc)
 {
-    ngx_log_debug(p->request->connection->log,
-                  "finalize http proxy request");
+    ngx_http_request_t  *r;
+
+    r = p->request;
+
+    ngx_log_debug(r->connection->log, "finalize http proxy request");
 
     if (p->upstream && p->upstream->peer.connection) {
         ngx_http_proxy_close_connection(p);
@@ -462,11 +465,27 @@
     }
 
     if (p->saved_ctx) {
-        p->request->connection->log->data = p->saved_ctx;
-        p->request->connection->log->handler = p->saved_handler;
+        r->connection->log->data = p->saved_ctx;
+        r->connection->log->handler = p->saved_handler;
     }
 
-    ngx_http_finalize_request(p->request, rc);
+    if (p->upstream && p->upstream->event_pipe) {
+ngx_log_debug(r->connection->log, "TEMP FD: %d" _
+              p->upstream->event_pipe->temp_file->file.fd);
+    }
+
+    if (p->cache) {
+ngx_log_debug(r->connection->log, "CACHE FD: %d" _ p->cache->ctx.file.fd);
+    }
+
+    if (p->upstream && p->upstream->event_pipe) {
+        r->file.fd = p->upstream->event_pipe->temp_file->file.fd;
+
+    } else if (p->cache) {
+        r->file.fd = p->cache->ctx.file.fd;
+    }
+
+    ngx_http_finalize_request(r, rc);
 }
 
 
diff --git a/src/http/ngx_http_busy_lock.c b/src/http/ngx_http_busy_lock.c
index 172e15e..9014078 100644
--- a/src/http/ngx_http_busy_lock.c
+++ b/src/http/ngx_http_busy_lock.c
@@ -59,7 +59,8 @@
 
     rc = ngx_http_busy_lock_look_cachable(bl, bc, lock);
 
-ngx_log_debug(bc->event->log, "BUSYLOCK: %d" _ rc);
+ngx_log_debug(bc->event->log, "BUSYLOCK: %d %d:%d" _
+              rc _ bl->waiting _ bl->max_waiting);
 
     if (rc == NGX_OK) {  /* no the same request, there's free slot */
         return NGX_OK;
