diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c
index 707d77a..85e4f9c 100644
--- a/isisd/isis_circuit.c
+++ b/isisd/isis_circuit.c
@@ -1368,668 +1368,6 @@
 {
   return isis_circuit_passwd_set (circuit, ISIS_PASSWD_TYPE_HMAC_MD5, passwd);
 }
-
-DEFUN (isis_hello_interval,
-       isis_hello_interval_cmd,
-       "isis hello-interval <1-600>",
-       "IS-IS commands\n"
-       "Set Hello interval\n"
-       "Hello interval value\n"
-       "Holdtime 1 seconds, interval depends on multiplier\n")
-{
-  int interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atoi (argv[0]);
-  if (interval < MIN_HELLO_INTERVAL || interval > MAX_HELLO_INTERVAL)
-    {
-      vty_out (vty, "Invalid hello-interval %d - should be <1-600>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->hello_interval[0] = (u_int16_t) interval;
-  circuit->hello_interval[1] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_hello_interval,
-       no_isis_hello_interval_cmd,
-       "no isis hello-interval",
-       NO_STR
-       "IS-IS commands\n"
-       "Set Hello interval\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->hello_interval[0] = DEFAULT_HELLO_INTERVAL;
-  circuit->hello_interval[1] = DEFAULT_HELLO_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_isis_hello_interval,
-       no_isis_hello_interval_arg_cmd,
-       "no isis hello-interval <1-600>",
-       NO_STR
-       "IS-IS commands\n"
-       "Set Hello interval\n"
-       "Hello interval value\n"
-       "Holdtime 1 second, interval depends on multiplier\n")
-
-DEFUN (isis_hello_interval_l1,
-       isis_hello_interval_l1_cmd,
-       "isis hello-interval <1-600> level-1",
-       "IS-IS commands\n"
-       "Set Hello interval\n"
-       "Hello interval value\n"
-       "Holdtime 1 second, interval depends on multiplier\n"
-       "Specify hello-interval for level-1 IIHs\n")
-{
-  long interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atoi (argv[0]);
-  if (interval < MIN_HELLO_INTERVAL || interval > MAX_HELLO_INTERVAL)
-    {
-      vty_out (vty, "Invalid hello-interval %ld - should be <1-600>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->hello_interval[0] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_hello_interval_l1,
-       no_isis_hello_interval_l1_cmd,
-       "no isis hello-interval level-1",
-       NO_STR
-       "IS-IS commands\n"
-       "Set Hello interval\n"
-       "Specify hello-interval for level-1 IIHs\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->hello_interval[0] = DEFAULT_HELLO_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_isis_hello_interval_l1,
-       no_isis_hello_interval_l1_arg_cmd,
-       "no isis hello-interval <1-600> level-1",
-       NO_STR
-       "IS-IS commands\n"
-       "Set Hello interval\n"
-       "Hello interval value\n"
-       "Holdtime 1 second, interval depends on multiplier\n"
-       "Specify hello-interval for level-1 IIHs\n")
-
-DEFUN (isis_hello_interval_l2,
-       isis_hello_interval_l2_cmd,
-       "isis hello-interval <1-600> level-2",
-       "IS-IS commands\n"
-       "Set Hello interval\n"
-       "Hello interval value\n"
-       "Holdtime 1 second, interval depends on multiplier\n"
-       "Specify hello-interval for level-2 IIHs\n")
-{
-  long interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atoi (argv[0]);
-  if (interval < MIN_HELLO_INTERVAL || interval > MAX_HELLO_INTERVAL)
-    {
-      vty_out (vty, "Invalid hello-interval %ld - should be <1-600>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->hello_interval[1] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_hello_interval_l2,
-       no_isis_hello_interval_l2_cmd,
-       "no isis hello-interval level-2",
-       NO_STR
-       "IS-IS commands\n"
-       "Set Hello interval\n"
-       "Specify hello-interval for level-2 IIHs\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->hello_interval[1] = DEFAULT_HELLO_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_isis_hello_interval_l2,
-       no_isis_hello_interval_l2_arg_cmd,
-       "no isis hello-interval <1-600> level-2",
-       NO_STR
-       "IS-IS commands\n"
-       "Set Hello interval\n"
-       "Hello interval value\n"
-       "Holdtime 1 second, interval depends on multiplier\n"
-       "Specify hello-interval for level-2 IIHs\n")
-
-DEFUN (isis_hello_multiplier,
-       isis_hello_multiplier_cmd,
-       "isis hello-multiplier <2-100>",
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n"
-       "Hello multiplier value\n")
-{
-  int mult;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  mult = atoi (argv[0]);
-  if (mult < MIN_HELLO_MULTIPLIER || mult > MAX_HELLO_MULTIPLIER)
-    {
-      vty_out (vty, "Invalid hello-multiplier %d - should be <2-100>%s",
-               mult, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->hello_multiplier[0] = (u_int16_t) mult;
-  circuit->hello_multiplier[1] = (u_int16_t) mult;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_hello_multiplier,
-       no_isis_hello_multiplier_cmd,
-       "no isis hello-multiplier",
-       NO_STR
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->hello_multiplier[0] = DEFAULT_HELLO_MULTIPLIER;
-  circuit->hello_multiplier[1] = DEFAULT_HELLO_MULTIPLIER;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_isis_hello_multiplier,
-       no_isis_hello_multiplier_arg_cmd,
-       "no isis hello-multiplier <2-100>",
-       NO_STR
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n"
-       "Hello multiplier value\n")
-
-DEFUN (isis_hello_multiplier_l1,
-       isis_hello_multiplier_l1_cmd,
-       "isis hello-multiplier <2-100> level-1",
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n"
-       "Hello multiplier value\n"
-       "Specify hello multiplier for level-1 IIHs\n")
-{
-  int mult;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  mult = atoi (argv[0]);
-  if (mult < MIN_HELLO_MULTIPLIER || mult > MAX_HELLO_MULTIPLIER)
-    {
-      vty_out (vty, "Invalid hello-multiplier %d - should be <2-100>%s",
-               mult, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->hello_multiplier[0] = (u_int16_t) mult;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_hello_multiplier_l1,
-       no_isis_hello_multiplier_l1_cmd,
-       "no isis hello-multiplier level-1",
-       NO_STR
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n"
-       "Specify hello multiplier for level-1 IIHs\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->hello_multiplier[0] = DEFAULT_HELLO_MULTIPLIER;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_isis_hello_multiplier_l1,
-       no_isis_hello_multiplier_l1_arg_cmd,
-       "no isis hello-multiplier <2-100> level-1",
-       NO_STR
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n"
-       "Hello multiplier value\n"
-       "Specify hello multiplier for level-1 IIHs\n")
-
-DEFUN (isis_hello_multiplier_l2,
-       isis_hello_multiplier_l2_cmd,
-       "isis hello-multiplier <2-100> level-2",
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n"
-       "Hello multiplier value\n"
-       "Specify hello multiplier for level-2 IIHs\n")
-{
-  int mult;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  mult = atoi (argv[0]);
-  if (mult < MIN_HELLO_MULTIPLIER || mult > MAX_HELLO_MULTIPLIER)
-    {
-      vty_out (vty, "Invalid hello-multiplier %d - should be <2-100>%s",
-               mult, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->hello_multiplier[1] = (u_int16_t) mult;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_hello_multiplier_l2,
-       no_isis_hello_multiplier_l2_cmd,
-       "no isis hello-multiplier level-2",
-       NO_STR
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n"
-       "Specify hello multiplier for level-2 IIHs\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->hello_multiplier[1] = DEFAULT_HELLO_MULTIPLIER;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_isis_hello_multiplier_l2,
-       no_isis_hello_multiplier_l2_arg_cmd,
-       "no isis hello-multiplier <2-100> level-2",
-       NO_STR
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n"
-       "Hello multiplier value\n"
-       "Specify hello multiplier for level-2 IIHs\n")
-
-DEFUN (isis_hello_padding,
-       isis_hello_padding_cmd,
-       "isis hello padding",
-       "IS-IS commands\n"
-       "Add padding to IS-IS hello packets\n"
-       "Pad hello packets\n"
-       "<cr>\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->pad_hellos = 1;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_hello_padding,
-       no_isis_hello_padding_cmd,
-       "no isis hello padding",
-       NO_STR
-       "IS-IS commands\n"
-       "Add padding to IS-IS hello packets\n"
-       "Pad hello packets\n"
-       "<cr>\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->pad_hellos = 0;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (csnp_interval,
-       csnp_interval_cmd,
-       "isis csnp-interval <1-600>",
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n"
-       "CSNP interval value\n")
-{
-  unsigned long interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atol (argv[0]);
-  if (interval < MIN_CSNP_INTERVAL || interval > MAX_CSNP_INTERVAL)
-    {
-      vty_out (vty, "Invalid csnp-interval %lu - should be <1-600>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->csnp_interval[0] = (u_int16_t) interval;
-  circuit->csnp_interval[1] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_csnp_interval,
-       no_csnp_interval_cmd,
-       "no isis csnp-interval",
-       NO_STR
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->csnp_interval[0] = DEFAULT_CSNP_INTERVAL;
-  circuit->csnp_interval[1] = DEFAULT_CSNP_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_csnp_interval,
-       no_csnp_interval_arg_cmd,
-       "no isis csnp-interval <1-600>",
-       NO_STR
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n"
-       "CSNP interval value\n")
-
-DEFUN (csnp_interval_l1,
-       csnp_interval_l1_cmd,
-       "isis csnp-interval <1-600> level-1",
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n"
-       "CSNP interval value\n"
-       "Specify interval for level-1 CSNPs\n")
-{
-  unsigned long interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atol (argv[0]);
-  if (interval < MIN_CSNP_INTERVAL || interval > MAX_CSNP_INTERVAL)
-    {
-      vty_out (vty, "Invalid csnp-interval %lu - should be <1-600>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->csnp_interval[0] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_csnp_interval_l1,
-       no_csnp_interval_l1_cmd,
-       "no isis csnp-interval level-1",
-       NO_STR
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n"
-       "Specify interval for level-1 CSNPs\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->csnp_interval[0] = DEFAULT_CSNP_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_csnp_interval_l1,
-       no_csnp_interval_l1_arg_cmd,
-       "no isis csnp-interval <1-600> level-1",
-       NO_STR
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n"
-       "CSNP interval value\n"
-       "Specify interval for level-1 CSNPs\n")
-
-DEFUN (csnp_interval_l2,
-       csnp_interval_l2_cmd,
-       "isis csnp-interval <1-600> level-2",
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n"
-       "CSNP interval value\n"
-       "Specify interval for level-2 CSNPs\n")
-{
-  unsigned long interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atol (argv[0]);
-  if (interval < MIN_CSNP_INTERVAL || interval > MAX_CSNP_INTERVAL)
-    {
-      vty_out (vty, "Invalid csnp-interval %lu - should be <1-600>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->csnp_interval[1] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_csnp_interval_l2,
-       no_csnp_interval_l2_cmd,
-       "no isis csnp-interval level-2",
-       NO_STR
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n"
-       "Specify interval for level-2 CSNPs\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->csnp_interval[1] = DEFAULT_CSNP_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_csnp_interval_l2,
-       no_csnp_interval_l2_arg_cmd,
-       "no isis csnp-interval <1-600> level-2",
-       NO_STR
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n"
-       "CSNP interval value\n"
-       "Specify interval for level-2 CSNPs\n")
-
-DEFUN (psnp_interval,
-       psnp_interval_cmd,
-       "isis psnp-interval <1-120>",
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n"
-       "PSNP interval value\n")
-{
-  unsigned long interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atol (argv[0]);
-  if (interval < MIN_PSNP_INTERVAL || interval > MAX_PSNP_INTERVAL)
-    {
-      vty_out (vty, "Invalid psnp-interval %lu - should be <1-120>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->psnp_interval[0] = (u_int16_t) interval;
-  circuit->psnp_interval[1] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_psnp_interval,
-       no_psnp_interval_cmd,
-       "no isis psnp-interval",
-       NO_STR
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->psnp_interval[0] = DEFAULT_PSNP_INTERVAL;
-  circuit->psnp_interval[1] = DEFAULT_PSNP_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_psnp_interval,
-       no_psnp_interval_arg_cmd,
-       "no isis psnp-interval <1-120>",
-       NO_STR
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n"
-       "PSNP interval value\n")
-
-DEFUN (psnp_interval_l1,
-       psnp_interval_l1_cmd,
-       "isis psnp-interval <1-120> level-1",
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n"
-       "PSNP interval value\n"
-       "Specify interval for level-1 PSNPs\n")
-{
-  unsigned long interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atol (argv[0]);
-  if (interval < MIN_PSNP_INTERVAL || interval > MAX_PSNP_INTERVAL)
-    {
-      vty_out (vty, "Invalid psnp-interval %lu - should be <1-120>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->psnp_interval[0] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_psnp_interval_l1,
-       no_psnp_interval_l1_cmd,
-       "no isis psnp-interval level-1",
-       NO_STR
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n"
-       "Specify interval for level-1 PSNPs\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->psnp_interval[0] = DEFAULT_PSNP_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_psnp_interval_l1,
-       no_psnp_interval_l1_arg_cmd,
-       "no isis psnp-interval <1-120> level-1",
-       NO_STR
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n"
-       "PSNP interval value\n"
-       "Specify interval for level-1 PSNPs\n")
-
-DEFUN (psnp_interval_l2,
-       psnp_interval_l2_cmd,
-       "isis psnp-interval <1-120> level-2",
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n"
-       "PSNP interval value\n"
-       "Specify interval for level-2 PSNPs\n")
-{
-  unsigned long interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atol (argv[0]);
-  if (interval < MIN_PSNP_INTERVAL || interval > MAX_PSNP_INTERVAL)
-    {
-      vty_out (vty, "Invalid psnp-interval %lu - should be <1-120>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->psnp_interval[1] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_psnp_interval_l2,
-       no_psnp_interval_l2_cmd,
-       "no isis psnp-interval level-2",
-       NO_STR
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n"
-       "Specify interval for level-2 PSNPs\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->psnp_interval[1] = DEFAULT_PSNP_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_psnp_interval_l2,
-       no_psnp_interval_l2_arg_cmd,
-       "no isis psnp-interval <1-120> level-2",
-       NO_STR
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n"
-       "PSNP interval value\n"
-       "Specify interval for level-2 PSNPs\n")
-
 struct cmd_node interface_node = {
   INTERFACE_NODE,
   "%s(config-if)# ",
@@ -2112,48 +1450,5 @@
   install_element (INTERFACE_NODE, &interface_desc_cmd);
   install_element (INTERFACE_NODE, &no_interface_desc_cmd);
 
-  install_element (INTERFACE_NODE, &isis_hello_interval_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_interval_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_interval_arg_cmd);
-  install_element (INTERFACE_NODE, &isis_hello_interval_l1_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_interval_l1_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_interval_l1_arg_cmd);
-  install_element (INTERFACE_NODE, &isis_hello_interval_l2_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_interval_l2_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_interval_l2_arg_cmd);
-
-  install_element (INTERFACE_NODE, &isis_hello_multiplier_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_arg_cmd);
-  install_element (INTERFACE_NODE, &isis_hello_multiplier_l1_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l1_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l1_arg_cmd);
-  install_element (INTERFACE_NODE, &isis_hello_multiplier_l2_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l2_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l2_arg_cmd);
-
-  install_element (INTERFACE_NODE, &isis_hello_padding_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_padding_cmd);
-
-  install_element (INTERFACE_NODE, &csnp_interval_cmd);
-  install_element (INTERFACE_NODE, &no_csnp_interval_cmd);
-  install_element (INTERFACE_NODE, &no_csnp_interval_arg_cmd);
-  install_element (INTERFACE_NODE, &csnp_interval_l1_cmd);
-  install_element (INTERFACE_NODE, &no_csnp_interval_l1_cmd);
-  install_element (INTERFACE_NODE, &no_csnp_interval_l1_arg_cmd);
-  install_element (INTERFACE_NODE, &csnp_interval_l2_cmd);
-  install_element (INTERFACE_NODE, &no_csnp_interval_l2_cmd);
-  install_element (INTERFACE_NODE, &no_csnp_interval_l2_arg_cmd);
-
-  install_element (INTERFACE_NODE, &psnp_interval_cmd);
-  install_element (INTERFACE_NODE, &no_psnp_interval_cmd);
-  install_element (INTERFACE_NODE, &no_psnp_interval_arg_cmd);
-  install_element (INTERFACE_NODE, &psnp_interval_l1_cmd);
-  install_element (INTERFACE_NODE, &no_psnp_interval_l1_cmd);
-  install_element (INTERFACE_NODE, &no_psnp_interval_l1_arg_cmd);
-  install_element (INTERFACE_NODE, &psnp_interval_l2_cmd);
-  install_element (INTERFACE_NODE, &no_psnp_interval_l2_cmd);
-  install_element (INTERFACE_NODE, &no_psnp_interval_l2_arg_cmd);
-
   isis_vty_init ();
 }
diff --git a/isisd/isis_vty.c b/isisd/isis_vty.c
index c6f2465..3dd3682 100644
--- a/isisd/isis_vty.c
+++ b/isisd/isis_vty.c
@@ -694,6 +694,667 @@
        "Specify metric for level-2 routing\n")
 /* end of metrics */
 
+DEFUN (isis_hello_interval,
+       isis_hello_interval_cmd,
+       "isis hello-interval <1-600>",
+       "IS-IS commands\n"
+       "Set Hello interval\n"
+       "Hello interval value\n"
+       "Holdtime 1 seconds, interval depends on multiplier\n")
+{
+  int interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atoi (argv[0]);
+  if (interval < MIN_HELLO_INTERVAL || interval > MAX_HELLO_INTERVAL)
+    {
+      vty_out (vty, "Invalid hello-interval %d - should be <1-600>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->hello_interval[0] = (u_int16_t) interval;
+  circuit->hello_interval[1] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_hello_interval,
+       no_isis_hello_interval_cmd,
+       "no isis hello-interval",
+       NO_STR
+       "IS-IS commands\n"
+       "Set Hello interval\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->hello_interval[0] = DEFAULT_HELLO_INTERVAL;
+  circuit->hello_interval[1] = DEFAULT_HELLO_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_isis_hello_interval,
+       no_isis_hello_interval_arg_cmd,
+       "no isis hello-interval <1-600>",
+       NO_STR
+       "IS-IS commands\n"
+       "Set Hello interval\n"
+       "Hello interval value\n"
+       "Holdtime 1 second, interval depends on multiplier\n")
+
+DEFUN (isis_hello_interval_l1,
+       isis_hello_interval_l1_cmd,
+       "isis hello-interval <1-600> level-1",
+       "IS-IS commands\n"
+       "Set Hello interval\n"
+       "Hello interval value\n"
+       "Holdtime 1 second, interval depends on multiplier\n"
+       "Specify hello-interval for level-1 IIHs\n")
+{
+  long interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atoi (argv[0]);
+  if (interval < MIN_HELLO_INTERVAL || interval > MAX_HELLO_INTERVAL)
+    {
+      vty_out (vty, "Invalid hello-interval %ld - should be <1-600>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->hello_interval[0] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_hello_interval_l1,
+       no_isis_hello_interval_l1_cmd,
+       "no isis hello-interval level-1",
+       NO_STR
+       "IS-IS commands\n"
+       "Set Hello interval\n"
+       "Specify hello-interval for level-1 IIHs\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->hello_interval[0] = DEFAULT_HELLO_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_isis_hello_interval_l1,
+       no_isis_hello_interval_l1_arg_cmd,
+       "no isis hello-interval <1-600> level-1",
+       NO_STR
+       "IS-IS commands\n"
+       "Set Hello interval\n"
+       "Hello interval value\n"
+       "Holdtime 1 second, interval depends on multiplier\n"
+       "Specify hello-interval for level-1 IIHs\n")
+
+DEFUN (isis_hello_interval_l2,
+       isis_hello_interval_l2_cmd,
+       "isis hello-interval <1-600> level-2",
+       "IS-IS commands\n"
+       "Set Hello interval\n"
+       "Hello interval value\n"
+       "Holdtime 1 second, interval depends on multiplier\n"
+       "Specify hello-interval for level-2 IIHs\n")
+{
+  long interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atoi (argv[0]);
+  if (interval < MIN_HELLO_INTERVAL || interval > MAX_HELLO_INTERVAL)
+    {
+      vty_out (vty, "Invalid hello-interval %ld - should be <1-600>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->hello_interval[1] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_hello_interval_l2,
+       no_isis_hello_interval_l2_cmd,
+       "no isis hello-interval level-2",
+       NO_STR
+       "IS-IS commands\n"
+       "Set Hello interval\n"
+       "Specify hello-interval for level-2 IIHs\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->hello_interval[1] = DEFAULT_HELLO_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_isis_hello_interval_l2,
+       no_isis_hello_interval_l2_arg_cmd,
+       "no isis hello-interval <1-600> level-2",
+       NO_STR
+       "IS-IS commands\n"
+       "Set Hello interval\n"
+       "Hello interval value\n"
+       "Holdtime 1 second, interval depends on multiplier\n"
+       "Specify hello-interval for level-2 IIHs\n")
+
+DEFUN (isis_hello_multiplier,
+       isis_hello_multiplier_cmd,
+       "isis hello-multiplier <2-100>",
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n"
+       "Hello multiplier value\n")
+{
+  int mult;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  mult = atoi (argv[0]);
+  if (mult < MIN_HELLO_MULTIPLIER || mult > MAX_HELLO_MULTIPLIER)
+    {
+      vty_out (vty, "Invalid hello-multiplier %d - should be <2-100>%s",
+               mult, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->hello_multiplier[0] = (u_int16_t) mult;
+  circuit->hello_multiplier[1] = (u_int16_t) mult;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_hello_multiplier,
+       no_isis_hello_multiplier_cmd,
+       "no isis hello-multiplier",
+       NO_STR
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->hello_multiplier[0] = DEFAULT_HELLO_MULTIPLIER;
+  circuit->hello_multiplier[1] = DEFAULT_HELLO_MULTIPLIER;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_isis_hello_multiplier,
+       no_isis_hello_multiplier_arg_cmd,
+       "no isis hello-multiplier <2-100>",
+       NO_STR
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n"
+       "Hello multiplier value\n")
+
+DEFUN (isis_hello_multiplier_l1,
+       isis_hello_multiplier_l1_cmd,
+       "isis hello-multiplier <2-100> level-1",
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n"
+       "Hello multiplier value\n"
+       "Specify hello multiplier for level-1 IIHs\n")
+{
+  int mult;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  mult = atoi (argv[0]);
+  if (mult < MIN_HELLO_MULTIPLIER || mult > MAX_HELLO_MULTIPLIER)
+    {
+      vty_out (vty, "Invalid hello-multiplier %d - should be <2-100>%s",
+               mult, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->hello_multiplier[0] = (u_int16_t) mult;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_hello_multiplier_l1,
+       no_isis_hello_multiplier_l1_cmd,
+       "no isis hello-multiplier level-1",
+       NO_STR
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n"
+       "Specify hello multiplier for level-1 IIHs\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->hello_multiplier[0] = DEFAULT_HELLO_MULTIPLIER;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_isis_hello_multiplier_l1,
+       no_isis_hello_multiplier_l1_arg_cmd,
+       "no isis hello-multiplier <2-100> level-1",
+       NO_STR
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n"
+       "Hello multiplier value\n"
+       "Specify hello multiplier for level-1 IIHs\n")
+
+DEFUN (isis_hello_multiplier_l2,
+       isis_hello_multiplier_l2_cmd,
+       "isis hello-multiplier <2-100> level-2",
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n"
+       "Hello multiplier value\n"
+       "Specify hello multiplier for level-2 IIHs\n")
+{
+  int mult;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  mult = atoi (argv[0]);
+  if (mult < MIN_HELLO_MULTIPLIER || mult > MAX_HELLO_MULTIPLIER)
+    {
+      vty_out (vty, "Invalid hello-multiplier %d - should be <2-100>%s",
+               mult, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->hello_multiplier[1] = (u_int16_t) mult;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_hello_multiplier_l2,
+       no_isis_hello_multiplier_l2_cmd,
+       "no isis hello-multiplier level-2",
+       NO_STR
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n"
+       "Specify hello multiplier for level-2 IIHs\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->hello_multiplier[1] = DEFAULT_HELLO_MULTIPLIER;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_isis_hello_multiplier_l2,
+       no_isis_hello_multiplier_l2_arg_cmd,
+       "no isis hello-multiplier <2-100> level-2",
+       NO_STR
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n"
+       "Hello multiplier value\n"
+       "Specify hello multiplier for level-2 IIHs\n")
+
+DEFUN (isis_hello_padding,
+       isis_hello_padding_cmd,
+       "isis hello padding",
+       "IS-IS commands\n"
+       "Add padding to IS-IS hello packets\n"
+       "Pad hello packets\n"
+       "<cr>\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->pad_hellos = 1;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_hello_padding,
+       no_isis_hello_padding_cmd,
+       "no isis hello padding",
+       NO_STR
+       "IS-IS commands\n"
+       "Add padding to IS-IS hello packets\n"
+       "Pad hello packets\n"
+       "<cr>\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->pad_hellos = 0;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (csnp_interval,
+       csnp_interval_cmd,
+       "isis csnp-interval <1-600>",
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n"
+       "CSNP interval value\n")
+{
+  unsigned long interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atol (argv[0]);
+  if (interval < MIN_CSNP_INTERVAL || interval > MAX_CSNP_INTERVAL)
+    {
+      vty_out (vty, "Invalid csnp-interval %lu - should be <1-600>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->csnp_interval[0] = (u_int16_t) interval;
+  circuit->csnp_interval[1] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_csnp_interval,
+       no_csnp_interval_cmd,
+       "no isis csnp-interval",
+       NO_STR
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->csnp_interval[0] = DEFAULT_CSNP_INTERVAL;
+  circuit->csnp_interval[1] = DEFAULT_CSNP_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_csnp_interval,
+       no_csnp_interval_arg_cmd,
+       "no isis csnp-interval <1-600>",
+       NO_STR
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n"
+       "CSNP interval value\n")
+
+DEFUN (csnp_interval_l1,
+       csnp_interval_l1_cmd,
+       "isis csnp-interval <1-600> level-1",
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n"
+       "CSNP interval value\n"
+       "Specify interval for level-1 CSNPs\n")
+{
+  unsigned long interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atol (argv[0]);
+  if (interval < MIN_CSNP_INTERVAL || interval > MAX_CSNP_INTERVAL)
+    {
+      vty_out (vty, "Invalid csnp-interval %lu - should be <1-600>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->csnp_interval[0] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_csnp_interval_l1,
+       no_csnp_interval_l1_cmd,
+       "no isis csnp-interval level-1",
+       NO_STR
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n"
+       "Specify interval for level-1 CSNPs\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->csnp_interval[0] = DEFAULT_CSNP_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_csnp_interval_l1,
+       no_csnp_interval_l1_arg_cmd,
+       "no isis csnp-interval <1-600> level-1",
+       NO_STR
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n"
+       "CSNP interval value\n"
+       "Specify interval for level-1 CSNPs\n")
+
+DEFUN (csnp_interval_l2,
+       csnp_interval_l2_cmd,
+       "isis csnp-interval <1-600> level-2",
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n"
+       "CSNP interval value\n"
+       "Specify interval for level-2 CSNPs\n")
+{
+  unsigned long interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atol (argv[0]);
+  if (interval < MIN_CSNP_INTERVAL || interval > MAX_CSNP_INTERVAL)
+    {
+      vty_out (vty, "Invalid csnp-interval %lu - should be <1-600>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->csnp_interval[1] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_csnp_interval_l2,
+       no_csnp_interval_l2_cmd,
+       "no isis csnp-interval level-2",
+       NO_STR
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n"
+       "Specify interval for level-2 CSNPs\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->csnp_interval[1] = DEFAULT_CSNP_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_csnp_interval_l2,
+       no_csnp_interval_l2_arg_cmd,
+       "no isis csnp-interval <1-600> level-2",
+       NO_STR
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n"
+       "CSNP interval value\n"
+       "Specify interval for level-2 CSNPs\n")
+
+DEFUN (psnp_interval,
+       psnp_interval_cmd,
+       "isis psnp-interval <1-120>",
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n"
+       "PSNP interval value\n")
+{
+  unsigned long interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atol (argv[0]);
+  if (interval < MIN_PSNP_INTERVAL || interval > MAX_PSNP_INTERVAL)
+    {
+      vty_out (vty, "Invalid psnp-interval %lu - should be <1-120>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->psnp_interval[0] = (u_int16_t) interval;
+  circuit->psnp_interval[1] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_psnp_interval,
+       no_psnp_interval_cmd,
+       "no isis psnp-interval",
+       NO_STR
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->psnp_interval[0] = DEFAULT_PSNP_INTERVAL;
+  circuit->psnp_interval[1] = DEFAULT_PSNP_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_psnp_interval,
+       no_psnp_interval_arg_cmd,
+       "no isis psnp-interval <1-120>",
+       NO_STR
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n"
+       "PSNP interval value\n")
+
+DEFUN (psnp_interval_l1,
+       psnp_interval_l1_cmd,
+       "isis psnp-interval <1-120> level-1",
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n"
+       "PSNP interval value\n"
+       "Specify interval for level-1 PSNPs\n")
+{
+  unsigned long interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atol (argv[0]);
+  if (interval < MIN_PSNP_INTERVAL || interval > MAX_PSNP_INTERVAL)
+    {
+      vty_out (vty, "Invalid psnp-interval %lu - should be <1-120>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->psnp_interval[0] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_psnp_interval_l1,
+       no_psnp_interval_l1_cmd,
+       "no isis psnp-interval level-1",
+       NO_STR
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n"
+       "Specify interval for level-1 PSNPs\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->psnp_interval[0] = DEFAULT_PSNP_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_psnp_interval_l1,
+       no_psnp_interval_l1_arg_cmd,
+       "no isis psnp-interval <1-120> level-1",
+       NO_STR
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n"
+       "PSNP interval value\n"
+       "Specify interval for level-1 PSNPs\n")
+
+DEFUN (psnp_interval_l2,
+       psnp_interval_l2_cmd,
+       "isis psnp-interval <1-120> level-2",
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n"
+       "PSNP interval value\n"
+       "Specify interval for level-2 PSNPs\n")
+{
+  unsigned long interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atol (argv[0]);
+  if (interval < MIN_PSNP_INTERVAL || interval > MAX_PSNP_INTERVAL)
+    {
+      vty_out (vty, "Invalid psnp-interval %lu - should be <1-120>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->psnp_interval[1] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_psnp_interval_l2,
+       no_psnp_interval_l2_cmd,
+       "no isis psnp-interval level-2",
+       NO_STR
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n"
+       "Specify interval for level-2 PSNPs\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->psnp_interval[1] = DEFAULT_PSNP_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_psnp_interval_l2,
+       no_psnp_interval_l2_arg_cmd,
+       "no isis psnp-interval <1-120> level-2",
+       NO_STR
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n"
+       "PSNP interval value\n"
+       "Specify interval for level-2 PSNPs\n")
+
 static int
 validate_metric_style_narrow (struct vty *vty, struct isis_area *area)
 {
@@ -899,6 +1560,49 @@
   install_element (INTERFACE_NODE, &no_isis_metric_l2_cmd);
   install_element (INTERFACE_NODE, &no_isis_metric_l2_arg_cmd);
 
+  install_element (INTERFACE_NODE, &isis_hello_interval_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_interval_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_interval_arg_cmd);
+  install_element (INTERFACE_NODE, &isis_hello_interval_l1_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_interval_l1_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_interval_l1_arg_cmd);
+  install_element (INTERFACE_NODE, &isis_hello_interval_l2_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_interval_l2_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_interval_l2_arg_cmd);
+
+  install_element (INTERFACE_NODE, &isis_hello_multiplier_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_arg_cmd);
+  install_element (INTERFACE_NODE, &isis_hello_multiplier_l1_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l1_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l1_arg_cmd);
+  install_element (INTERFACE_NODE, &isis_hello_multiplier_l2_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l2_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l2_arg_cmd);
+
+  install_element (INTERFACE_NODE, &isis_hello_padding_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_padding_cmd);
+
+  install_element (INTERFACE_NODE, &csnp_interval_cmd);
+  install_element (INTERFACE_NODE, &no_csnp_interval_cmd);
+  install_element (INTERFACE_NODE, &no_csnp_interval_arg_cmd);
+  install_element (INTERFACE_NODE, &csnp_interval_l1_cmd);
+  install_element (INTERFACE_NODE, &no_csnp_interval_l1_cmd);
+  install_element (INTERFACE_NODE, &no_csnp_interval_l1_arg_cmd);
+  install_element (INTERFACE_NODE, &csnp_interval_l2_cmd);
+  install_element (INTERFACE_NODE, &no_csnp_interval_l2_cmd);
+  install_element (INTERFACE_NODE, &no_csnp_interval_l2_arg_cmd);
+
+  install_element (INTERFACE_NODE, &psnp_interval_cmd);
+  install_element (INTERFACE_NODE, &no_psnp_interval_cmd);
+  install_element (INTERFACE_NODE, &no_psnp_interval_arg_cmd);
+  install_element (INTERFACE_NODE, &psnp_interval_l1_cmd);
+  install_element (INTERFACE_NODE, &no_psnp_interval_l1_cmd);
+  install_element (INTERFACE_NODE, &no_psnp_interval_l1_arg_cmd);
+  install_element (INTERFACE_NODE, &psnp_interval_l2_cmd);
+  install_element (INTERFACE_NODE, &no_psnp_interval_l2_cmd);
+  install_element (INTERFACE_NODE, &no_psnp_interval_l2_arg_cmd);
+
   install_element (ISIS_NODE, &metric_style_cmd);
   install_element (ISIS_NODE, &no_metric_style_cmd);
 
