diff --git a/isisd/isisd.c b/isisd/isisd.c
index 130e752..55a62d3 100644
--- a/isisd/isisd.c
+++ b/isisd/isisd.c
@@ -2010,159 +2010,6 @@
   return;
 }
 
-static int
-set_lsp_gen_interval (struct vty *vty, struct isis_area *area,
-                      uint16_t interval, int level)
-{
-  int lvl;
-
-  for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; ++lvl)
-    {
-      if (!(lvl & level))
-        continue;
-
-      if (interval >= area->lsp_refresh[lvl-1])
-        {
-          vty_out (vty, "LSP gen interval %us must be less than "
-                   "the LSP refresh interval %us%s",
-                   interval, area->lsp_refresh[lvl-1], VTY_NEWLINE);
-          return CMD_ERR_AMBIGUOUS;
-        }
-    }
-
-  for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; ++lvl)
-    {
-      if (!(lvl & level))
-        continue;
-      area->lsp_gen_interval[lvl-1] = interval;
-    }
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (lsp_gen_interval,
-       lsp_gen_interval_cmd,
-       "lsp-gen-interval <1-120>",
-       "Minimum interval between regenerating same LSP\n"
-       "Minimum interval in seconds\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = atoi (argv[0]);
-  level = IS_LEVEL_1 | IS_LEVEL_2;
-  return set_lsp_gen_interval (vty, area, interval, level);
-}
-
-DEFUN (no_lsp_gen_interval,
-       no_lsp_gen_interval_cmd,
-       "no lsp-gen-interval",
-       NO_STR
-       "Minimum interval between regenerating same LSP\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = DEFAULT_MIN_LSP_GEN_INTERVAL;
-  level = IS_LEVEL_1 | IS_LEVEL_2;
-  return set_lsp_gen_interval (vty, area, interval, level);
-}
-
-ALIAS (no_lsp_gen_interval,
-       no_lsp_gen_interval_arg_cmd,
-       "no lsp-gen-interval <1-120>",
-       NO_STR
-       "Minimum interval between regenerating same LSP\n"
-       "Minimum interval in seconds\n")
-
-DEFUN (lsp_gen_interval_l1,
-       lsp_gen_interval_l1_cmd,
-       "lsp-gen-interval level-1 <1-120>",
-       "Minimum interval between regenerating same LSP\n"
-       "Set interval for level 1 only\n"
-       "Minimum interval in seconds\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = atoi (argv[0]);
-  level = IS_LEVEL_1;
-  return set_lsp_gen_interval (vty, area, interval, level);
-}
-
-DEFUN (no_lsp_gen_interval_l1,
-       no_lsp_gen_interval_l1_cmd,
-       "no lsp-gen-interval level-1",
-       NO_STR
-       "Minimum interval between regenerating same LSP\n"
-       "Set interval for level 1 only\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = DEFAULT_MIN_LSP_GEN_INTERVAL;
-  level = IS_LEVEL_1;
-  return set_lsp_gen_interval (vty, area, interval, level);
-}
-
-ALIAS (no_lsp_gen_interval_l1,
-       no_lsp_gen_interval_l1_arg_cmd,
-       "no lsp-gen-interval level-1 <1-120>",
-       NO_STR
-       "Minimum interval between regenerating same LSP\n"
-       "Set interval for level 1 only\n"
-       "Minimum interval in seconds\n")
-
-DEFUN (lsp_gen_interval_l2,
-       lsp_gen_interval_l2_cmd,
-       "lsp-gen-interval level-2 <1-120>",
-       "Minimum interval between regenerating same LSP\n"
-       "Set interval for level 2 only\n"
-       "Minimum interval in seconds\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = atoi (argv[0]);
-  level = IS_LEVEL_2;
-  return set_lsp_gen_interval (vty, area, interval, level);
-}
-
-DEFUN (no_lsp_gen_interval_l2,
-       no_lsp_gen_interval_l2_cmd,
-       "no lsp-gen-interval level-2",
-       NO_STR
-       "Minimum interval between regenerating same LSP\n"
-       "Set interval for level 2 only\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = DEFAULT_MIN_LSP_GEN_INTERVAL;
-  level = IS_LEVEL_2;
-  return set_lsp_gen_interval (vty, area, interval, level);
-}
-
-ALIAS (no_lsp_gen_interval_l2,
-       no_lsp_gen_interval_l2_arg_cmd,
-       "no lsp-gen-interval level-2 <1-120>",
-       NO_STR
-       "Minimum interval between regenerating same LSP\n"
-       "Set interval for level 2 only\n"
-       "Minimum interval in seconds\n")
-
 void isis_area_metricstyle_set(struct isis_area *area, bool old_metric,
 			       bool new_metric)
 {
@@ -2206,450 +2053,32 @@
     }
 }
 
