diff --git a/lib/vty.h b/lib/vty.h
index e515868..1798585 100644
--- a/lib/vty.h
+++ b/lib/vty.h
@@ -149,8 +149,8 @@
 #define PRINTF_ATTRIBUTE(a,b)
 #endif /* __GNUC__ */
 
-/* Utility macros to convert VTY argument to unsigned long or integer. */
-#define VTY_GET_LONG(NAME,V,STR) \
+/* Utility macros to convert VTY argument to unsigned long */
+#define VTY_GET_ULONG(NAME,V,STR) \
 do { \
   char *endptr = NULL; \
   errno = 0; \
@@ -162,20 +162,38 @@
     } \
 } while (0)
 
-#define VTY_GET_INTEGER_RANGE(NAME,V,STR,MIN,MAX) \
-do { \
-  unsigned long tmpl; \
-  VTY_GET_LONG(NAME, tmpl, STR); \
-  if ( (tmpl < (MIN)) || (tmpl > (MAX))) \
-    { \
-      vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); \
-      return CMD_WARNING; \
-    } \
-  (V) = tmpl; \
+/*
+ * The logic below ((TMPL) <= ((MIN) && (TMPL) != (MIN)) is
+ * done to circumvent the compiler complaining about
+ * comparing unsigned numbers against zero, if MIN is zero.
+ * NB: The compiler isn't smart enough to supress the warning
+ * if you write (MIN) != 0 && tmpl < (MIN).
+ */
+#define VTY_GET_INTEGER_RANGE_HEART(NAME,TMPL,STR,MIN,MAX)      \
+do {                                                            \
+  VTY_GET_ULONG(NAME, (TMPL), STR);                             \
+  if ( ((TMPL) <= (MIN) && (TMPL) != (MIN)) || (TMPL) > (MAX) ) \
+    {                                                           \
+      vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE);\
+      return CMD_WARNING;                                       \
+    }                                                           \
 } while (0)
 
-#define VTY_GET_INTEGER(NAME,V,STR) \
-  VTY_GET_INTEGER_RANGE(NAME,V,STR,0U,UINT32_MAX)
+#define VTY_GET_INTEGER_RANGE(NAME,V,STR,MIN,MAX)               \
+do {                                                            \
+  unsigned long tmpl;                                           \
+  VTY_GET_INTEGER_RANGE_HEART(NAME,tmpl,STR,MIN,MAX);           \
+  (V) = tmpl;                                                   \
+} while (0)
+
+#define VTY_CHECK_INTEGER_RANGE(NAME,STR,MIN,MAX)               \
+do {                                                            \
+  unsigned long tmpl;                                           \
+  VTY_GET_INTEGER_RANGE_HEART(NAME,tmpl,STR,MIN,MAX);           \
+} while (0)
+
+#define VTY_GET_INTEGER(NAME,V,STR)                             \
+    VTY_GET_INTEGER_RANGE(NAME,V,STR,0U,UINT32_MAX)
 
 #define VTY_GET_IPV4_ADDRESS(NAME,V,STR)                                      \
 do {                                                                             \
diff --git a/ospfd/ospf_abr.c b/ospfd/ospf_abr.c
index f5edc99..4770275 100644
--- a/ospfd/ospf_abr.c
+++ b/ospfd/ospf_abr.c
@@ -1140,7 +1140,8 @@
 		   GET_METRIC (slsa->metric), cost);
     }
 
