diff --git a/inc/ini/ini.h b/inc/ini/ini.h
index c95bf7788f2c483b4f61e8ce21844c05e473394c..646a145e4f76feeb42bcd59cab8bed15eef23318 100644
--- a/inc/ini/ini.h
+++ b/inc/ini/ini.h
@@ -73,7 +73,7 @@ int ini_parse_string(const char *string, ini_handler handler, void *user);
    configparser. If allowed, ini_parse() will call the handler with the same
    name for each subsequent line parsed. */
 #ifndef INI_ALLOW_MULTILINE
-#define INI_ALLOW_MULTILINE 1
+#define INI_ALLOW_MULTILINE 0
 #endif
 
 /* Nonzero to allow a UTF-8 BOM sequence (0xEF 0xBB 0xBF) at the start of
@@ -131,7 +131,7 @@ int ini_parse_string(const char *string, ini_handler handler, void *user);
    name and value NULL). Default is to only call the handler on
    each name=value pair. */
 #ifndef INI_CALL_HANDLER_ON_NEW_SECTION
-#define INI_CALL_HANDLER_ON_NEW_SECTION 1
+#define INI_CALL_HANDLER_ON_NEW_SECTION 0
 #endif
 
 /* Nonzero to allow a name without a value (no '=' or ':' on the line) and
diff --git a/inc/lektor/config.h b/inc/lektor/config.h
index d253fcc8810edd0c35f8f69ea652c57d363e435a..56c28206b8a2dd70264469a4908fd9005dc42146 100644
--- a/inc/lektor/config.h
+++ b/inc/lektor/config.h
@@ -60,7 +60,7 @@ int config_open(sqlite3 *db);
 /* Get the path to the config file that may be red, taking into account the
    priority between existing files. The returned path is a path to an existing
    file. If no file is found, returns a non zero value. Returns 1 otherwise. */
-int config_detect_file(char **conf, size_t conf_len);
+int config_detect_file(char *conf, size_t conf_len);
 
 /* Create and read the configuration in the conf file and write it into
    lkt_conf. The type is opaque because it's a C++ class.
diff --git a/src/config.c b/src/config.c
index 4a4771c096feb07f69b871a43d7106a2f932135f..37498d268c01d7bfeea4644a942867aa4bd7b86c 100644
--- a/src/config.c
+++ b/src/config.c
@@ -109,7 +109,7 @@ handler(void *user, const char *section, const char *name, const char *value)
 }
 
 int
-config_detect_file(char **conf, size_t conf_len)
+config_detect_file(char *conf, size_t conf_len)
 {
     bool is_malloc = false;
     struct passwd *pw = getpwuid(getuid());
@@ -118,20 +118,13 @@ config_detect_file(char **conf, size_t conf_len)
     if (conf == NULL)
         return 1;
 
-    if (*conf == NULL) {
-        *conf = (char *) calloc(conf_len, sizeof(char));
-
-        if (!*conf)
-            return ENOMEM;
-    }
-
-    memset(*conf, 0, conf_len * sizeof(char));
+    memset(conf, 0, conf_len * sizeof(char));
 
     /* Try the current working dir config file. */
