diff --git a/lightningd/bitcoind.c b/lightningd/bitcoind.c
index 89a9e22d9..2a4b28a18 100644
--- a/lightningd/bitcoind.c
+++ b/lightningd/bitcoind.c
@@ -47,7 +47,7 @@ static void plugin_config_cb(const char *buffer,
 			     const jsmntok_t *idtok,
 			     struct plugin *plugin)
 {
-	plugin->plugin_state = CONFIGURED;
+	plugin->plugin_state = INIT_COMPLETE;
 	io_break(plugin);
 }
 
@@ -77,8 +77,9 @@ static void wait_plugin(struct bitcoind *bitcoind, const char *method,
 	 * before responding to `init`).
 	 * Note that lightningd/plugin will not send `init` to an already
 	 * configured plugin. */
-	if (p->plugin_state != CONFIGURED)
+	if (p->plugin_state == NEEDS_INIT)
 		config_plugin(p);
+
 	strmap_add(&bitcoind->pluginsmap, method, p);
 }
 
diff --git a/lightningd/plugin.c b/lightningd/plugin.c
index 01e5e4d67..ef1b81741 100644
--- a/lightningd/plugin.c
+++ b/lightningd/plugin.c
@@ -969,6 +969,7 @@ bool plugin_parse_getmanifest_response(const char *buffer,
 	    !plugin_hooks_add(plugin, buffer, resulttok))
 		return false;
 
+	plugin->plugin_state = NEEDS_INIT;
 	return true;
 }
 
@@ -1167,7 +1168,7 @@ static void plugin_config_cb(const char *buffer,
 			     const jsmntok_t *idtok,
 			     struct plugin *plugin)
 {
-	plugin->plugin_state = CONFIGURED;
+	plugin->plugin_state = INIT_COMPLETE;
 }
 
 void
@@ -1240,7 +1241,7 @@ void plugins_config(struct plugins *plugins)
 {
 	struct plugin *p;
 	list_for_each(&plugins->plugins, p, list) {
-		if (p->plugin_state == UNCONFIGURED)
+		if (p->plugin_state == NEEDS_INIT)
 			plugin_config(p);
 	}
 
diff --git a/lightningd/plugin.h b/lightningd/plugin.h
index 1a47232dd..0d26325e9 100644
--- a/lightningd/plugin.h
+++ b/lightningd/plugin.h
@@ -22,8 +22,14 @@
 
 
 enum plugin_state {
+	/* We have to ask getmanifest */
 	UNCONFIGURED,
-	CONFIGURED
+	/* Got `getmanifest` reply, now we need to send `init`. */
+	NEEDS_INIT,
+	/* We have to get `init` response */
+	AWAITING_INIT_RESPONSE,
+	/* We have `init` response. */
+	INIT_COMPLETE
 };
 
 /**
diff --git a/lightningd/plugin_control.c b/lightningd/plugin_control.c
index 0ed7f951e..c0fdad82d 100644
--- a/lightningd/plugin_control.c
+++ b/lightningd/plugin_control.c
@@ -25,7 +25,7 @@ static struct command_result *plugin_dynamic_list_plugins(struct command *cmd)
 		json_object_start(response, NULL);
 		json_add_string(response, "name", p->cmd);
 		json_add_bool(response, "active",
-		              p->plugin_state == CONFIGURED);
+		              p->plugin_state == INIT_COMPLETE);
 		json_object_end(response);
 	}
 	json_array_end(response);
@@ -69,14 +69,14 @@ static void plugin_dynamic_config_callback(const char *buffer,
 {
 	struct plugin *p;
 
-	dp->plugin->plugin_state = CONFIGURED;
+	dp->plugin->plugin_state = INIT_COMPLETE;
 	/* Reset the timer only now so that we are either configured, or
 	 * killed. */
 	tal_free(dp->plugin->timeout_timer);
 	tal_del_destructor2(dp->plugin, plugin_dynamic_crash, dp);
 
 	list_for_each(&dp->plugin->plugins->plugins, p, list) {
-		if (p->plugin_state != CONFIGURED)
+		if (p->plugin_state != INIT_COMPLETE)
 			return;
 	}