nginx-0.0.1-2003-11-11-00:09:22 import
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index a5f5c38..3a0ec8b 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -429,6 +429,11 @@
         return NGX_OK;
     }
 
+    if (r->err_status) {
+        r->headers_out.status = r->err_status;
+        r->headers_out.status_line.len = 0;
+    }
+
     return (*ngx_http_top_header_filter)(r);
 }
 
@@ -495,7 +500,18 @@
     }
 
     /* clear the modules contexts */
-    ngx_memzero(r->ctx, sizeof(void *) * ngx_http_max_module);
+
+    if (r->error_page) {
+        r->err_status = r->headers_out.status;
+        r->err_ctx = r->ctx;
+        r->ctx = ngx_pcalloc(r->pool, sizeof(void *) * ngx_http_max_module);
+        if (r->ctx == NULL) {
+            return NGX_HTTP_INTERNAL_SERVER_ERROR;
+        }
+
+    } else {
+        ngx_memzero(r->ctx, sizeof(void *) * ngx_http_max_module);
+    }
 
     r->phase = 0;
     r->phase_handler = 0;