diff --git a/src/core/nginx.c b/src/core/nginx.c
index be95637..cef3434 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -315,8 +315,8 @@
     }
 
     if (cycle->conf_file.data == NULL) {
-        cycle->conf_file.len = sizeof(NGINX_CONF) - 1;
-        cycle->conf_file.data = NGINX_CONF;
+        cycle->conf_file.len = sizeof(NGX_CONF_PATH) - 1;
+        cycle->conf_file.data = (u_char *) NGX_CONF_PATH;
     }
 
     return NGX_OK;
@@ -358,20 +358,20 @@
     /* TODO: default "nobody" user */
 
     if (ccf->pid.len == 0) {
-        ccf->pid.len = sizeof(NGINX_PID) - 1;
-        ccf->pid.data = NGINX_PID;
-        ccf->newpid.len = sizeof(NGINX_NEWPID) - 1;
-        ccf->newpid.data = NGINX_NEWPID;
+        ccf->pid.len = sizeof(NGX_PID_PATH) - 1;
+        ccf->pid.data = NGX_PID_PATH;
+        ccf->newpid.len = sizeof(NGX_PID_PATH NGX_NEWPID_EXT) - 1;
+        ccf->newpid.data = NGX_PID_PATH NGX_NEWPID_EXT;
 
     } else {
-        ccf->newpid.len = ccf->pid.len + sizeof(NGINX_NEWPID_EXT);
+        ccf->newpid.len = ccf->pid.len + sizeof(NGX_NEWPID_EXT);
 
         if (!(ccf->newpid.data = ngx_palloc(cycle->pool, ccf->newpid.len))) {
             return NGX_CONF_ERROR;
         }
 
         ngx_memcpy(ngx_cpymem(ccf->newpid.data, ccf->pid.data, ccf->pid.len),
-                   NGINX_NEWPID_EXT, sizeof(NGINX_NEWPID_EXT));
+                   NGX_NEWPID_EXT, sizeof(NGX_NEWPID_EXT));
     }
 #endif
 
diff --git a/src/core/nginx.h b/src/core/nginx.h
index 7d75537..ba59c12 100644
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -3,14 +3,9 @@
 
 
 #define NGINX_VER          "nginx/0.0.3"
-#define NGINX_CONF         (u_char *) "nginx.conf"
-#define NGINX_PID          "nginx.pid"
-#define NGINX_NEWPID_EXT   ".newbin"
-#define NGINX_NEWPID       NGINX_PID NGINX_NEWPID_EXT
 
 #define NGINX_VAR          "NGINX"
-
-extern ngx_module_t        ngx_core_module;
+#define NGX_NEWPID_EXT     ".newbin"
 
 
 #endif /* _NGINX_H_INCLUDED_ */
diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c
index bb05b72..1a29eb0 100644
--- a/src/core/ngx_conf_file.c
+++ b/src/core/ngx_conf_file.c
@@ -546,6 +546,10 @@
 
     value = cf->args->elts;
 
+    if (value[1].data[0] == '/') {
+        return ngx_conf_parse(cf, &value[1]);
+    }
+
     file.len = cf->cycle->root.len + value[1].len;
     if (!(file.data = ngx_palloc(cf->pool, file.len + 1))) {
         return NGX_CONF_ERROR;
diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c
index 989973a..5a19f30 100644
--- a/src/core/ngx_cycle.c
+++ b/src/core/ngx_cycle.c
@@ -24,7 +24,6 @@
 ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle)
 {
     void               *rv;
-    u_char             *root;
     ngx_uint_t          i, n, failed;
     ngx_log_t          *log;
     ngx_conf_t          conf;
@@ -34,7 +33,6 @@
     ngx_open_file_t    *file;
     ngx_listening_t    *ls, *nls;
     ngx_core_module_t  *module;
-    char                cwd[NGX_MAX_PATH + 1];
 
     log = old_cycle->log;
 
@@ -51,42 +49,8 @@
     cycle->log = log;
     cycle->old_cycle = old_cycle;
     cycle->conf_file = old_cycle->conf_file;
-
-
-    for (i = cycle->conf_file.len; i > 0; i--) {
-        if (cycle->conf_file.data[i] == '/') {
-            break;
-        }
-    }
-
-    if (i == 0 && cycle->conf_file.data[i] != '/') {
-        if (ngx_getcwd(cwd, NGX_MAX_PATH) == 0) {
-            ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
-                          ngx_getcwd_n " failed");
-            ngx_destroy_pool(pool);
-            return NULL;
-        }
-
-        for ( /* void */; i < NGX_MAX_PATH && cwd[i]; i++) /* void */;
-        cwd[i] = '/';
-        cwd[i + 1] = '\0';
-
-        root = (u_char *) cwd;
-
-    } else {
-        root = cycle->conf_file.data;
-    }
-
-    cycle->root.len = ++i;
-    cycle->root.data = ngx_palloc(pool, ++i);
-    if (cycle->root.data == NULL) {
-        ngx_destroy_pool(pool);
-        return NULL;
-    }
-
-    ngx_cpystrn(cycle->root.data, root, i);
-
-    ngx_log_error(NGX_LOG_INFO, log, 0, "root: %s", cycle->root.data);
+    cycle->root.len = sizeof(NGX_PREFIX) - 1;
+    cycle->root.data = (u_char *) NGX_PREFIX;
 
 
     n = old_cycle->pathes.nelts ? old_cycle->pathes.nelts : 10;
@@ -472,12 +436,13 @@
 
 ngx_int_t ngx_create_pidfile(ngx_cycle_t *cycle, ngx_cycle_t *old_cycle)
 {
+    ngx_uint_t        trunc;
     size_t            len;
     u_char           *name, pid[NGX_INT64_LEN + 1];
     ngx_file_t        file;
     ngx_core_conf_t  *ccf, *old_ccf;
 
-    if (old_cycle && old_cycle->conf_ctx == NULL) {
+    if (!ngx_test_config && old_cycle && old_cycle->conf_ctx == NULL) {
 
         /*
          * do not create the pid file in the first ngx_init_cycle() call
@@ -489,7 +454,7 @@
 
     ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
 
-    if (old_cycle) {
+    if (!ngx_test_config && old_cycle) {
         old_ccf = (ngx_core_conf_t *) ngx_get_conf(old_cycle->conf_ctx,
                                                    ngx_core_module);
 
@@ -506,8 +471,10 @@
     file.name = (ngx_inherited && getppid() > 1) ? ccf->newpid : ccf->pid;
     file.log = cycle->log;
 
+    trunc = ngx_test_config ? 0: NGX_FILE_TRUNCATE;
+
     file.fd = ngx_open_file(file.name.data, NGX_FILE_RDWR,
-                            NGX_FILE_CREATE_OR_OPEN|NGX_FILE_TRUNCATE);
+                            NGX_FILE_CREATE_OR_OPEN|trunc);
 
     if (file.fd == NGX_INVALID_FILE) {
         ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
@@ -515,8 +482,10 @@
         return NGX_ERROR;
     }
 
-    if (ngx_write_file(&file, pid, len, 0) == NGX_ERROR) {
-        return NGX_ERROR;
+    if (!ngx_test_config) {
+        if (ngx_write_file(&file, pid, len, 0) == NGX_ERROR) {
+            return NGX_ERROR;
+        }
     }
 
     if (ngx_close_file(file.fd) == NGX_FILE_ERROR) {
