diff --git a/src/collectd.c b/src/collectd.c
index bc69a3b..7991c93 100644
--- a/src/collectd.c
+++ b/src/collectd.c
@@ -41,6 +41,7 @@
  */
 char hostname_g[DATA_MAX_NAME_LEN];
 int  interval_g;
+int  timeout_g;
 #if HAVE_LIBKSTAT
 kstat_ctl_t *kc;
 #endif /* HAVE_LIBKSTAT */
@@ -148,6 +149,18 @@ static int init_global_variables (void)
 	}
 	DEBUG ("interval_g = %i;", interval_g);
 
+	str = global_option_get ("Timeout");
+	if (str == NULL)
+		str = "10";
+	timeout_g = atoi (str);
+	if (timeout_g <= 0)
+	{
+		fprintf (stderr, "Cannot set the timeout to a correct value.\n"
+				"Please check your settings.\n");
+		return (-1);
+	}
+	DEBUG ("timeout_g = %i;", timeout_g);
+
 	if (init_hostname () != 0)
 		return (-1);
 	DEBUG ("hostname_g = %s;", hostname_g);
diff --git a/src/collectd.h b/src/collectd.h
index 3d8998f..91b1320 100644
--- a/src/collectd.h
+++ b/src/collectd.h
@@ -294,5 +294,6 @@ typedef bool _Bool;
 
 extern char hostname_g[];
 extern int  interval_g;
+extern int  timeout_g;
 
 #endif /* COLLECTD_H */
diff --git a/src/configfile.c b/src/configfile.c
index 1a957f6..d756866 100644
--- a/src/configfile.c
+++ b/src/configfile.c
@@ -99,6 +99,7 @@ static cf_global_option_t cf_global_options[] =
 	{"FQDNLookup",  NULL, "false"},
 	{"Interval",    NULL, "10"},
 	{"ReadThreads", NULL, "5"},
+	{"Timeout",     NULL, "2"},
 	{"PreCacheChain",  NULL, "PreCache"},
 	{"PostCacheChain", NULL, "PostCache"}
 };
diff --git a/src/utils_cache.c b/src/utils_cache.c
index 648c54d..69ea864 100644
--- a/src/utils_cache.c
+++ b/src/utils_cache.c
@@ -319,7 +319,7 @@ int uc_check_timeout (void)
   while (c_avl_iterator_next (iter, (void *) &key, (void *) &ce) == 0)
   {
     /* If entry has not been updated, add to `keys' array */
-    if ((now - ce->last_update) >= (2 * ce->interval))
+    if ((now - ce->last_update) >= (timeout_g * ce->interval))
     {
       char **tmp;
 