-DEFUN (spf_interval,
-       spf_interval_cmd,
-       "spf-interval <1-120>",
-       "Minimum interval between SPF calculations\n"
-       "Minimum interval between consecutive SPFs in seconds\n")
+void
+isis_area_max_lsp_lifetime_set(struct isis_area *area, int level,
+			       uint16_t max_lsp_lifetime)
 {
-  struct isis_area *area;
-  u_int16_t interval;
+  assert((level == IS_LEVEL_1) || (level == IS_LEVEL_2));
 
-  area = vty->index;
-  interval = atoi (argv[0]);
-  area->min_spf_interval[0] = interval;
-  area->min_spf_interval[1] = interval;
+  if (area->max_lsp_lifetime[level-1] == max_lsp_lifetime)
+    return;
 
-  return CMD_SUCCESS;
+  area->max_lsp_lifetime[level-1] = max_lsp_lifetime;
+  lsp_regenerate_schedule(area, level, 1);
 }
 
-DEFUN (no_spf_interval,
-       no_spf_interval_cmd,
-       "no spf-interval",
-       NO_STR
-       "Minimum interval between SPF calculations\n")
+void
+isis_area_lsp_refresh_set(struct isis_area *area, int level,
+			  uint16_t lsp_refresh)
 {
-  struct isis_area *area;
+  assert((level == IS_LEVEL_1) || (level == IS_LEVEL_2));
 
-  area = vty->index;
+  if (area->lsp_refresh[level-1] == lsp_refresh)
+    return;
 
-  area->min_spf_interval[0] = MINIMUM_SPF_INTERVAL;
-  area->min_spf_interval[1] = MINIMUM_SPF_INTERVAL;
-
-  return CMD_SUCCESS;
+  area->lsp_refresh[level-1] = lsp_refresh;
+  lsp_regenerate_schedule(area, level, 1);
 }
 
