diff --git a/NEWS b/NEWS
index 8590d07c80b4cb3a30677470f27fce8b87cb089f..32881250a4980ab80c5954671cc4cbb3b524b439 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,11 @@
+Knot Resolver 1.3.2 (2017-07-xx)
+================================
+
+Bugfixes
+--------
+- daemon: check existence of config file even if rundir isn't specified
+
+
 Knot Resolver 1.3.1 (2017-06-23)
 ================================
 
diff --git a/daemon/engine.c b/daemon/engine.c
index 08b02c647acaf9a8abdc794450c34de266a775c1..034ab836faae76d1e64733f50b882c96a386cc5c 100644
--- a/daemon/engine.c
+++ b/daemon/engine.c
@@ -765,10 +765,10 @@ static int engine_loadconf(struct engine *engine, const char *config_path)
 		return kr_error(ENOEXEC);
 	}
 	/* Load config file */
-	if (strcmp(config_path, "-") == 0) {
-		return ret; /* No config, no defaults. */
-	}
-	if(access(config_path, F_OK ) != -1 ) {
+	if (config_path) {
+		if (strcmp(config_path, "-") == 0) {
+			return ret; /* No config and no defaults. */
+		}
 		ret = l_dosandboxfile(engine->L, config_path);
 	}
 	if (ret == 0) {
diff --git a/daemon/engine.h b/daemon/engine.h
index a4f6ab5f45d8f5f55f037c66e07b56e5561f02e9..3497962abccb5aaaafa081559469425e22c99722 100644
--- a/daemon/engine.h
+++ b/daemon/engine.h
@@ -78,12 +78,19 @@ int engine_cmd(struct lua_State *L, const char *str, bool raw);
 int engine_pcall(struct lua_State *L, int argc);
 
 int engine_ipc(struct engine *engine, const char *expr);
+
+/** Start the lua engine and execute the config.
+ *
+ * @note Special path "-" means that even default config won't be done
+ *       (like listening on localhost).
+ */
 int engine_start(struct engine *engine, const char *config_path);
 void engine_stop(struct engine *engine);
 int engine_register(struct engine *engine, const char *module, const char *precedence, const char* ref);
 int engine_unregister(struct engine *engine, const char *module);
 void engine_lualib(struct engine *engine, const char *name, int (*lib_cb) (struct lua_State *));
 
+
 /** Return engine light userdata. */
 struct engine *engine_luaget(struct lua_State *L);
 
diff --git a/daemon/main.c b/daemon/main.c
index 6de5e5cd3a32628326213b31c113af2343ccc08d..ad665499097ce5ade28be97c8a3ea14c2f0ac1da 100644
--- a/daemon/main.c
+++ b/daemon/main.c
@@ -548,12 +548,16 @@ int main(int argc, char **argv)
 			kr_log_error("[system] rundir '%s': %s\n", rundir, strerror(errno));
 			return EXIT_FAILURE;
 		}
-		if(config && strcmp(config, "-") != 0 && access(config, R_OK) != 0) {
-			kr_log_error("[system] rundir '%s'\n", rundir);
-			kr_log_error("[system] config '%s': %s\n", config, strerror(errno));
-			return EXIT_FAILURE;
-		}
 	}
+
+	if (config && strcmp(config, "-") != 0 && access(config, R_OK) != 0) {
+		kr_log_error("[system] config '%s': %s\n", config, strerror(errno));
+		return EXIT_FAILURE;
+	}
+	if (!config && access("config", R_OK) == 0) {
+		config = "config";
+	}
+
 #ifndef CAN_FORK_EARLY
 	/* Forking is currently broken with libuv. We need libuv to bind to
 	 * sockets etc. before forking, but at the same time can't touch it before
@@ -655,7 +659,7 @@ int main(int argc, char **argv)
 	worker->loop = loop;
 	loop->data = worker;
 
-	ret = engine_start(&engine, config ? config : "config");
+	ret = engine_start(&engine, config);
 	if (ret != 0) {
 		ret = EXIT_FAILURE;
 		goto cleanup;