-    if (getcwd(*conf, conf_len - 1) != NULL) {
-        strncat(*conf, "/lektor.ini", conf_len - 1);
-        fprintf(stderr, " . config_detect_file: trying %s\n", *conf);
-        if (!access(*conf, R_OK))
+    if (getcwd(conf, conf_len - 1) != NULL) {
+        strncat(conf, "/lektor.ini", conf_len - 1);
+        fprintf(stderr, " . config_detect_file: trying %s\n", conf);
+        if (!access(conf, R_OK))
             goto found;
     }
 
@@ -143,39 +136,39 @@ config_detect_file(char **conf, size_t conf_len)
         home = pw->pw_dir;
     if (!home || (strlen(home) >= conf_len))
         goto no_config_directory;
-    memcpy(*conf, home, (strlen(home) + 1) * sizeof(char));
-    strncat(*conf, "/.config/lektor/lektor.ini", conf_len - 1);
-    fprintf(stderr, " . config_detect_file: trying %s\n", *conf);
-    if (!access(*conf, R_OK | F_OK))
+    memcpy(conf, home, (strlen(home) + 1) * sizeof(char));
+    strncat(conf, "/.config/lektor/lektor.ini", conf_len - 1);
+    fprintf(stderr, " . config_detect_file: trying %s\n", conf);
+    if (!access(conf, R_OK | F_OK))
         goto found;
 
 no_config_directory:
     /* Try the '/opt/lektor' file. */
-    memcpy(*conf, "/opt/lektor/lektor.ini", sizeof("/opt/lektor/lektor.ini"));
-    fprintf(stderr, " . config_detect_file: trying %s\n", *conf);
-    if (!access(*conf, R_OK))
+    memcpy(conf, "/opt/lektor/lektor.ini", sizeof("/opt/lektor/lektor.ini"));
+    fprintf(stderr, " . config_detect_file: trying %s\n", conf);
+    if (!access(conf, R_OK))
         goto found;
 
     /* Try the '/usr/local/etc/lektor.ini' file. */
-    memcpy(*conf, "/usr/local/etc/lektor.ini", sizeof("/opt/lektor/lektor.ini"));
-    fprintf(stderr, " . config_detect_file: trying %s\n", *conf);
-    if (!access(*conf, R_OK))
+    memcpy(conf, "/usr/local/etc/lektor.ini", sizeof("/opt/lektor/lektor.ini"));
+    fprintf(stderr, " . config_detect_file: trying %s\n", conf);
+    if (!access(conf, R_OK))
         goto found;
 
     /* Try the '/etc/lektor.ini' file. */
-    memcpy(*conf, "/etc/lektor.ini", sizeof("/etc/lektor.ini"));
-    fprintf(stderr, " . config_detect_file: trying %s\n", *conf);
-    if (!access(*conf, R_OK))
+    memcpy(conf, "/etc/lektor.ini", sizeof("/etc/lektor.ini"));
+    fprintf(stderr, " . config_detect_file: trying %s\n", conf);
+    if (!access(conf, R_OK))
         goto found;
 
     /* Error */
     fprintf(stderr, "config_detect_file: an error occured with file %s: %s",
-            *conf, strerror(errno));
+            conf, strerror(errno));
     if (is_malloc)
-        free(*conf);
+        free(conf);
     return 1;
 found:
-    fprintf(stderr, " . config_detect_file: using file %s\n", *conf);
+    fprintf(stderr, " . config_detect_file: using file %s\n", conf);
     return 0;
 }
 
@@ -198,10 +191,10 @@ config_new(sqlite3 *db, const char *conf)
 int
 config_open(sqlite3 *db)
 {
-    char *conf_file = NULL;
+    char conf_file[PATH_MAX];
     int ret = 1;
 
-    if (config_detect_file(&conf_file, PATH_MAX)) {
+    if (config_detect_file(conf_file, PATH_MAX)) {
         fprintf(stderr, " ! config_open: error while searching for a config file\n");
         goto error;
     }
@@ -213,7 +206,5 @@ config_open(sqlite3 *db)
 
     ret = 0;
 error:
-    if (conf_file)
-        free(conf_file);
     return ret;
 }
diff --git a/src/net/listen.c b/src/net/listen.c
index 71072802583a2d693e3a0d2637126c465f5ba723..c51a2f3fb41f0a3706ee24d9d0fe28acb2489759 100644
--- a/src/net/listen.c
+++ b/src/net/listen.c
@@ -716,7 +716,7 @@ lkt_listen(void)
     char *host      = (char *) calloc(HOST_NAME_MAX, sizeof(char));
     char port[7];   /* Maximal port number is 65535, +2 for '\n' and '\0' */
     char player_mod[INI_MAX_LINE];
-    char *conf_file;
+    char conf_file[PATH_MAX];
     memset(&srv, 0, sizeof(struct lkt_state));
 
     /* Initialize the system. */
@@ -726,7 +726,7 @@ lkt_listen(void)
         return 1;
     }
 
-    if (config_detect_file(&conf_file, PATH_MAX)) {
+    if (config_detect_file(conf_file, PATH_MAX)) {
         fprintf(stderr, " ! error while searching for a config file\n");
         return 1;
     }