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) {
