diff --git a/isisd/isis_lsp.c b/isisd/isis_lsp.c
index 567afa3..b74db6d 100644
--- a/isisd/isis_lsp.c
+++ b/isisd/isis_lsp.c
@@ -669,7 +669,7 @@
 }
 
 /* Convert the lsp attribute bits to attribute string */
-char *
+const char *
 lsp_bits2string (u_char * lsp_bits)
 {
   char *pos = lsp_bits_string;
@@ -717,7 +717,6 @@
 {
   struct isis_lsp *lsp = dnode_get (node);
   struct area_addr *area_addr;
-  char nlpidstr[2];
   int i;
   struct listnode *lnode;
   struct is_neigh *is_neigh;
@@ -732,7 +731,6 @@
   u_char LSPid[255];
   u_char hostname[255];
   u_char buff[BUFSIZ];
-  u_int32_t now, helper;
   u_char ipv4_reach_prefix[20];
   u_char ipv4_reach_mask[20];
   u_char ipv4_address[20];
@@ -745,7 +743,7 @@
     {
       LIST_LOOP (lsp->tlv_data.area_addrs, area_addr, lnode)
       {
-	vty_out (vty, "  Area Address:  %s%s",
+	vty_out (vty, "  Area Address: %s%s",
 		 isonet_print (area_addr->area_addr, area_addr->addr_len),
 		 VTY_NEWLINE);
       }
@@ -760,11 +758,11 @@
 	    {
 	    case NLPID_IP:
 	    case NLPID_IPV6:
-	      vty_out (vty, "  NLPID:         0x%X%s",
+	      vty_out (vty, "  NLPID:        0x%X%s",
 		       lsp->tlv_data.nlpids->nlpids[i], VTY_NEWLINE);
 	      break;
 	    default:
-	      vty_out (vty, "  NLPID:         %s%s", "unknown", VTY_NEWLINE);
+	      vty_out (vty, "  NLPID:        %s%s", "unknown", VTY_NEWLINE);
 	      break;
 	    }
 	}
@@ -788,6 +786,25 @@
       }
     }
 
+  /* TE router id */
+  if (lsp->tlv_data.router_id)
+    {
+      memcpy (ipv4_address, inet_ntoa (lsp->tlv_data.router_id->id),
+	      sizeof (ipv4_address));
+      vty_out (vty, "  Router ID: %s%s", ipv4_address, VTY_NEWLINE);
+    }
+
+  /* for the IS neighbor tlv */
+  if (lsp->tlv_data.is_neighs)
+    {
+      LIST_LOOP (lsp->tlv_data.is_neighs, is_neigh, lnode)
+      {
+	lspid_print (is_neigh->neigh_id, LSPid, dynhost, 0);
+	vty_out (vty, "  Metric: %d IS %s%s",
+		 is_neigh->metrics.metric_default, LSPid, VTY_NEWLINE);
+      }
+    }
+  
   /* for the internal reachable tlv */
   if (lsp->tlv_data.ipv4_int_reachs)
     LIST_LOOP (lsp->tlv_data.ipv4_int_reachs, ipv4_reach, lnode)
@@ -814,17 +831,6 @@
 	       ipv4_reach_mask, VTY_NEWLINE);
     }
 
-  /* for the IS neighbor tlv */
-  if (lsp->tlv_data.is_neighs)
-    {
-      LIST_LOOP (lsp->tlv_data.is_neighs, is_neigh, lnode)
-      {
-	lspid_print (is_neigh->neigh_id, LSPid, dynhost, 0);
-	vty_out (vty, "  Metric: %d IS %s%s",
-		 is_neigh->metrics.metric_default, LSPid, VTY_NEWLINE);
-      }
-    }
-
   /* IPv6 tlv */
 #ifdef HAVE_IPV6
   if (lsp->tlv_data.ipv6_reachs)
@@ -845,145 +851,28 @@
 		 buff, ipv6_reach->prefix_len, VTY_NEWLINE);
     }
 #endif