-  if (old && (GET_METRIC (slsa->metric) == cost))
+  if (old && (GET_METRIC (slsa->metric) == cost) &&
+      ((old->flags & OSPF_LSA_IN_MAXAGE) == 0))
     {
       if (IS_DEBUG_OSPF_EVENT)
 	zlog_debug ("ospf_abr_announce_rtr_to_area(): old summary approved");
diff --git a/ospfd/ospf_apiserver.c b/ospfd/ospf_apiserver.c
index 84d70cc..db1ccda 100644
--- a/ospfd/ospf_apiserver.c
+++ b/ospfd/ospf_apiserver.c
@@ -299,13 +299,10 @@
 ospf_apiserver_event (enum event event, int fd,
 		      struct ospf_apiserver *apiserv)
 {
-  struct thread *apiserver_serv_thread;
-
   switch (event)
     {
     case OSPF_APISERVER_ACCEPT:
-      apiserver_serv_thread =
-	thread_add_read (master, ospf_apiserver_accept, apiserv, fd);
+      (void)thread_add_read (master, ospf_apiserver_accept, apiserv, fd);
       break;
     case OSPF_APISERVER_SYNC_READ:
       apiserv->t_sync_read =
diff --git a/ospfd/ospf_ism.c b/ospfd/ospf_ism.c
index db53882..fa7d97f 100644
--- a/ospfd/ospf_ism.c
+++ b/ospfd/ospf_ism.c
@@ -203,7 +203,6 @@
   struct in_addr old_dr, old_bdr;
   int old_state, new_state;
   struct list *el_list;
-  struct ospf_neighbor *dr, *bdr;
 
   /* backup current values. */
   old_dr = DR (oi);
@@ -216,8 +215,8 @@
   ospf_dr_eligible_routers (oi->nbrs, el_list);
 
   /* First election of DR and BDR. */
-  bdr = ospf_elect_bdr (oi, el_list);
-  dr = ospf_elect_dr (oi, el_list);
+  ospf_elect_bdr (oi, el_list);
+  ospf_elect_dr (oi, el_list);
 
   new_state = ospf_ism_state (oi);
 
diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c
index e778251..dfd1a61 100644
--- a/ospfd/ospf_lsa.c
+++ b/ospfd/ospf_lsa.c
@@ -1340,12 +1340,8 @@
 ospf_summary_asbr_lsa_body_set (struct stream *s, struct prefix *p,
 				u_int32_t metric)
 {
-  struct in_addr mask;
-
-  masklen2ip (p->prefixlen, &mask);
-
   /* Put Network Mask. */
-  stream_put_ipv4 (s, mask.s_addr);
+  stream_put_ipv4 (s, (u_int32_t) 0);
 
   /* Set # TOS. */
   stream_putc (s, (u_char) 0);
@@ -2737,7 +2733,9 @@
       if (IS_LSA_SELF (lsa))
 	lsa->oi = oi; /* Specify outgoing ospf-interface for this LSA. */
       else
-	; /* Incoming "oi" for this LSA has set at LSUpd reception. */
+        {
+          /* Incoming "oi" for this LSA has set at LSUpd reception. */
+        }
       /* Fallthrough */
     case OSPF_OPAQUE_AREA_LSA:
     case OSPF_OPAQUE_AS_LSA:
@@ -2782,15 +2780,14 @@
      If received LSA' ls_age is MaxAge, or lsa is being prematurely aged
      (it's getting flushed out of the area), set LSA on MaxAge LSA list. 
    */
-  if ((lsa->flags & OSPF_LSA_PREMATURE_AGE) ||
-      (IS_LSA_MAXAGE (new) && !IS_LSA_SELF (new)))
+  if (IS_LSA_MAXAGE (new))
     {
       if (IS_DEBUG_OSPF (lsa, LSA_INSTALL))
         zlog_debug ("LSA[Type%d:%s]: Install LSA 0x%p, MaxAge",
                    new->data->type, 
                    inet_ntoa (new->data->id), 
                    lsa);
-      ospf_lsa_flush (ospf, lsa);
+      ospf_lsa_maxage (ospf, lsa);
     }
 
   return new;
@@ -2828,7 +2825,7 @@
 {
   struct ospf *ospf = THREAD_ARG (thread);
   struct ospf_lsa *lsa;
-  struct listnode *node, *nnode;
+  struct route_node *rn;
   int reschedule = 0;
 
   ospf->t_maxage = NULL;
@@ -2839,8 +2836,13 @@
   reschedule = !ospf_check_nbr_status (ospf);
 
   if (!reschedule)
-    for (ALL_LIST_ELEMENTS (ospf->maxage_lsa, node, nnode, lsa))
+    for (rn = route_top(ospf->maxage_lsa); rn; rn = route_next(rn))
       {
+	if ((lsa = rn->info) == NULL)
+	  {
+	    continue;
+	  }
+
         if (lsa->retransmit_counter > 0)
           {
             reschedule = 1;
@@ -2893,13 +2895,22 @@
 void
 ospf_lsa_maxage_delete (struct ospf *ospf, struct ospf_lsa *lsa)
 {
-  struct listnode *n;
+  struct route_node *rn;
+  struct prefix_ls lsa_prefix;
 
-  if ((n = listnode_lookup (ospf->maxage_lsa, lsa)))
+  ls_prefix_set (&lsa_prefix, lsa);
+
+  if ((rn = route_node_lookup(ospf->maxage_lsa,
+			      (struct prefix *)&lsa_prefix)))
     {
-      list_delete_node (ospf->maxage_lsa, n);
-      UNSET_FLAG(lsa->flags, OSPF_LSA_IN_MAXAGE);
-      ospf_lsa_unlock (&lsa); /* maxage_lsa */
+      if (rn->info == lsa)
+	{
+	  UNSET_FLAG(lsa->flags, OSPF_LSA_IN_MAXAGE);
+	  ospf_lsa_unlock (&lsa); /* maxage_lsa */
+	  rn->info = NULL;
+	  route_unlock_node (rn); /* route_node_lookup */
+	}
+	  route_unlock_node (rn); /* route_node_lookup */
     }
 }
 
@@ -2911,6 +2922,9 @@
 void
 ospf_lsa_maxage (struct ospf *ospf, struct ospf_lsa *lsa)
 {
+  struct prefix_ls lsa_prefix;
+  struct route_node *rn;
+
   /* When we saw a MaxAge LSA flooded to us, we put it on the list
      and schedule the MaxAge LSA remover. */
   if (CHECK_FLAG(lsa->flags, OSPF_LSA_IN_MAXAGE))
@@ -2921,8 +2935,25 @@
       return;
     }
 
-  listnode_add (ospf->maxage_lsa, ospf_lsa_lock (lsa));
-  SET_FLAG(lsa->flags, OSPF_LSA_IN_MAXAGE);
+  ls_prefix_set (&lsa_prefix, lsa);
+  if ((rn = route_node_get (ospf->maxage_lsa,
+			    (struct prefix *)&lsa_prefix)) != NULL)
+    {
+      if (rn->info != NULL)
+	{
+	  route_unlock_node (rn);
+	}
+      else
+	{
+	  rn->info = ospf_lsa_lock(lsa);
+	  SET_FLAG(lsa->flags, OSPF_LSA_IN_MAXAGE);
+	}
+    }
+  else
+    {
+      zlog_err("Unable to allocate memory for maxage lsa\n");
+      assert(0);
+    }
 
   if (IS_DEBUG_OSPF (lsa, LSA_FLOODING))
     zlog_debug ("LSA[%s]: MaxAge LSA remover scheduled.", dump_lsa_key (lsa));
diff --git a/ospfd/ospf_lsa.h b/ospfd/ospf_lsa.h
index 6c95ff1..9ff2d92 100644
--- a/ospfd/ospf_lsa.h
+++ b/ospfd/ospf_lsa.h
@@ -243,6 +243,7 @@
 
 extern int get_age (struct ospf_lsa *);
 extern u_int16_t ospf_lsa_checksum (struct lsa_header *);
+extern int ospf_lsa_checksum_valid (struct lsa_header *);
 extern int ospf_lsa_refresh_delay (struct ospf_lsa *);
 
 extern const char *dump_lsa_key (struct ospf_lsa *);
diff --git a/ospfd/ospf_lsdb.c b/ospfd/ospf_lsdb.c
index ea9a352..aad979a 100644
--- a/ospfd/ospf_lsdb.c
+++ b/ospfd/ospf_lsdb.c
@@ -72,13 +72,16 @@
     route_table_finish (lsdb->type[i].db);
 }
 
-static void
-lsdb_prefix_set (struct prefix_ls *lp, struct ospf_lsa *lsa)
+void
+ls_prefix_set (struct prefix_ls *lp, struct ospf_lsa *lsa)
 {
-  lp->family = 0;
-  lp->prefixlen = 64;
-  lp->id = lsa->data->id;
-  lp->adv_router = lsa->data->adv_router;
+  if (lp && lsa && lsa->data)
+    {
+      lp->family = 0;
+      lp->prefixlen = 64;
+      lp->id = lsa->data->id;
+      lp->adv_router = lsa->data->adv_router;
+    }
 }
 
 static void
@@ -115,7 +118,7 @@
   struct route_node *rn;
 
   table = lsdb->type[lsa->data->type].db;
-  lsdb_prefix_set (&lp, lsa);
+  ls_prefix_set (&lp, lsa);
   rn = route_node_get (table, (struct prefix *)&lp);
   
   /* nothing to do? */
@@ -167,7 +170,7 @@
   
   assert (lsa->data->type < OSPF_MAX_LSA);
   table = lsdb->type[lsa->data->type].db;
-  lsdb_prefix_set (&lp, lsa);
+  ls_prefix_set (&lp, lsa);
   if ((rn = route_node_lookup (table, (struct prefix *) &lp)))
     {
       if (rn->info == lsa)
@@ -218,7 +221,7 @@
   struct ospf_lsa *find;
 
   table = lsdb->type[lsa->data->type].db;
-  lsdb_prefix_set (&lp, lsa);
+  ls_prefix_set (&lp, lsa);
   rn = route_node_lookup (table, (struct prefix *) &lp);
   if (rn)
     {
diff --git a/ospfd/ospf_lsdb.h b/ospfd/ospf_lsdb.h
index 4157b68..51ae45b 100644
--- a/ospfd/ospf_lsdb.h
+++ b/ospfd/ospf_lsdb.h
@@ -66,6 +66,7 @@
 extern void ospf_lsdb_init (struct ospf_lsdb *);
 extern void ospf_lsdb_free (struct ospf_lsdb *);
 extern void ospf_lsdb_cleanup (struct ospf_lsdb *);
+extern void ls_prefix_set (struct prefix_ls *lp, struct ospf_lsa *lsa);
 extern void ospf_lsdb_add (struct ospf_lsdb *, struct ospf_lsa *);
 extern void ospf_lsdb_delete (struct ospf_lsdb *, struct ospf_lsa *);
 extern void ospf_lsdb_delete_all (struct ospf_lsdb *);
diff --git a/ospfd/ospf_main.c b/ospfd/ospf_main.c
index 1448c7d..6d58b4e 100644
--- a/ospfd/ospf_main.c
+++ b/ospfd/ospf_main.c
@@ -191,6 +191,11 @@
   /* Set umask before anything for security */
   umask (0027);
 
+#ifdef SUPPORT_OSPF_API
+  /* OSPF apiserver is disabled by default. */
+  ospf_apiserver_enable = 0;
+#endif /* SUPPORT_OSPF_API */
+
   /* get program name */
   progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]);
 
@@ -275,11 +280,6 @@
   /* OSPF master init. */
   ospf_master_init ();
 
-#ifdef SUPPORT_OSPF_API
-  /* OSPF apiserver is disabled by default. */
-  ospf_apiserver_enable = 0;
-#endif /* SUPPORT_OSPF_API */
-
   /* Initializations. */
   master = om->master;
 
diff --git a/ospfd/ospf_network.c b/ospfd/ospf_network.c
index 3e326a8..900a566 100644
--- a/ospfd/ospf_network.c
+++ b/ospfd/ospf_network.c
@@ -228,7 +228,7 @@
 }
 
 void
-ospf_adjust_sndbuflen (struct ospf * ospf, int buflen)
+ospf_adjust_sndbuflen (struct ospf * ospf, unsigned int buflen)
 {
   int ret, newbuflen;
   /* Check if any work has to be done at all. */
@@ -249,11 +249,11 @@
    */
   ret = setsockopt_so_sendbuf (ospf->fd, buflen);
   newbuflen = getsockopt_so_sendbuf (ospf->fd);
-  if (ret < 0 || newbuflen < buflen)
-    zlog_warn ("%s: tried to set SO_SNDBUF to %d, but got %d",
+  if (ret < 0 || newbuflen < 0 || newbuflen < (int) buflen)
+    zlog_warn ("%s: tried to set SO_SNDBUF to %u, but got %d",
       __func__, buflen, newbuflen);
   if (newbuflen >= 0)
-    ospf->maxsndbuflen = newbuflen;
+    ospf->maxsndbuflen = (unsigned int)newbuflen;
   else
     zlog_warn ("%s: failed to get SO_SNDBUF", __func__);
   if (ospfd_privs.change (ZPRIVS_LOWER))
diff --git a/ospfd/ospf_network.h b/ospfd/ospf_network.h
index f690991..e0a5c69 100644
--- a/ospfd/ospf_network.h
+++ b/ospfd/ospf_network.h
@@ -34,6 +34,6 @@
 				     unsigned int);
 extern int ospf_if_ipmulticast (struct ospf *, struct prefix *, unsigned int);
 extern int ospf_sock_init (void);
-extern void ospf_adjust_sndbuflen (struct ospf *, int);
+extern void ospf_adjust_sndbuflen (struct ospf *, unsigned int);
 
 #endif /* _ZEBRA_OSPF_NETWORK_H */
diff --git a/ospfd/ospf_nsm.c b/ospfd/ospf_nsm.c
index cbc3171..fe4ddf5 100644
--- a/ospfd/ospf_nsm.c
+++ b/ospfd/ospf_nsm.c
@@ -72,14 +72,11 @@
 static int
 ospf_db_desc_timer (struct thread *thread)
 {
-  struct ospf_interface *oi;
   struct ospf_neighbor *nbr;
 
   nbr = THREAD_ARG (thread);
   nbr->t_db_desc = NULL;
 
-  oi = nbr->oi;
-
   if (IS_DEBUG_OSPF (nsm, NSM_TIMERS))
     zlog (NULL, LOG_DEBUG, "NSM[%s:%s]: Timer (DD Retransmit timer expire)",
 	  IF_NAME (nbr->oi), inet_ntoa (nbr->src));
@@ -643,7 +640,7 @@
 #endif
 }
 
-void
+static void
 nsm_change_state (struct ospf_neighbor *nbr, int state)
 {
   struct ospf_interface *oi = nbr->oi;
@@ -787,11 +784,9 @@
   int event;
   int next_state;
   struct ospf_neighbor *nbr;
-  struct in_addr router_id;
 
   nbr = THREAD_ARG (thread);
   event = THREAD_VAL (thread);
-  router_id = nbr->router_id;
 
   if (IS_DEBUG_OSPF (nsm, NSM_EVENTS))
     zlog_debug ("NSM[%s:%s]: %s (%s)", IF_NAME (nbr->oi),
diff --git a/ospfd/ospf_nsm.h b/ospfd/ospf_nsm.h
index 4f2ae80..9b7e14a 100644
--- a/ospfd/ospf_nsm.h
+++ b/ospfd/ospf_nsm.h
@@ -81,7 +81,6 @@
 
 /* Prototypes. */
 extern int ospf_nsm_event (struct thread *);
-extern void nsm_change_state (struct ospf_neighbor *, int);
 extern void ospf_check_nbr_loading (struct ospf_neighbor *);
 extern int ospf_db_summary_isempty (struct ospf_neighbor *);
 extern int ospf_db_summary_count (struct ospf_neighbor *);
diff --git a/ospfd/ospf_opaque.c b/ospfd/ospf_opaque.c
index aa126e1..744952c 100644
--- a/ospfd/ospf_opaque.c
+++ b/ospfd/ospf_opaque.c
@@ -223,9 +223,15 @@
     default:
       if (OPAQUE_TYPE_RANGE_UNASSIGNED (opaque_type))
         name = "Unassigned";
-      /* XXX warning: comparison is always true due to limited range of data type */
-      else if (OPAQUE_TYPE_RANGE_RESERVED (opaque_type))
-        name = "Private/Experimental";
+      else
+        {
+          u_int32_t bigger_range = opaque_type;
+          /*
+           * Get around type-limits warning: comparison is always true due to limited range of data type
+           */
+          if (OPAQUE_TYPE_RANGE_RESERVED (bigger_range))
+            name = "Private/Experimental";
+        }
       break;
     }
   return name;
diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c
index ede5908..9a4587d 100644
--- a/ospfd/ospf_packet.c
+++ b/ospfd/ospf_packet.c
@@ -1761,7 +1761,11 @@
         ospf_lsa_discard (L); \
 	continue; }
 
-  /* Process each LSA received in the one packet. */
+  /* Process each LSA received in the one packet.
+   *
+   * Numbers in parentheses, e.g. (1), (2), etc., and the corresponding
+   * text below are from the steps in RFC 2328, Section 13.
+   */
   for (ALL_LIST_ELEMENTS (lsas, node, nnode, lsa))
     {
       struct ospf_lsa *ls_ret, *current;
@@ -1785,11 +1789,11 @@
 
       listnode_delete (lsas, lsa); /* We don't need it in list anymore */
 
-      /* Validate Checksum - Done above by ospf_ls_upd_list_lsa() */
+      /* (1) Validate Checksum - Done above by ospf_ls_upd_list_lsa() */
 
-      /* LSA Type  - Done above by ospf_ls_upd_list_lsa() */
+      /* (2) LSA Type  - Done above by ospf_ls_upd_list_lsa() */
    
-      /* Do not take in AS External LSAs if we are a stub or NSSA. */
+      /* (3) Do not take in AS External LSAs if we are a stub or NSSA. */
 
       /* Do not take in AS NSSA if this neighbor and we are not NSSA */
 
@@ -1821,21 +1825,24 @@
 
       current = ospf_lsa_lookup_by_header (oi->area, lsa->data);
 
-      /* If the LSA's LS age is equal to MaxAge, and there is currently
+      /* (4) If the LSA's LS age is equal to MaxAge, and there is currently
 	 no instance of the LSA in the router's link state database,
 	 and none of router's neighbors are in states Exchange or Loading,
-	 then take the following actions. */
+	 then take the following actions: */
 
       if (IS_LSA_MAXAGE (lsa) && !current &&
 	  (ospf_nbr_count (oi, NSM_Exchange) +
 	   ospf_nbr_count (oi, NSM_Loading)) == 0)
 	{
-	  /* Response Link State Acknowledgment. */
+	  /* (4a) Response Link State Acknowledgment. */
 	  ospf_ls_ack_send (nbr, lsa);
 
-	  /* Discard LSA. */	  
-	  zlog_info ("Link State Update[%s]: LS age is equal to MaxAge.",
-		     dump_lsa_key(lsa));
+	  /* (4b) Discard LSA. */
+          if (IS_DEBUG_OSPF (lsa, LSA))
+            {
+	       zlog_debug ("Link State Update[%s]: LS age is equal to MaxAge.",
+                           dump_lsa_key(lsa));
+            }
           DISCARD_LSA (lsa, 3);
 	}
 
@@ -1890,7 +1897,7 @@
 #endif /* HAVE_OPAQUE_LSA */
 
       /* It might be happen that received LSA is self-originated network LSA, but
-       * router ID is cahnged. So, we should check if LSA is a network-LSA whose
+       * router ID is changed. So, we should check if LSA is a network-LSA whose
        * Link State ID is one of the router's own IP interface addresses but whose
        * Advertising Router is not equal to the router's own Router ID
        * According to RFC 2328 12.4.2 and 13.4 this LSA should be flushed.
@@ -1929,7 +1936,9 @@
       /* (5) Find the instance of this LSA that is currently contained
 	 in the router's link state database.  If there is no
 	 database copy, or the received LSA is more recent than
-	 the database copy the following steps must be performed. */
+	 the database copy the following steps must be performed.
+         (The sub steps from RFC 2328 section 13 step (5) will be performed in
+         ospf_flood() ) */
 
       if (current == NULL ||
 	  (ret = ospf_lsa_more_recent (current, lsa)) < 0)
diff --git a/ospfd/ospf_route.c b/ospfd/ospf_route.c
index c3acba3..eb7829a 100644
--- a/ospfd/ospf_route.c
+++ b/ospfd/ospf_route.c
@@ -126,6 +126,31 @@
    route_table_finish (rt);
 }
 
+/* If a prefix exists in the new routing table, then return 1,
+   otherwise return 0. Since the ZEBRA-RIB does an implicit
+   withdraw, it is not necessary to send a delete, an add later
+   will act like an implicit delete. */
+static int
+ospf_route_exist_new_table (struct route_table *rt, struct prefix_ipv4 *prefix)
+{
+  struct route_node *rn;
+
+  assert (rt);
+  assert (prefix);
+
+  rn = route_node_lookup (rt, (struct prefix *) prefix);
+  if (!rn) {
+    return 0;
+  }
+  route_unlock_node (rn);
+
+  if (!rn->info) {
+    return 0;
+  }
+
+  return 1;
+}
+
 /* If a prefix and a nexthop match any route in the routing table,
    then return 1, otherwise return 0. */
 int
@@ -223,13 +248,13 @@
 	{
 	  if (or->type == OSPF_DESTINATION_NETWORK)
 	    {
-	      if (! ospf_route_match_same (cmprt, 
-					   (struct prefix_ipv4 *) &rn->p, or))
+	      if (! ospf_route_exist_new_table (cmprt,
+					   (struct prefix_ipv4 *) &rn->p))
 		ospf_zebra_delete ((struct prefix_ipv4 *) &rn->p, or);
 	    }
 	  else if (or->type == OSPF_DESTINATION_DISCARD)
-	    if (! ospf_route_match_same (cmprt,
-					 (struct prefix_ipv4 *) &rn->p, or))
+	    if (! ospf_route_exist_new_table (cmprt,
+					 (struct prefix_ipv4 *) &rn->p))
 	      ospf_zebra_delete_discard ((struct prefix_ipv4 *) &rn->p);
 	}
 }
diff --git a/ospfd/ospf_routemap.c b/ospfd/ospf_routemap.c
index adf8158..d0ebce6 100644
--- a/ospfd/ospf_routemap.c
+++ b/ospfd/ospf_routemap.c
@@ -443,12 +443,16 @@
 route_set_metric_compile (const char *arg)
 {
   u_int32_t *metric;
+  int32_t ret;
 
   metric = XCALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_int32_t));
-  *metric = atoi (arg);
+  ret = atoi (arg);
 
-  if (*metric >= 0)
-    return metric;
+  if (ret >= 0)
+    {
+      *metric = (u_int32_t)ret;
+      return metric;
+    }
 
   XFREE (MTYPE_ROUTE_MAP_COMPILED, metric);
   return NULL;
diff --git a/ospfd/ospf_te.c b/ospfd/ospf_te.c
index 24e8105..587564a 100644
--- a/ospfd/ospf_te.c
+++ b/ospfd/ospf_te.c
@@ -205,7 +205,7 @@
 {
   static u_int32_t seqno = 0;
 
-  if (LEGAL_TE_INSTANCE_RANGE (seqno + 1))
+  if (seqno < MAX_LEGAL_TE_INSTANCE_NUM )
     seqno += 1;
   else
     seqno  = 1; /* Avoid zero. */
diff --git a/ospfd/ospf_te.h b/ospfd/ospf_te.h
index e8511cd..863d8ba 100644
--- a/ospfd/ospf_te.h
+++ b/ospfd/ospf_te.h
@@ -41,7 +41,7 @@
  *
  */
 
-#define	LEGAL_TE_INSTANCE_RANGE(i)	(0 <= (i) && (i) <= 0xffff)
+#define	MAX_LEGAL_TE_INSTANCE_NUM (0xffff)
 
 /*
  *        24       16        8        0
diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c
index 97c8e8d..2ba8188 100644
--- a/ospfd/ospf_vty.c
+++ b/ospfd/ospf_vty.c
@@ -1742,12 +1742,11 @@
   struct ospf *ospf = vty->index;
   struct ospf_area *area;
   struct in_addr area_id;
-  u_int32_t cost;
   int format;
   struct prefix_ipv4 p;
 
   VTY_GET_OSPF_AREA_ID_NO_BB ("default-cost", area_id, format, argv[0]);
-  VTY_GET_INTEGER_RANGE ("stub default cost", cost, argv[1], 0, 16777215);
+  VTY_CHECK_INTEGER_RANGE ("stub default cost", argv[1], 0, OSPF_LS_INFINITY);
 
   area = ospf_area_lookup_by_area_id (ospf, area_id);
   if (area == NULL)
@@ -1933,7 +1932,6 @@
   struct ospf *ospf = vty->index;
   struct ospf_area *area;
   struct in_addr area_id;
-  struct prefix_list *plist;
   int format;
 
   VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
@@ -1941,7 +1939,6 @@
   if ((area = ospf_area_lookup_by_area_id (ospf, area_id)) == NULL)
     return CMD_SUCCESS;
   
-  plist = prefix_list_lookup (AFI_IP, argv[1]);
   if (strncmp (argv[2], "in", 2) == 0)
     {
       if (PREFIX_NAME_IN (area))
@@ -2322,7 +2319,7 @@
   if (argc > 1)
     ospf_nbr_nbma_priority_set (ospf, nbr_addr, priority);
   if (argc > 2)
-    ospf_nbr_nbma_poll_interval_set (ospf, nbr_addr, priority);
+    ospf_nbr_nbma_poll_interval_set (ospf, nbr_addr, interval);
 
   return CMD_SUCCESS;
 }
@@ -2394,11 +2391,10 @@
 {
   struct ospf *ospf = vty->index;
   struct in_addr nbr_addr;
-  int ret;
 
   VTY_GET_IPV4_ADDRESS ("neighbor address", nbr_addr, argv[0]);
 
-  ret = ospf_nbr_nbma_unset (ospf, nbr_addr);
+  (void)ospf_nbr_nbma_unset (ospf, nbr_addr);
 
   return CMD_SUCCESS;
 }
@@ -4035,21 +4031,26 @@
 static void
 show_ip_ospf_database_maxage (struct vty *vty, struct ospf *ospf)
 {
-  struct listnode *node;
+  struct route_node *rn;
   struct ospf_lsa *lsa;
 
   vty_out (vty, "%s                MaxAge Link States:%s%s",
            VTY_NEWLINE, VTY_NEWLINE, VTY_NEWLINE);
 
-  for (ALL_LIST_ELEMENTS_RO (ospf->maxage_lsa, node, lsa))
+  for (rn = route_top (ospf->maxage_lsa); rn; rn = route_next (rn))
     {
-      vty_out (vty, "Link type: %d%s", lsa->data->type, VTY_NEWLINE);
-      vty_out (vty, "Link State ID: %s%s",
-               inet_ntoa (lsa->data->id), VTY_NEWLINE);
-      vty_out (vty, "Advertising Router: %s%s",
-               inet_ntoa (lsa->data->adv_router), VTY_NEWLINE);
-      vty_out (vty, "LSA lock count: %d%s", lsa->lock, VTY_NEWLINE);
-      vty_out (vty, "%s", VTY_NEWLINE);
+      struct ospf_lsa *lsa;
+
+      if ((lsa = rn->info) != NULL)
+	{
+	  vty_out (vty, "Link type: %d%s", lsa->data->type, VTY_NEWLINE);
+	  vty_out (vty, "Link State ID: %s%s",
+		   inet_ntoa (lsa->data->id), VTY_NEWLINE);
+	  vty_out (vty, "Advertising Router: %s%s",
+		   inet_ntoa (lsa->data->adv_router), VTY_NEWLINE);
+	  vty_out (vty, "LSA lock count: %d%s", lsa->lock, VTY_NEWLINE);
+	  vty_out (vty, "%s", VTY_NEWLINE);
+	}
     }
 }
 
@@ -5403,7 +5404,7 @@
        "Address of interface")
 {
   struct interface *ifp = vty->index;
-  u_int32_t priority;
+  long priority;
   struct route_node *rn;
   struct in_addr addr;
   int ret;
@@ -6037,7 +6038,7 @@
   int source;
 
   /* Get distribute source. */
-  source = proto_redistnum(AFI_IP, argv[0]);
+  source = proto_redistnum(AFI_IP, argv[1]);
   if (source < 0 || source == ZEBRA_ROUTE_OSPF)
     return CMD_WARNING;
 
@@ -6056,7 +6057,7 @@
   struct ospf *ospf = vty->index;
   int source;
 
-  source = proto_redistnum(AFI_IP, argv[0]);
+  source = proto_redistnum(AFI_IP, argv[1]);
   if (source < 0 || source == ZEBRA_ROUTE_OSPF)
     return CMD_WARNING;
 
@@ -7020,6 +7021,10 @@
       if (!CHECK_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED))
           ospf_router_lsa_update_area (area);
     }
+
+  /* Allows for areas configured later to get the property */
+  ospf->stub_router_admin_set = OSPF_STUB_ROUTER_ADMINISTRATIVE_SET;
+
   return CMD_SUCCESS;
 }
 
@@ -7047,6 +7052,7 @@
           ospf_router_lsa_update_area (area);
         }
     }
+  ospf->stub_router_admin_set = OSPF_STUB_ROUTER_ADMINISTRATIVE_UNSET;
   return CMD_SUCCESS;
 }
 
diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c
index f5f49f6..34a3b2a 100644
--- a/ospfd/ospf_zebra.c
+++ b/ospfd/ospf_zebra.c
@@ -133,8 +133,8 @@
 
   if (IS_DEBUG_OSPF (zebra, ZEBRA_INTERFACE))
     zlog_debug
-      ("Zebra: interface delete %s index %d flags %lld metric %d mtu %d",
-       ifp->name, ifp->ifindex, ifp->flags, ifp->metric, ifp->mtu);
+      ("Zebra: interface delete %s index %d flags %llx metric %d mtu %d",
+       ifp->name, ifp->ifindex, (unsigned long long)ifp->flags, ifp->metric, ifp->mtu);
 
 #ifdef HAVE_SNMP
   ospf_snmp_if_delete (ifp);
@@ -1004,7 +1004,7 @@
 
 /* Update distribute-list and set timer to apply access-list. */
 void
-ospf_distribute_list_update (struct ospf *ospf, int type)
+ospf_distribute_list_update (struct ospf *ospf, uintptr_t type)
 {
   struct route_table *rt;
 
@@ -1217,7 +1217,6 @@
 {
   int ret;
   struct prefix_ipv4 p;
-  u_char distance;
   struct route_node *rn;
   struct ospf_distance *odistance;
 
@@ -1228,8 +1227,6 @@
       return CMD_WARNING;
     }
 
-  distance = atoi (distance_str);
-
   rn = route_node_lookup (ospf->distance_table, (struct prefix *) &p);
   if (!rn)
     {
diff --git a/ospfd/ospf_zebra.h b/ospfd/ospf_zebra.h
index fbb3444..148f652 100644
--- a/ospfd/ospf_zebra.h
+++ b/ospfd/ospf_zebra.h
@@ -54,7 +54,7 @@
 				    int *);
 extern int ospf_distribute_check_connected (struct ospf *,
 					    struct external_info *);
-extern void ospf_distribute_list_update (struct ospf *, int);
+extern void ospf_distribute_list_update (struct ospf *, uintptr_t);
 
 extern int ospf_is_type_redistributed (int);
 extern void ospf_distance_reset (struct ospf *);
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c
index e840513..3e2b234 100644
--- a/ospfd/ospfd.c
+++ b/ospfd/ospfd.c
@@ -182,7 +182,8 @@
   
   new->stub_router_startup_time = OSPF_STUB_ROUTER_UNCONFIGURED;
   new->stub_router_shutdown_time = OSPF_STUB_ROUTER_UNCONFIGURED;
-  
+  new->stub_router_admin_set     = OSPF_STUB_ROUTER_ADMINISTRATIVE_UNSET;
+
   /* Distribute parameter init. */
   for (i = 0; i <= ZEBRA_ROUTE_MAX; i++)
     {
@@ -200,7 +201,7 @@
 
   /* MaxAge init. */
   new->maxage_delay = OSFP_LSA_MAXAGE_REMOVE_DELAY_DEFAULT;
-  new->maxage_lsa = list_new ();
+  new->maxage_lsa = route_table_init();
   new->t_maxage_walker =
     thread_add_timer (master, ospf_lsa_maxage_walker,
                       new, OSPF_LSA_MAXAGE_CHECK_INTERVAL);
@@ -222,7 +223,7 @@
     }
   new->maxsndbuflen = getsockopt_so_sendbuf (new->fd);
   if (IS_DEBUG_OSPF (zebra, ZEBRA_INTERFACE))
-    zlog_debug ("%s: starting with OSPF send buffer size %d",
+    zlog_debug ("%s: starting with OSPF send buffer size %u",
       __func__, new->maxsndbuflen);
   if ((new->ibuf = stream_new(OSPF_MAX_PACKET_SIZE+1)) == NULL)
     {
@@ -501,10 +502,18 @@
   ospf_lsdb_delete_all (ospf->lsdb);
   ospf_lsdb_free (ospf->lsdb);
 
-  for (ALL_LIST_ELEMENTS (ospf->maxage_lsa, node, nnode, lsa))
-    ospf_lsa_unlock (&lsa); /* maxage_lsa */
+  for (rn = route_top (ospf->maxage_lsa); rn; rn = route_next (rn))
+    {
+      struct ospf_lsa *lsa;
 
-  list_delete (ospf->maxage_lsa);
+      if ((lsa = rn->info) != NULL)
+	{
+	  ospf_lsa_unlock (&lsa);
+	  rn->info = NULL;
+	}
+      route_unlock_node (rn);
+    }
+  route_table_finish (ospf->maxage_lsa);
 
   if (ospf->old_table)
     ospf_route_table_free (ospf->old_table);
@@ -676,6 +685,10 @@
       area->format = format;
       listnode_add_sort (ospf->areas, area);
       ospf_check_abr_status (ospf);  
+      if (ospf->stub_router_admin_set == OSPF_STUB_ROUTER_ADMINISTRATIVE_SET)
+        {
+          SET_FLAG (area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED);
+        }
     }
 
   return area;
diff --git a/ospfd/ospfd.h b/ospfd/ospfd.h
index bf825d1..fb57bf5 100644
--- a/ospfd/ospfd.h
+++ b/ospfd/ospfd.h
@@ -195,6 +195,9 @@
   unsigned int stub_router_startup_time;	/* seconds */
   unsigned int stub_router_shutdown_time;	/* seconds */
 #define OSPF_STUB_ROUTER_UNCONFIGURED	  0
+  u_char       stub_router_admin_set;
+#define OSPF_STUB_ROUTER_ADMINISTRATIVE_SET     1
+#define OSPF_STUB_ROUTER_ADMINISTRATIVE_UNSET   0
 
 #define OSPF_STUB_MAX_METRIC_SUMMARY_COST	0x00ff0000
 
@@ -245,7 +248,7 @@
   /* Time stamps. */
   struct timeval ts_spf;		/* SPF calculation time stamp. */
 
-  struct list *maxage_lsa;              /* List of MaxAge LSA for deletion. */
+  struct route_table *maxage_lsa;       /* List of MaxAge LSA for deletion. */
   int redistribute;                     /* Num of redistributed protocols. */
 
   /* Threads. */
@@ -270,7 +273,7 @@
   struct thread *t_write;
   struct thread *t_read;
   int fd;
-  int maxsndbuflen;
+  unsigned int maxsndbuflen;
   struct stream *ibuf;
   struct list *oi_write_q;
   
