diff --git a/lib/command.c b/lib/command.c
index 2084160..37767e9 100644
--- a/lib/command.c
+++ b/lib/command.c
@@ -2794,34 +2794,69 @@
   return cmd_execute_command_real(vline, FILTER_STRICT, vty, cmd);
 }
 
+/**
+ * Parse one line of config, walking up the parse tree attempting to find a match
+ *
+ * @param vty The vty context in which the command should be executed.
+ * @param cmd Pointer where the struct cmd_element* of the match command
+ *            will be stored, if any.  May be set to NULL if this info is
+ *            not needed.
+ * @param use_daemon Boolean to control whether or not we match on CMD_SUCCESS_DAEMON
+ *                   or not.
+ * @return The status of the command that has been executed or an error code
+ *         as to why no command could be executed.
+ */
+int
+command_config_read_one_line (struct vty *vty, struct cmd_element **cmd, int use_daemon)
+{
+  vector vline;
+  int saved_node;
+  int ret;
+
+  vline = cmd_make_strvec (vty->buf);
+
+  /* In case of comment line */
+  if (vline == NULL)
+    return CMD_SUCCESS;
+
+  /* Execute configuration command : this is strict match */
+  ret = cmd_execute_command_strict (vline, vty, cmd);
+
+  saved_node = vty->node;
+
+  while (!(use_daemon && ret == CMD_SUCCESS_DAEMON) &&
+	 ret != CMD_SUCCESS && ret != CMD_WARNING &&
+	 ret != CMD_ERR_NOTHING_TODO && vty->node != CONFIG_NODE) {
+    vty->node = node_parent(vty->node);
+    ret = cmd_execute_command_strict (vline, vty, NULL);
+  }
+
+  // If climbing the tree did not work then ignore the command and
+  // stay at the same node
+  if (!(use_daemon && ret == CMD_SUCCESS_DAEMON) &&
+      ret != CMD_SUCCESS && ret != CMD_WARNING &&
+      ret != CMD_ERR_NOTHING_TODO)
+    {
+      vty->node = saved_node;
+    }
+
+  cmd_free_strvec (vline);
+
+  return ret;
+}
+
 /* Configration make from file. */
 int
 config_from_file (struct vty *vty, FILE *fp, unsigned int *line_num)
 {
   int ret;
   *line_num = 0;
-  vector vline;
 
   while (fgets (vty->buf, VTY_BUFSIZ, fp))
     {
       ++(*line_num);
-      vline = cmd_make_strvec (vty->buf);
 
-      /* In case of comment line */
-      if (vline == NULL)
-	continue;
-      /* Execute configuration command : this is strict match */
-      ret = cmd_execute_command_strict (vline, vty, NULL);
-
-      /* Try again with setting node to CONFIG_NODE */
-      while (ret != CMD_SUCCESS && ret != CMD_WARNING
-	     && ret != CMD_ERR_NOTHING_TODO && vty->node != CONFIG_NODE)
-	{
-	  vty->node = node_parent(vty->node);
-	  ret = cmd_execute_command_strict (vline, vty, NULL);
-	}
-
-      cmd_free_strvec (vline);
+      ret = command_config_read_one_line (vty, NULL, 0);
 
       if (ret != CMD_SUCCESS && ret != CMD_WARNING
 	  && ret != CMD_ERR_NOTHING_TODO)