-ALIAS (no_spf_interval,
-       no_spf_interval_arg_cmd,
-       "no spf-interval <1-120>",
-       NO_STR
-       "Minimum interval between SPF calculations\n"
-       "Minimum interval between consecutive SPFs in seconds\n")
-
-DEFUN (spf_interval_l1,
-       spf_interval_l1_cmd,
-       "spf-interval level-1 <1-120>",
-       "Minimum interval between SPF calculations\n"
-       "Set interval for level 1 only\n"
-       "Minimum interval between consecutive SPFs in seconds\n")
-{
-  struct isis_area *area;
-  u_int16_t interval;
-
-  area = vty->index;
-  interval = atoi (argv[0]);
-  area->min_spf_interval[0] = interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_spf_interval_l1,
-       no_spf_interval_l1_cmd,
-       "no spf-interval level-1",
-       NO_STR
-       "Minimum interval between SPF calculations\n"
-       "Set interval for level 1 only\n")
-{
-  struct isis_area *area;
-
-  area = vty->index;
-
-  area->min_spf_interval[0] = MINIMUM_SPF_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_spf_interval,
-       no_spf_interval_l1_arg_cmd,
-       "no spf-interval level-1 <1-120>",
-       NO_STR
-       "Minimum interval between SPF calculations\n"
-       "Set interval for level 1 only\n"
-       "Minimum interval between consecutive SPFs in seconds\n")
-
-DEFUN (spf_interval_l2,
-       spf_interval_l2_cmd,
-       "spf-interval level-2 <1-120>",
-       "Minimum interval between SPF calculations\n"
-       "Set interval for level 2 only\n"
-       "Minimum interval between consecutive SPFs in seconds\n")
-{
-  struct isis_area *area;
-  u_int16_t interval;
-
-  area = vty->index;
-  interval = atoi (argv[0]);
-  area->min_spf_interval[1] = interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_spf_interval_l2,
-       no_spf_interval_l2_cmd,
-       "no spf-interval level-2",
-       NO_STR
-       "Minimum interval between SPF calculations\n"
-       "Set interval for level 2 only\n")
-{
-  struct isis_area *area;
-
-  area = vty->index;
-
-  area->min_spf_interval[1] = MINIMUM_SPF_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_spf_interval,
-       no_spf_interval_l2_arg_cmd,
-       "no spf-interval level-2 <1-120>",
-       NO_STR
-       "Minimum interval between SPF calculations\n"
-       "Set interval for level 2 only\n"
-       "Minimum interval between consecutive SPFs in seconds\n")
-
-static int
-set_lsp_max_lifetime (struct vty *vty, struct isis_area *area,
-                      uint16_t interval, int level)
-{
-  int lvl;
-  int set_refresh_interval[ISIS_LEVELS] = {0, 0};
-  uint16_t refresh_interval;
-
-  refresh_interval = interval - 300;
-
-  for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; lvl++)
-    {
-      if (!(lvl & level))
-        continue;
-      if (refresh_interval < area->lsp_refresh[lvl-1])
-        {
-          vty_out (vty, "Level %d Max LSP lifetime %us must be 300s greater than "
-                   "the configured LSP refresh interval %us%s",
-                   lvl, interval, area->lsp_refresh[lvl-1], VTY_NEWLINE);
-          vty_out (vty, "Automatically reducing level %d LSP refresh interval "
-                   "to %us%s", lvl, refresh_interval, VTY_NEWLINE);
-          set_refresh_interval[lvl-1] = 1;
-
-          if (refresh_interval <= area->lsp_gen_interval[lvl-1])
-            {
-              vty_out (vty, "LSP refresh interval %us must be greater than "
-                       "the configured LSP gen interval %us%s",
-                       refresh_interval, area->lsp_gen_interval[lvl-1],
-                       VTY_NEWLINE);
-              return CMD_ERR_AMBIGUOUS;
-            }
-        }
-    }
-
-  for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; lvl++)
-    {
-      if (!(lvl & level))
-        continue;
-      area->max_lsp_lifetime[lvl-1] = interval;
-      /* Automatically reducing lsp_refresh_interval to interval - 300 */
-      if (set_refresh_interval[lvl-1])
-        area->lsp_refresh[lvl-1] = refresh_interval;
-    }
-
-  lsp_regenerate_schedule (area, level, 1);
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (max_lsp_lifetime,
-       max_lsp_lifetime_cmd,
-       "max-lsp-lifetime <350-65535>",
-       "Maximum LSP lifetime\n"
-       "LSP lifetime in seconds\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = atoi (argv[0]);
-  level = IS_LEVEL_1 | IS_LEVEL_2;
-  return set_lsp_max_lifetime (vty, area, interval, level);
-}
-
-DEFUN (no_max_lsp_lifetime,
-       no_max_lsp_lifetime_cmd,
-       "no max-lsp-lifetime",
-       NO_STR
-       "LSP lifetime in seconds\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = DEFAULT_LSP_LIFETIME;
-  level = IS_LEVEL_1 | IS_LEVEL_2;
-  return set_lsp_max_lifetime (vty, area, interval, level);
-}
-
-ALIAS (no_max_lsp_lifetime,
-       no_max_lsp_lifetime_arg_cmd,
-       "no max-lsp-lifetime <350-65535>",
-       NO_STR
-       "Maximum LSP lifetime\n"
-       "LSP lifetime in seconds\n")
-
-DEFUN (max_lsp_lifetime_l1,
-       max_lsp_lifetime_l1_cmd,
-       "max-lsp-lifetime level-1 <350-65535>",
-       "Maximum LSP lifetime for Level 1 only\n"
-       "LSP lifetime for Level 1 only in seconds\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = atoi (argv[0]);
-  level = IS_LEVEL_1;
-  return set_lsp_max_lifetime (vty, area, interval, level);
-}
-
-DEFUN (no_max_lsp_lifetime_l1,
-       no_max_lsp_lifetime_l1_cmd,
-       "no max-lsp-lifetime level-1",
-       NO_STR
-       "LSP lifetime for Level 1 only in seconds\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = DEFAULT_LSP_LIFETIME;
-  level = IS_LEVEL_1;
-  return set_lsp_max_lifetime (vty, area, interval, level);
-}
-
-ALIAS (no_max_lsp_lifetime_l1,
-       no_max_lsp_lifetime_l1_arg_cmd,
-       "no max-lsp-lifetime level-1 <350-65535>",
-       NO_STR
-       "Maximum LSP lifetime for Level 1 only\n"
-       "LSP lifetime for Level 1 only in seconds\n")
-
-DEFUN (max_lsp_lifetime_l2,
-       max_lsp_lifetime_l2_cmd,
-       "max-lsp-lifetime level-2 <350-65535>",
-       "Maximum LSP lifetime for Level 2 only\n"
-       "LSP lifetime for Level 2 only in seconds\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = atoi (argv[0]);
-  level = IS_LEVEL_2;
-  return set_lsp_max_lifetime (vty, area, interval, level);
-}
-
-DEFUN (no_max_lsp_lifetime_l2,
-       no_max_lsp_lifetime_l2_cmd,
-       "no max-lsp-lifetime level-2",
-       NO_STR
-       "LSP lifetime for Level 2 only in seconds\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = DEFAULT_LSP_LIFETIME;
-  level = IS_LEVEL_2;
-  return set_lsp_max_lifetime (vty, area, interval, level);
-}
-
-ALIAS (no_max_lsp_lifetime_l2,
-       no_max_lsp_lifetime_l2_arg_cmd,
-       "no max-lsp-lifetime level-2 <350-65535>",
-       NO_STR
-       "Maximum LSP lifetime for Level 2 only\n"
-       "LSP lifetime for Level 2 only in seconds\n")
-
-static int
-set_lsp_refresh_interval (struct vty *vty, struct isis_area *area,
-                          uint16_t interval, int level)
-{
-  int lvl;
-
-  for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; ++lvl)
-    {
-      if (!(lvl & level))
-        continue;
-      if (interval <= area->lsp_gen_interval[lvl-1])
-        {
-          vty_out (vty, "LSP refresh interval %us must be greater than "
-                   "the configured LSP gen interval %us%s",
-                   interval, area->lsp_gen_interval[lvl-1],
-                   VTY_NEWLINE);
-          return CMD_ERR_AMBIGUOUS;
-        }
-      if (interval > (area->max_lsp_lifetime[lvl-1] - 300))
-        {
-          vty_out (vty, "LSP refresh interval %us must be less than "
-                   "the configured LSP lifetime %us less 300%s",
-                   interval, area->max_lsp_lifetime[lvl-1],
-                   VTY_NEWLINE);
-          return CMD_ERR_AMBIGUOUS;
-        }
-    }
-
-  for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; ++lvl)
-    {
-      if (!(lvl & level))
-        continue;
-      area->lsp_refresh[lvl-1] = interval;
-    }
-  lsp_regenerate_schedule (area, level, 1);
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (lsp_refresh_interval,
-       lsp_refresh_interval_cmd,
-       "lsp-refresh-interval <1-65235>",
-       "LSP refresh interval\n"
-       "LSP refresh interval in seconds\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = atoi (argv[0]);
-  level = IS_LEVEL_1 | IS_LEVEL_2;
-  return set_lsp_refresh_interval (vty, area, interval, level);
-}
-
-DEFUN (no_lsp_refresh_interval,
-       no_lsp_refresh_interval_cmd,
-       "no lsp-refresh-interval",
-       NO_STR
-       "LSP refresh interval in seconds\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = DEFAULT_MAX_LSP_GEN_INTERVAL;
-  level = IS_LEVEL_1 | IS_LEVEL_2;
-  return set_lsp_refresh_interval (vty, area, interval, level);
-}
-
-ALIAS (no_lsp_refresh_interval,
-       no_lsp_refresh_interval_arg_cmd,
-       "no lsp-refresh-interval <1-65235>",
-       NO_STR
-       "LSP refresh interval\n"
-       "LSP refresh interval in seconds\n")
-
-DEFUN (lsp_refresh_interval_l1,
-       lsp_refresh_interval_l1_cmd,
-       "lsp-refresh-interval level-1 <1-65235>",
-       "LSP refresh interval for Level 1 only\n"
-       "LSP refresh interval for Level 1 only in seconds\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = atoi (argv[0]);
-  level = IS_LEVEL_1;
-  return set_lsp_refresh_interval (vty, area, interval, level);
-}
-
-DEFUN (no_lsp_refresh_interval_l1,
-       no_lsp_refresh_interval_l1_cmd,
-       "no lsp-refresh-interval level-1",
-       NO_STR
-       "LSP refresh interval for Level 1 only in seconds\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = DEFAULT_MAX_LSP_GEN_INTERVAL;
-  level = IS_LEVEL_1;
-  return set_lsp_refresh_interval (vty, area, interval, level);
-}
-
-ALIAS (no_lsp_refresh_interval_l1,
-       no_lsp_refresh_interval_l1_arg_cmd,
-       "no lsp-refresh-interval level-1 <1-65235>",
-       NO_STR
-       "LSP refresh interval for Level 1 only\n"
-       "LSP refresh interval for Level 1 only in seconds\n")
-
-DEFUN (lsp_refresh_interval_l2,
-       lsp_refresh_interval_l2_cmd,
-       "lsp-refresh-interval level-2 <1-65235>",
-       "LSP refresh interval for Level 2 only\n"
-       "LSP refresh interval for Level 2 only in seconds\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = atoi (argv[0]);
-  level = IS_LEVEL_2;
-  return set_lsp_refresh_interval (vty, area, interval, level);
-}
-
-DEFUN (no_lsp_refresh_interval_l2,
-       no_lsp_refresh_interval_l2_cmd,
-       "no lsp-refresh-interval level-2",
-       NO_STR
-       "LSP refresh interval for Level 2 only in seconds\n")
-{
-  struct isis_area *area;
-  uint16_t interval;
-  int level;
-
-  area = vty->index;
-  interval = DEFAULT_MAX_LSP_GEN_INTERVAL;
-  level = IS_LEVEL_2;
-  return set_lsp_refresh_interval (vty, area, interval, level);
-}
-
-ALIAS (no_lsp_refresh_interval_l2,
-       no_lsp_refresh_interval_l2_arg_cmd,
-       "no lsp-refresh-interval level-2 <1-65235>",
-       NO_STR
-       "LSP refresh interval for Level 2 only\n"
-       "LSP refresh interval for Level 2 only in seconds\n")
-
 DEFUN (log_adj_changes,
        log_adj_changes_cmd,
        "log-adjacency-changes",
@@ -3193,46 +2622,6 @@
   install_element (ISIS_NODE, &domain_passwd_clear_snpauth_cmd);
   install_element (ISIS_NODE, &no_domain_passwd_cmd);
 
-  install_element (ISIS_NODE, &lsp_gen_interval_cmd);
-  install_element (ISIS_NODE, &no_lsp_gen_interval_cmd);
-  install_element (ISIS_NODE, &no_lsp_gen_interval_arg_cmd);
-  install_element (ISIS_NODE, &lsp_gen_interval_l1_cmd);
-  install_element (ISIS_NODE, &no_lsp_gen_interval_l1_cmd);
-  install_element (ISIS_NODE, &no_lsp_gen_interval_l1_arg_cmd);
-  install_element (ISIS_NODE, &lsp_gen_interval_l2_cmd);
-  install_element (ISIS_NODE, &no_lsp_gen_interval_l2_cmd);
-  install_element (ISIS_NODE, &no_lsp_gen_interval_l2_arg_cmd);
-
-  install_element (ISIS_NODE, &spf_interval_cmd);
-  install_element (ISIS_NODE, &no_spf_interval_cmd);
-  install_element (ISIS_NODE, &no_spf_interval_arg_cmd);
-  install_element (ISIS_NODE, &spf_interval_l1_cmd);
-  install_element (ISIS_NODE, &no_spf_interval_l1_cmd);
-  install_element (ISIS_NODE, &no_spf_interval_l1_arg_cmd);
-  install_element (ISIS_NODE, &spf_interval_l2_cmd);
-  install_element (ISIS_NODE, &no_spf_interval_l2_cmd);
-  install_element (ISIS_NODE, &no_spf_interval_l2_arg_cmd);
-
-  install_element (ISIS_NODE, &max_lsp_lifetime_cmd);
-  install_element (ISIS_NODE, &no_max_lsp_lifetime_cmd);
-  install_element (ISIS_NODE, &no_max_lsp_lifetime_arg_cmd);
-  install_element (ISIS_NODE, &max_lsp_lifetime_l1_cmd);
-  install_element (ISIS_NODE, &no_max_lsp_lifetime_l1_cmd);
-  install_element (ISIS_NODE, &no_max_lsp_lifetime_l1_arg_cmd);
-  install_element (ISIS_NODE, &max_lsp_lifetime_l2_cmd);
-  install_element (ISIS_NODE, &no_max_lsp_lifetime_l2_cmd);
-  install_element (ISIS_NODE, &no_max_lsp_lifetime_l2_arg_cmd);
-
-  install_element (ISIS_NODE, &lsp_refresh_interval_cmd);
-  install_element (ISIS_NODE, &no_lsp_refresh_interval_cmd);
-  install_element (ISIS_NODE, &no_lsp_refresh_interval_arg_cmd);
-  install_element (ISIS_NODE, &lsp_refresh_interval_l1_cmd);
-  install_element (ISIS_NODE, &no_lsp_refresh_interval_l1_cmd);
-  install_element (ISIS_NODE, &no_lsp_refresh_interval_l1_arg_cmd);
-  install_element (ISIS_NODE, &lsp_refresh_interval_l2_cmd);
-  install_element (ISIS_NODE, &no_lsp_refresh_interval_l2_cmd);
-  install_element (ISIS_NODE, &no_lsp_refresh_interval_l2_arg_cmd);
-
   install_element (ISIS_NODE, &log_adj_changes_cmd);
   install_element (ISIS_NODE, &no_log_adj_changes_cmd);
 
