diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c
index a5a907a..99ed1cb 100644
--- a/src/core/ngx_conf_file.c
+++ b/src/core/ngx_conf_file.c
@@ -19,7 +19,6 @@
     NGX_CONF_TAKE7,
     NGX_CONF_TAKE8,
     NGX_CONF_TAKE9,
-    NGX_CONF_TAKE10
 };
 
 static int ngx_conf_read_token(ngx_conf_t *cf);
@@ -625,47 +624,22 @@
 {
     char  *p = conf;
 
-    int         size, len, scale, *np;
-    char        last;
+    int        *np;
     ngx_str_t  *value;
 
 
     np = (int *) (p + cmd->offset);
-
     if (*np != NGX_CONF_UNSET) {
         return "is duplicate";
     }
 
     value = (ngx_str_t *) cf->args->elts;
 
-    len = value[1].len;
-    last = value[1].data[len - 1];
-
-    switch (last) {
-    case 'K':
-    case 'k':
-        len--;
-        scale = 1024;
-        break;
-
-    case 'M':
-    case 'm':
-        len--;
-        scale = 1024 * 1024;
-        break;
-
-    default:
-        scale = 1;
-    }
-
-    size = ngx_atoi(value[1].data, len);
-    if (size == NGX_ERROR) {
+    *np = ngx_parse_size(&value[1]);
+    if (*np == NGX_ERROR) {
         return "invalid value";
     }
 
-    size *= scale;
-    *np = size;
-
     if (cmd->bounds) {
         return cmd->bounds->check(cf, cmd->bounds, np);
     }
@@ -685,90 +659,20 @@
 
 
     np = (int *) (p + cmd->offset);
-
     if (*np != NGX_CONF_UNSET) {
         return "is duplicate";
     }
 
     value = (ngx_str_t *) cf->args->elts;
-    start = value[1].data;
-    len = 0;
-    total = 0;
 
-    for (i = 0; /* void */ ; i++) {
-
-        if (i < value[1].len) {
-            if (value[1].data[i] != ' ') {
-                len++;
-                continue;
-            }
-
-            if (value[1].data[i] == ' ' && len == 0) {
-                start = &value[1].data[i + 1];
-                continue;
-            }
-        }
-
-        if (len == 0) {
-            break;
-        }
-
-        last = value[1].data[i - 1];
-
-        switch (last) {
-        case 'm':
-            len--;
-            max = 35791;
-            scale = 1000 * 60;
-            break;
-
-        case 'h':
-            len--;
-            max = 596;
-            scale = 1000 * 60 * 60;
-            break;
-
-        case 'd':
-            len--;
-            max = 24;
-            scale = 1000 * 60 * 60 * 24;
-            break;
-
-        case 's':
-            len--;
-            if (value[1].data[i - 2] == 'm') {
-                len--;
-                max = 2147483647;
-                scale = 1;
-                break;
-            }
-            /* fall thru */
-
-        default:
-            max = 2147483;
-            scale = 1000;
-        }
-
-        size = ngx_atoi(start, len);
-        if (size < 0) {
-            return "invalid value";
-        }
-
-        if ((u_int) size > max) {
-            return "value must be less than 597 hours";
-        }
-
-        total += size * scale;
-
-        if (i >= value[1].len) {
-            break;
-        }
-
-        len = 0;
-        start = &value[1].data[i + 1];
+    *np = ngx_parse_time(&value[1], 0);
+    if (*np == NGX_ERROR) {
+        return "invalid value";
     }
 
-    *np = total;
+    if (*np == NGX_PARSE_LARGE_TIME) {
+        return "value must be less than 597 hours";
+    }
 
     if (cmd->bounds) {
         return cmd->bounds->check(cf, cmd->bounds, np);
@@ -789,102 +693,20 @@
 
 
     np = (int *) (p + cmd->offset);
-
     if (*np != NGX_CONF_UNSET) {
         return "is duplicate";
     }
 
     value = (ngx_str_t *) cf->args->elts;
-    start = value[1].data;
-    len = 0;
-    total = 0;
 
-    for (i = 0; /* void */ ; i++) {
-
-        if (i < value[1].len) {
-            if (value[1].data[i] != ' ') {
-                len++;
-                continue;
-            }
-
-            if (value[1].data[i] == ' ' && len == 0) {
-                start = &value[1].data[i + 1];
-                continue;
-            }
-        }
-
-        if (len == 0) {
-            break;
-        }
-
-        last = value[1].data[i - 1];
-
-        switch (last) {
-        case 'm':
-            len--;
-            max = 35791394;
-            scale = 60;
-            break;
-
-        case 'h':
-            len--;
-            max = 596523;
-            scale = 60 * 60;
-            break;
-
-        case 'd':
-            len--;
-            max = 24855;
-            scale = 60 * 60 * 24;
-            break;
-
-        case 'w':
-            len--;
-            max = 3550;
-            scale = 60 * 60 * 24 * 7;
-            break;
-
-        case 'M':
-            len--;
-            max = 828;
-            scale = 60 * 60 * 24 * 30;
-            break;
-
-        case 'y':
-            len--;
-            max = 68;
-            scale = 60 * 60 * 24 * 365;
-            break;
-
-        case 's':
-            len--;
-            /* fall thru */
-
-        default:
-            max = 2147483647;
-            scale = 1;
-        }
-
-        size = ngx_atoi(start, len);
-        if (size < 0) {
-            return "invalid value";
-        }
-
-        if ((u_int) size > max) {
-            return "value must be less than 68 years";
-        }
-
-        total += size * scale;
-
-        if (i >= value[1].len) {
-            break;
-        }
-
-        len = 0;
-        start = &value[1].data[i + 1];
+    *np = ngx_parse_time(&value[1], 1);
+    if (*np == NGX_ERROR) {
+        return "invalid value";
     }
 
-    *np = total;
+    if (*np == NGX_PARSE_LARGE_TIME) {
+        return "value must be less than 68 years";
+    }
 
     if (cmd->bounds) {
         return cmd->bounds->check(cf, cmd->bounds, np);
@@ -898,14 +720,11 @@
 {
     char  *p = conf;
 
-    int          len, scale;
-    char         last;
     ngx_str_t   *value;
     ngx_bufs_t  *bufs;
 
 
     bufs = (ngx_bufs_t *) (p + cmd->offset);
-
     if (bufs->num) {
         return "is duplicate";
     }
@@ -917,33 +736,11 @@
         return "invalid value";
     }
 
-    len = value[2].len;
-    last = value[2].data[len - 1];
-
-    switch (last) {
-    case 'K':
-    case 'k':
-        len--;
-        scale = 1024;
-        break;
-
-    case 'M':
-    case 'm':
-        len--;
-        scale = 1024 * 1024;
-        break;
-
-    default:
-        scale = 1;
-    }
-
-    bufs->size = ngx_atoi(value[2].data, len);
+    bufs->size = ngx_parse_size(&value[2]);
     if (bufs->size == NGX_ERROR || bufs->size == 0) {
         return "invalid value";
     }
 
-    bufs->size *= scale;
-
     return NGX_CONF_OK;
 }
 
diff --git a/src/core/ngx_conf_file.h b/src/core/ngx_conf_file.h
index e09cc65..c40e40e 100644
--- a/src/core/ngx_conf_file.h
+++ b/src/core/ngx_conf_file.h
@@ -22,7 +22,6 @@
 #define NGX_CONF_TAKE7       0x00000080
 #define NGX_CONF_TAKE8       0x00000100
 #define NGX_CONF_TAKE9       0x00000200
-#define NGX_CONF_TAKE10      0x00000400
 
 #define NGX_CONF_TAKE1234    (NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3   \
                               |NGX_CONF_TAKE4)
diff --git a/src/core/ngx_core.h b/src/core/ngx_core.h
index 6526471..1db2e41 100644
--- a/src/core/ngx_core.h
+++ b/src/core/ngx_core.h
@@ -19,6 +19,7 @@
 typedef struct ngx_connection_s  ngx_connection_t;
 
 #include <ngx_string.h>
+#include <ngx_parse.h>
 #include <ngx_log.h>
 #include <ngx_alloc.h>
 #include <ngx_hunk.h>
diff --git a/src/core/ngx_parse.c b/src/core/ngx_parse.c
new file mode 100644
index 0000000..213b2f6
--- /dev/null
+++ b/src/core/ngx_parse.c
@@ -0,0 +1,205 @@
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+
+
+int ngx_parse_size(ngx_str_t *line)
+{
+    int   len, scale, size;
+    char  last;
+
+    len = line->len;
+    last = line->data[len - 1];
+
+    switch (last) {
+    case 'K':
+    case 'k':
+        len--;
+        scale = 1024;
+        break;
+
+    case 'M':
+    case 'm':
+        len--;
+        scale = 1024 * 1024;
+        break;
+
+    default:
+        scale = 1;
+    }
+
+    size = ngx_atoi(line->data, len);
+    if (size == NGX_ERROR) {
+        return NGX_ERROR;
+    }
+
+    size *= scale;
+
+    return size;
+}
+
+
+int ngx_parse_time(ngx_str_t *line, int sec)
+{
+    int     value, total, len, scale;
+    u_int   max, i;
+    char   *start, last;
+    enum {
+        st_start = 0,
+        st_year,
+        st_month,
+        st_week,
+        st_day,
+        st_hour,
+        st_min,
+        st_sec,
+        st_msec,
+        st_last
+    } step;
+
+
+    start = line->data;
+    len = 0;
+    total = 0;
+    step = sec ? st_start : st_month;
+
+    for (i = 0; /* void */ ; i++) {
+
+        if (i < line->len) {
+            if (line->data[i] != ' ') {
+                len++;
+                continue;
+            }
+
+            if (line->data[i] == ' ' && len == 0) {
+                start = &line->data[i + 1];
+                continue;
+            }
+        }
+
+        if (len == 0) {
+            break;
+        }
+
+        last = line->data[i - 1];
+
+        switch (last) {
+        case 'y':
+            if (step > st_start) {
+                return NGX_ERROR;
+            }
+            step = st_year;
+            len--;
+            max = 68;
+            scale = 60 * 60 * 24 * 365;
+            break;
+
+        case 'M':
+            if (step > st_year) {
+                return NGX_ERROR;
+            }
+            step = st_month;
+            len--;
+            max = 828;
+            scale = 60 * 60 * 24 * 30;
+            break;
+
+        case 'w':
+            if (step > st_month) {
+                return NGX_ERROR;
+            }
+            step = st_week;
+            len--;
+            max = 3550;
+            scale = 60 * 60 * 24 * 7;
+            break;
+
+        case 'd':
+            if (step > st_week) {
+                return NGX_ERROR;
+            }
+            step = st_day;
+            len--;
+            max = 24855;
+            scale = 60 * 60 * 24;
+            break;
+
+        case 'h':
+            if (step > st_day) {
+                return NGX_ERROR;
+            }
+            step = st_hour;
+            len--;
+            max = 596523;
+            scale = 60 * 60;
+            break;
+
+        case 'm':
+            if (step > st_hour) {
+                return NGX_ERROR;
+            }
+            step = st_min;
+            len--;
+            max = 35791394;
+            scale = 60;
+            break;
+
+        case 's':
+            len--;
+
+            if (line->data[i - 2] == 'm') {
+                if (sec || step > st_sec) {
+                    return NGX_ERROR;
+                }
+                step = st_msec;
+                len--;
+                max = 2147483647;
+                scale = 1;
+                break;
+            }
+
+            if (step > st_min) {
+                return NGX_ERROR;
+            }
+
+            step = st_sec;
+            max = 2147483647;
+            scale = 1;
+            break;
+
+        default:
+            step = st_last;
+            max = 2147483647;
+            scale = 1;
+        }
+
+        value = ngx_atoi(start, len);
+        if (value == NGX_ERROR) {
+            return NGX_ERROR;
+        }
+
+        if (step != st_msec && !sec) {
+            scale *= 1000;
+            max /= 1000;
+        }
+
+        if ((u_int) value > max) {
+            return NGX_PARSE_LARGE_TIME;
+        }
+
+        total += value * scale;
+
+        if ((u_int) total > 2147483647) {
+            return NGX_PARSE_LARGE_TIME;
+        }
+
+        if (i >= line->len) {
+            break;
+        }
+
+        len = 0;
+        start = &line->data[i + 1];
+    }
+
+    return total;
+}
diff --git a/src/core/ngx_parse.h b/src/core/ngx_parse.h
new file mode 100644
index 0000000..a92eaea
--- /dev/null
+++ b/src/core/ngx_parse.h
@@ -0,0 +1,16 @@
+#ifndef _NGX_PARSE_H_INCLUDED_
+#define _NGX_PARSE_H_INCLUDED_
+
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+
+
+#define NGX_PARSE_LARGE_TIME  -2
+
+
+int ngx_parse_size(ngx_str_t *line);
+int ngx_parse_time(ngx_str_t *line, int sec);
+
+
+#endif /* _NGX_PARSE_H_INCLUDED_ */