-
-/* FIXME: Other tlvs such as te or external tlv will be added later */
-#if 0
-  vty_out (vty, "%s  %s %c%s",
-	   VTY_NEWLINE, LSPid, lsp->own_lsp ? '*' : ' ', VTY_NEWLINE);
-
-  vty_out (vty, "    Sequence: 0x%08x Checksum: 0x%04x Lifetime: ",
-	   ntohl (lsp->lsp_header->seq_num),
-	   ntohs (lsp->lsp_header->checksum));
-
-  if (ntohs (lsp->lsp_header->rem_lifetime) == 0)
-    vty_out (vty, " (%2u) ", lsp->age_out);
-  else
-    vty_out (vty, "%5u ", ntohs (lsp->lsp_header->rem_lifetime));
-
-  vty_out (vty, "%s    Attributes:%s",
-	   VTY_NEWLINE, lsp_bits2string (&lsp->lsp_header->lsp_bits));
-
-  /* if this is a self originated LSP then print
-   * the generation time plus when we sent it last
-   * if it is a non self-originated LSP then print the
-   * time when the LSP has been installed
-   */
-
-  if (lsp->own_lsp)
-    {
-
-      now = time (NULL);
-      helper = now - lsp->last_generated;
-      if (!lsp->last_generated)
-	helper = 0;
-
-      vty_out (vty, ", Generated: %s ago", time2string (helper));
-
-      now = time (NULL);
-      helper = now - lsp->last_sent;
-      if (!lsp->last_sent)
-	helper = 0;
-
-      vty_out (vty, ", Last sent: %s ago", time2string (helper));
-    }
-  else
-    {
-      now = time (NULL);
-      helper = now - lsp->installed;
-      if (!lsp->installed)
-	helper = 0;
-
-      vty_out (vty, ", Installed: %s ago", time2string (helper));
-
-    }
-
-  vty_out (vty, "%s", VTY_NEWLINE);
-
-  if (lsp->tlv_data.nlpids)
-    {
-      vty_out (vty, "    Speaks: %s%s", nlpid2string (lsp->tlv_data.nlpids),
-	       VTY_NEWLINE);
-    }
-
-  if (lsp->tlv_data.router_id)
-    {
-      vty_out (vty, "     Router ID: %s%s",
-	       inet_ntoa (lsp->tlv_data.router_id->id), VTY_NEWLINE);
-    }
-
-  if (lsp->tlv_data.is_neighs)
-    LIST_LOOP (lsp->tlv_data.is_neighs, is_neigh, lnode)
-    {
-      lspid_print (is_neigh->neigh_id, LSPid, dynhost, 0);
-      vty_out (vty, "     IS      %s, Metric: %d%s",
-	       LSPid, is_neigh->metrics.metric_default, VTY_NEWLINE);
-    }
-
+  /* TE IS neighbor tlv */
   if (lsp->tlv_data.te_is_neighs)
     LIST_LOOP (lsp->tlv_data.te_is_neighs, te_is_neigh, lnode)
     {
-      /* FIXME: metric display is wrong */
+      /* FIXME: metric display is wrong. */
       lspid_print (te_is_neigh->neigh_id, LSPid, dynhost, 0);
-      vty_out (vty, "     extd-IS %s, Metric: %d%s",
-	       LSPid, te_is_neigh->te_metric[0], VTY_NEWLINE);
+      vty_out (vty, "  Metric: %d extd-IS %s%s",
+	       te_is_neigh->te_metric[0], LSPid, VTY_NEWLINE);
     }
 
-  if (lsp->tlv_data.ipv4_int_reachs)
-    LIST_LOOP (lsp->tlv_data.ipv4_int_reachs, ipv4_reach, lnode)
-    {
-      vty_out (vty, "     int-IP  %s/%d, Metric: %d%s",
-	       inet_ntoa (ipv4_reach->prefix),
-	       ip_masklen (ipv4_reach->mask),
-	       ipv4_reach->metrics.metric_default, VTY_NEWLINE);
-    }
-
-  if (lsp->tlv_data.ipv4_ext_reachs)
-    LIST_LOOP (lsp->tlv_data.ipv4_ext_reachs, ipv4_reach, lnode)
-    {
-      vty_out (vty, "     ext-IP  %s/%d, Metric: %d%s",
-	       inet_ntoa (ipv4_reach->prefix),
-	       ip_masklen (ipv4_reach->mask),
-	       ipv4_reach->metrics.metric_default, VTY_NEWLINE);
-    }
-
+  /* TE IPv4 tlv */
   if (lsp->tlv_data.te_ipv4_reachs)
     LIST_LOOP (lsp->tlv_data.te_ipv4_reachs, te_ipv4_reach, lnode)
     {
-      vty_out (vty, "     extd-IP %s/%d, Metric: %d%s",
+      /* FIXME: There should be better way to output this stuff. */
+      vty_out (vty, "  Metric: %d extrd-IP %s/%d%s",
+	       ntohl (te_ipv4_reach->te_metric),
 	       inet_ntoa (newprefix2inaddr (&te_ipv4_reach->prefix_start,
 					    te_ipv4_reach->control)),
-	       te_ipv4_reach->control & 0x3F,
-	       ntohl (te_ipv4_reach->te_metric), VTY_NEWLINE);
+	       te_ipv4_reach->control & 0x3F, VTY_NEWLINE);
     }
 
-#ifdef HAVE_IPV6
-  if (lsp->tlv_data.ipv6_reachs)
-    LIST_LOOP (lsp->tlv_data.ipv6_reachs, ipv6_reach, lnode)
-    {
-      memcpy (in6.s6_addr, ipv6_reach->prefix, 16);
-      inet_ntop (AF_INET6, &in6, buff, BUFSIZ);
-      if ((ipv6_reach->control_info &&
-	   CTRL_INFO_DISTRIBUTION) == DISTRIBUTION_INTERNAL)
-	vty_out (vty, "     int-IPv6 %s/%d, Metric: %d%s",
-		 buff,
-		 ipv6_reach->prefix_len,
-		 ntohl (ipv6_reach->metric), VTY_NEWLINE);
-      else
-	vty_out (vty, "     ext-IPv6 %s/%d, Metric: %d%s",
-		 buff,
-		 ipv6_reach->prefix_len,
-		 ntohl (ipv6_reach->metric), VTY_NEWLINE);
-
-    }
-#endif
-  if (lsp->tlv_data.hostname)
-    {
-      memset (hostname, 0, sizeof (hostname));
-      memcpy (hostname, lsp->tlv_data.hostname->name,
-	      lsp->tlv_data.hostname->namelen);
-      vty_out (vty, "    Hostname: %s%s", hostname, VTY_NEWLINE);
-    }
-#endif
   return;
 }
 
@@ -1453,8 +1342,6 @@
    */
   if (router_id_zebra.s_addr != 0)
     {
-      u_char value[4];
-
       if (lsp->tlv_data.ipv4_addrs == NULL)
 	lsp->tlv_data.ipv4_addrs = list_new ();
 
