diff --git a/nest/proto.c b/nest/proto.c
index 3dcb342..89fe8a5 100644
--- a/nest/proto.c
+++ b/nest/proto.c
@@ -913,6 +913,13 @@ protos_commit(struct config *new, struct config *old, int force_reconfig, int ty
 	nc = sym->def;
 	nc->proto = p;
 
+	/* Keep protocol state during soft config */
+	if (type == RECONFIG_SOFT && (p->disabled != nc->disabled))
+	{
+	  log(L_INFO "Keeping state of protocol %s", p->name);
+	  nc->disabled = p->disabled;
+	}
+
 	/* We will try to reconfigure protocol p */
 	if (! force_reconfig && proto_reconfigure(p, oc, nc, type))
 	  continue;
