diff --git a/ospfd/ospf_abr.c b/ospfd/ospf_abr.c
index 51fb2d6..416b3e7 100644
--- a/ospfd/ospf_abr.c
+++ b/ospfd/ospf_abr.c
@@ -374,7 +374,7 @@
       if (IS_ROUTER_LSA_NT (rlsa))
         {
           if (IS_DEBUG_OSPF_NSSA)
-            zlog_info ("ospf_abr_nssa_am_elected: "
+            zlog_debug ("ospf_abr_nssa_am_elected: "
                        "router %s asserts Nt",
                        inet_ntoa (lsa->data->id) );
           return 0;
@@ -388,7 +388,7 @@
     }
     
     if (IS_DEBUG_OSPF_NSSA)
-      zlog_info ("ospf_abr_nssa_am_elected: best electable ABR is: %s",
+      zlog_debug ("ospf_abr_nssa_am_elected: best electable ABR is: %s",
                   (best) ? inet_ntoa (*best) : "<none>" );
                   
     if (best == NULL)
@@ -416,15 +416,15 @@
         continue;
         
       if (IS_DEBUG_OSPF (nssa, NSSA))
-        zlog_info ("ospf_abr_nssa_check_status: "
+        zlog_debug ("ospf_abr_nssa_check_status: "
                     "checking area %s",
                     inet_ntoa (area->area_id));
       
       if (!IS_OSPF_ABR (area->ospf))
         {
           if (IS_DEBUG_OSPF (nssa, NSSA))
-          zlog_info ("ospf_abr_nssa_check_status: "
-                     "not ABR");
+            zlog_debug ("ospf_abr_nssa_check_status: "
+	    		"not ABR");
           area->NSSATranslatorState = OSPF_NSSA_TRANSLATE_DISABLED;
           continue;
         }
@@ -435,8 +435,8 @@
             /* We never Translate Type-7 LSA. */
             /* TODO: check previous state and flush? */
             if (IS_DEBUG_OSPF (nssa, NSSA))
-              zlog_info ("ospf_abr_nssa_check_status: "
-                         "never translate");
+              zlog_debug ("ospf_abr_nssa_check_status: "
+	      		  "never translate");
             area->NSSATranslatorState = OSPF_NSSA_TRANSLATE_DISABLED;
             continue;
              
@@ -446,8 +446,8 @@
              * or let the nssa abr task take care of it?
              */
             if (IS_DEBUG_OSPF (nssa, NSSA))
-              zlog_info ("ospf_abr_nssa_check_status: "
-                         "translate always");
+              zlog_debug ("ospf_abr_nssa_check_status: "
+			  "translate always");
             area->NSSATranslatorState = OSPF_NSSA_TRANSLATE_ENABLED;
             continue;
       
@@ -457,15 +457,15 @@
               {
                 area->NSSATranslatorState = OSPF_NSSA_TRANSLATE_ENABLED;
                 if (IS_DEBUG_OSPF (nssa, NSSA))
-                  zlog_info ("ospf_abr_nssa_check_status: "
-                             "elected translator");
+                  zlog_debug ("ospf_abr_nssa_check_status: "
+                              "elected translator");
                }
             else
                {
                  area->NSSATranslatorState = OSPF_NSSA_TRANSLATE_DISABLED;
                  if (IS_DEBUG_OSPF (nssa, NSSA))
-                   zlog_info ("ospf_abr_nssa_check_status: "
-                              "not elected");
+                   zlog_debug ("ospf_abr_nssa_check_status: "
+			       "not elected");
                }
             continue;
          }
@@ -485,7 +485,7 @@
   u_char new_flags = ospf->flags;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_check_abr_status(): Start");
+    zlog_debug ("ospf_check_abr_status(): Start");
 
   for (node = listhead (ospf->areas); node; nextnode (node))
     {
@@ -510,13 +510,13 @@
 
   if (IS_DEBUG_OSPF_EVENT)
     {
-      zlog_info ("ospf_check_abr_status(): looked through areas");
-      zlog_info ("ospf_check_abr_status(): bb_configured: %d", bb_configured);
-      zlog_info ("ospf_check_abr_status(): bb_act_attached: %d",
+      zlog_debug ("ospf_check_abr_status(): looked through areas");
+      zlog_debug ("ospf_check_abr_status(): bb_configured: %d", bb_configured);
+      zlog_debug ("ospf_check_abr_status(): bb_act_attached: %d",
 		 bb_act_attached);
-      zlog_info ("ospf_check_abr_status(): areas_configured: %d",
+      zlog_debug ("ospf_check_abr_status(): areas_configured: %d",
 		 areas_configured);
-      zlog_info ("ospf_check_abr_status(): areas_act_attached: %d",
+      zlog_debug ("ospf_check_abr_status(): areas_act_attached: %d",
 		 areas_act_attached);
     }
 
@@ -551,7 +551,7 @@
     {
       ospf_spf_calculate_schedule (ospf);
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_check_abr_status(): new router flags: %x",new_flags);
+	zlog_debug ("ospf_check_abr_status(): new router flags: %x",new_flags);
       ospf->flags = new_flags;
       OSPF_TIMER_ON (ospf->t_router_lsa_update,
 		     ospf_router_lsa_update_timer, OSPF_LSA_UPDATE_DELAY);
@@ -563,12 +563,12 @@
                            struct ospf_route *or)
 {
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_update_aggregate(): Start");
+    zlog_debug ("ospf_abr_update_aggregate(): Start");
 
   if (range->cost_config != OSPF_AREA_RANGE_COST_UNSPEC)
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("ospf_abr_update_aggregate(): use configured cost %d",
+        zlog_debug ("ospf_abr_update_aggregate(): use configured cost %d",
                    range->cost_config);
 
       range->cost = range->cost_config;
@@ -581,7 +581,7 @@
       if (or->cost > range->cost)
         {
           if (IS_DEBUG_OSPF_EVENT)
-            zlog_info ("ospf_abr_update_aggregate(): lowest cost, update");
+            zlog_debug ("ospf_abr_update_aggregate(): lowest cost, update");
 
           range->cost = or->cost;
         }
@@ -634,13 +634,13 @@
   if (! CHECK_FLAG (lsa->data->options, OSPF_OPTION_NP))
     {
       if (IS_DEBUG_OSPF_NSSA)
-        zlog_info ("ospf_abr_translate_nssa(): LSA Id %s, P-bit off, NO Translation",
+        zlog_debug ("ospf_abr_translate_nssa(): LSA Id %s, P-bit off, NO Translation",
                    inet_ntoa (lsa->data->id));
       return 1; 
     }
   
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("ospf_abr_translate_nssa(): LSA Id %s, TRANSLATING 7 to 5",
+    zlog_debug ("ospf_abr_translate_nssa(): LSA Id %s, TRANSLATING 7 to 5",
                inet_ntoa (lsa->data->id));
 
   ext7 = (struct as_external_lsa *)(lsa->data);
@@ -650,7 +650,7 @@
   if (ext7->e[0].fwd_addr.s_addr == OSPF_DEFAULT_DESTINATION)
     {
       if (IS_DEBUG_OSPF_NSSA)
-        zlog_info ("ospf_abr_translate_nssa(): LSA Id %s, "
+        zlog_debug ("ospf_abr_translate_nssa(): LSA Id %s, "
                    "Forward address is 0, NO Translation",
                    inet_ntoa (lsa->data->id));
       return 1;
@@ -663,7 +663,7 @@
   if (old)
     {
       if (IS_DEBUG_OSPF_NSSA)
-        zlog_info ("ospf_abr_translate_nssa(): " 
+        zlog_debug ("ospf_abr_translate_nssa(): " 
                    "found old translated LSA Id %s, refreshing",
                    inet_ntoa (old->data->id));
             
@@ -672,7 +672,7 @@
       if (!new)
         {
           if (IS_DEBUG_OSPF_NSSA)
-            zlog_info ("ospf_abr_translate_nssa(): "
+            zlog_debug ("ospf_abr_translate_nssa(): "
               "could not refresh translated LSA Id %s",
               inet_ntoa (old->data->id));
         }
@@ -687,7 +687,7 @@
 	       == NULL)
 	    {
 	      if (IS_DEBUG_OSPF_NSSA)
-	        zlog_info ("ospf_abr_translate_nssa(): Could not translate "
+	        zlog_debug ("ospf_abr_translate_nssa(): Could not translate "
 	                   "Type-7 for %s to Type-5", 
 	                   inet_ntoa (lsa->data->id));
 	        return 1;
@@ -716,7 +716,7 @@
   struct summary_lsa *sl = NULL;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_announce_network_to_area(): Start");
+    zlog_debug ("ospf_abr_announce_network_to_area(): Start");
 
   old = ospf_lsa_lookup_by_prefix (area->lsdb, OSPF_SUMMARY_LSA, 
                                    (struct prefix_ipv4 *) p,
@@ -724,12 +724,12 @@
   if (old)
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("ospf_abr_announce_network_to_area(): old summary found");
+        zlog_debug ("ospf_abr_announce_network_to_area(): old summary found");
 
       sl = (struct summary_lsa *) old->data;
 
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("ospf_abr_announce_network_to_area(): "
+        zlog_debug ("ospf_abr_announce_network_to_area(): "
         	   "old metric: %d, new metric: %d",
                GET_METRIC (sl->metric), cost);
                
@@ -737,7 +737,7 @@
         {
           /* unchanged. simply reapprove it */
           if (IS_DEBUG_OSPF_EVENT)
-            zlog_info ("ospf_abr_announce_network_to_area(): "
+            zlog_debug ("ospf_abr_announce_network_to_area(): "
                        "old summary approved"); 
           SET_FLAG (old->flags, OSPF_LSA_APPROVED);
         }
@@ -745,7 +745,7 @@
         {
           /* LSA is changed, refresh it */
           if (IS_DEBUG_OSPF_EVENT)
-            zlog_info ("ospf_abr_announce_network_to_area(): "
+            zlog_debug ("ospf_abr_announce_network_to_area(): "
                        "refreshing summary");
           set_metric (old, cost);
           lsa = ospf_summary_lsa_refresh (area->ospf, old);
@@ -755,19 +755,19 @@
   else
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("ospf_abr_announce_network_to_area(): "
+        zlog_debug ("ospf_abr_announce_network_to_area(): "
         	   "creating new summary");
       lsa = ospf_summary_lsa_originate ( (struct prefix_ipv4 *)p, cost, area);
           /* This will flood through area. */
       
       SET_FLAG (lsa->flags, OSPF_LSA_APPROVED);
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("ospf_abr_announce_network_to_area(): "
+        zlog_debug ("ospf_abr_announce_network_to_area(): "
         	   "flooding new version of summary");
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_announce_network_to_area(): Stop");
+    zlog_debug ("ospf_abr_announce_network_to_area(): Stop");
 }
 
 int
@@ -846,7 +846,7 @@
   struct listnode *node;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_announce_network(): Start");
+    zlog_debug ("ospf_abr_announce_network(): Start");
 
   or_area = ospf_area_lookup_by_area_id (ospf, or->u.std.area_id); 
   assert (or_area);
@@ -856,7 +856,7 @@
       area = getdata (node);
 
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_abr_announce_network(): looking at area %s",
+	zlog_debug ("ospf_abr_announce_network(): looking at area %s",
 		   inet_ntoa (area->area_id));
 
       if (IPV4_ADDR_SAME (&or->u.std.area_id, &area->area_id))
@@ -868,7 +868,7 @@
       if (!ospf_abr_should_accept (p, area))
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_abr_announce_network(): "
+	    zlog_debug ("ospf_abr_announce_network(): "
 		       "prefix %s/%d was denied by import-list",
 		       inet_ntoa (p->prefix), p->prefixlen);
 	  continue; 
@@ -877,7 +877,7 @@
       if (!ospf_abr_plist_in_check (area, or, p))
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_abr_announce_network(): "
+	    zlog_debug ("ospf_abr_announce_network(): "
 		       "prefix %s/%d was denied by prefix-list",
 		       inet_ntoa (p->prefix), p->prefixlen);
 	  continue; 
@@ -886,7 +886,7 @@
       if (area->external_routing != OSPF_AREA_DEFAULT && area->no_summary)
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_abr_announce_network(): "
+	    zlog_debug ("ospf_abr_announce_network(): "
 		       "area %s is stub and no_summary",
 		       inet_ntoa (area->area_id));
           continue;
@@ -895,7 +895,7 @@
       if (or->path_type == OSPF_PATH_INTER_AREA)
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_abr_announce_network(): this is "
+	    zlog_debug ("ospf_abr_announce_network(): this is "
 		       "inter-area route to %s/%d",
 		       inet_ntoa (p->prefix), p->prefixlen);
 
@@ -906,7 +906,7 @@
       if (or->path_type == OSPF_PATH_INTRA_AREA)
         {
           if (IS_DEBUG_OSPF_EVENT)
-            zlog_info ("ospf_abr_announce_network(): "
+            zlog_debug ("ospf_abr_announce_network(): "
                        "this is intra-area route to %s/%d",
                        inet_ntoa (p->prefix), p->prefixlen);
             if ((range = ospf_area_range_match (or_area, p)) 
@@ -956,7 +956,7 @@
   struct ospf_lsa *lsa;
 
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("ospf_abr_process_nssa_translates(): Start");
+    zlog_debug ("ospf_abr_process_nssa_translates(): Start");
 
   for (node = listhead (ospf->areas); node; nextnode (node))
     {
@@ -969,7 +969,7 @@
         continue;  /* skip if not Nssa Area */
 
       if (IS_DEBUG_OSPF_NSSA)
-        zlog_info ("ospf_abr_process_nssa_translates(): "
+        zlog_debug ("ospf_abr_process_nssa_translates(): "
                    "looking at area %s", inet_ntoa (area->area_id));
       
       LSDB_LOOP (NSSA_LSDB (area), rn, lsa)
@@ -977,7 +977,7 @@
     }
  
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("ospf_abr_process_nssa_translates(): Stop");
+    zlog_debug ("ospf_abr_process_nssa_translates(): Stop");
 
 }
 
@@ -990,7 +990,7 @@
   struct route_node *rn;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_process_network_rt(): Start");
+    zlog_debug ("ospf_abr_process_network_rt(): Start");
 
   for (rn = route_top (rt); rn; rn = route_next (rn))
     {
@@ -1000,18 +1000,18 @@
       if (!(area = ospf_area_lookup_by_area_id (ospf, or->u.std.area_id)))
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_abr_process_network_rt(): area %s no longer exists",
+	    zlog_debug ("ospf_abr_process_network_rt(): area %s no longer exists",
 		       inet_ntoa (or->u.std.area_id));
 	  continue;
 	}
 
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_abr_process_network_rt(): this is a route to %s/%d",
+	zlog_debug ("ospf_abr_process_network_rt(): this is a route to %s/%d",
 		   inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen);
       if (or->path_type >= OSPF_PATH_TYPE1_EXTERNAL)
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_abr_process_network_rt(): "
+	    zlog_debug ("ospf_abr_process_network_rt(): "
 		       "this is an External router, skipping");
 	  continue;
 	}
@@ -1019,7 +1019,7 @@
       if (or->cost >= OSPF_LS_INFINITY)
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_abr_process_network_rt():"
+	    zlog_debug ("ospf_abr_process_network_rt():"
 		       " this route's cost is infinity, skipping");
 	  continue;
 	}
@@ -1027,7 +1027,7 @@
       if (or->type == OSPF_DESTINATION_DISCARD)
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_abr_process_network_rt():"
+	    zlog_debug ("ospf_abr_process_network_rt():"
 		       " this is a discard entry, skipping");
 	  continue;
 	}
@@ -1036,7 +1036,7 @@
 	  !ospf_abr_should_announce (ospf, (struct prefix_ipv4 *) &rn->p, or))
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info("ospf_abr_process_network_rt(): denied by export-list");
+	    zlog_debug("ospf_abr_process_network_rt(): denied by export-list");
 	  continue;
 	}
 
@@ -1044,7 +1044,7 @@
 	  !ospf_abr_plist_out_check (area, or, (struct prefix_ipv4 *) &rn->p))
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info("ospf_abr_process_network_rt(): denied by prefix-list");
+	    zlog_debug("ospf_abr_process_network_rt(): denied by prefix-list");
 	  continue;
 	}
 
@@ -1052,7 +1052,7 @@
           !OSPF_IS_AREA_ID_BACKBONE (or->u.std.area_id))
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_abr_process_network_rt():"
+	    zlog_debug ("ospf_abr_process_network_rt():"
 		       " this is route is not backbone one, skipping");
 	  continue;
 	}
@@ -1065,18 +1065,18 @@
               or->path_type != OSPF_PATH_INTRA_AREA)
 	     {
 	       if (IS_DEBUG_OSPF_EVENT)
-		 zlog_info ("ospf_abr_process_network_rt(): ALT ABR: "
+		 zlog_debug ("ospf_abr_process_network_rt(): ALT ABR: "
 			    "No BB connection, skip not intra-area routes");
 	       continue;
 	     }
 
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_abr_process_network_rt(): announcing");
+	zlog_debug ("ospf_abr_process_network_rt(): announcing");
       ospf_abr_announce_network (ospf, (struct prefix_ipv4 *)&rn->p, or);
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_process_network_rt(): Stop");
+    zlog_debug ("ospf_abr_process_network_rt(): Stop");
 }
 
 void
@@ -1087,18 +1087,18 @@
   struct summary_lsa *slsa = NULL;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_announce_rtr_to_area(): Start");
+    zlog_debug ("ospf_abr_announce_rtr_to_area(): Start");
 
   old = ospf_lsa_lookup_by_prefix (area->lsdb, OSPF_ASBR_SUMMARY_LSA,
 				   p, area->ospf->router_id);
   if (old)
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_abr_announce_rtr_to_area(): old summary found");
+	zlog_debug ("ospf_abr_announce_rtr_to_area(): old summary found");
       slsa = (struct summary_lsa *) old->data;
 
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_abr_announce_network_to_area(): "
+	zlog_debug ("ospf_abr_announce_network_to_area(): "
 		   "old metric: %d, new metric: %d",
 		   GET_METRIC (slsa->metric), cost);
     }
@@ -1106,13 +1106,13 @@
   if (old && (GET_METRIC (slsa->metric) == cost))
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_abr_announce_rtr_to_area(): old summary approved");
+	zlog_debug ("ospf_abr_announce_rtr_to_area(): old summary approved");
       SET_FLAG (old->flags, OSPF_LSA_APPROVED);
     }
   else
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_abr_announce_rtr_to_area(): 2.2");
+	zlog_debug ("ospf_abr_announce_rtr_to_area(): 2.2");
        
       if (old) 
 	{ 
@@ -1123,7 +1123,7 @@
 	lsa = ospf_summary_asbr_lsa_originate (p, cost, area);
 
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_abr_announce_rtr_to_area(): "
+	zlog_debug ("ospf_abr_announce_rtr_to_area(): "
 		   "flooding new version of summary");
       /*
       zlog_info ("ospf_abr_announce_rtr_to_area(): creating new summary");
@@ -1134,7 +1134,7 @@
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_announce_rtr_to_area(): Stop");
+    zlog_debug ("ospf_abr_announce_rtr_to_area(): Stop");
 }
 
 
@@ -1146,14 +1146,14 @@
   struct ospf_area *area;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_announce_rtr(): Start");
+    zlog_debug ("ospf_abr_announce_rtr(): Start");
 
   for (node = listhead (ospf->areas); node; nextnode (node))
     {
       area = getdata (node);
 
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_abr_announce_rtr(): looking at area %s",
+	zlog_debug ("ospf_abr_announce_rtr(): looking at area %s",
 		   inet_ntoa (area->area_id));
 
       if (IPV4_ADDR_SAME (&or->u.std.area_id, &area->area_id))
@@ -1165,7 +1165,7 @@
       if (area->external_routing != OSPF_AREA_DEFAULT)
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_abr_announce_rtr(): "
+	    zlog_debug ("ospf_abr_announce_rtr(): "
 		       "area %s doesn't support external routing",
 		       inet_ntoa(area->area_id));
           continue;
@@ -1174,7 +1174,7 @@
       if (or->path_type == OSPF_PATH_INTER_AREA)
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_abr_announce_rtr(): "
+	    zlog_debug ("ospf_abr_announce_rtr(): "
 		       "this is inter-area route to %s", inet_ntoa (p->prefix));
           if (!OSPF_IS_AREA_BACKBONE (area))
 	    ospf_abr_announce_rtr_to_area (p, or->cost, area);
@@ -1183,14 +1183,14 @@
       if (or->path_type == OSPF_PATH_INTRA_AREA)
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_abr_announce_rtr(): "
+	    zlog_debug ("ospf_abr_announce_rtr(): "
 		       "this is intra-area route to %s", inet_ntoa (p->prefix));
           ospf_abr_announce_rtr_to_area (p, or->cost, area);
 	}
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_announce_rtr(): Stop");
+    zlog_debug ("ospf_abr_announce_rtr(): Stop");
 }
 
 void
@@ -1201,7 +1201,7 @@
   struct list *l;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_process_router_rt(): Start");
+    zlog_debug ("ospf_abr_process_router_rt(): Start");
 
   for (rn = route_top (rt); rn; rn = route_next (rn))
     {
@@ -1215,7 +1215,7 @@
       l = rn->info;
 
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_abr_process_router_rt(): this is a route to %s",
+	zlog_debug ("ospf_abr_process_router_rt(): this is a route to %s",
 		   inet_ntoa (rn->p.u.prefix4));
 
       for (node = listhead (l); node; nextnode (node))
@@ -1227,7 +1227,7 @@
 	  if (!ospf_area_lookup_by_area_id (ospf, or->u.std.area_id))
 	    {
 	      if (IS_DEBUG_OSPF_EVENT)
-		zlog_info ("ospf_abr_process_router_rt(): area %s no longer exists",
+		zlog_debug ("ospf_abr_process_router_rt(): area %s no longer exists",
 			 inet_ntoa (or->u.std.area_id));
 	      continue;
 	    }
@@ -1236,7 +1236,7 @@
 	  if (!CHECK_FLAG (or->u.std.flags, ROUTER_LSA_EXTERNAL))
 	    {
 	      if (IS_DEBUG_OSPF_EVENT)
-		zlog_info ("ospf_abr_process_router_rt(): "
+		zlog_debug ("ospf_abr_process_router_rt(): "
 			   "This is not an ASBR, skipping");
 	      continue;
 	    }
@@ -1254,7 +1254,7 @@
         if (or != best)
 	  {
 	    if (IS_DEBUG_OSPF_EVENT)
-	      zlog_info ("ospf_abr_process_router_rt(): "
+	      zlog_debug ("ospf_abr_process_router_rt(): "
 			 "This route is not the best among possible, skipping");
 	    continue;
 	  }
@@ -1263,7 +1263,7 @@
             !OSPF_IS_AREA_ID_BACKBONE (or->u.std.area_id))
 	  {
 	    if (IS_DEBUG_OSPF_EVENT)
-	      zlog_info ("ospf_abr_process_router_rt(): "
+	      zlog_debug ("ospf_abr_process_router_rt(): "
 			 "This route is not a backbone one, skipping");
 	    continue;
 	  }
@@ -1271,7 +1271,7 @@
         if (or->cost >= OSPF_LS_INFINITY)
 	  {
 	    if (IS_DEBUG_OSPF_EVENT)
-	      zlog_info ("ospf_abr_process_router_rt(): "
+	      zlog_debug ("ospf_abr_process_router_rt(): "
 			 "This route has LS_INFINITY metric, skipping");
 	    continue;
 	  }
@@ -1282,7 +1282,7 @@
 	      && or->path_type != OSPF_PATH_INTRA_AREA)
 	    {
 	      if (IS_DEBUG_OSPF_EVENT)
-		zlog_info("ospf_abr_process_network_rt(): ALT ABR: "
+		zlog_debug("ospf_abr_process_network_rt(): ALT ABR: "
 			  "No BB connection, skip not intra-area routes");
 	      continue;
 	    }
@@ -1294,7 +1294,7 @@
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_process_router_rt(): Stop");
+    zlog_debug ("ospf_abr_process_router_rt(): Stop");
 }
 
 void
@@ -1304,7 +1304,7 @@
   struct route_node *rn;
 
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("ospf_abr_unapprove_translates(): Start");
+    zlog_debug ("ospf_abr_unapprove_translates(): Start");
 
   /* NSSA Translator is not checked, because it may have gone away,
     and we would want to flush any residuals anyway */
@@ -1314,13 +1314,13 @@
       {
         UNSET_FLAG (lsa->flags, OSPF_LSA_APPROVED);
         if (IS_DEBUG_OSPF_NSSA)
-          zlog_info ("ospf_abr_unapprove_translates(): "
+          zlog_debug ("ospf_abr_unapprove_translates(): "
                      "approved unset on link id %s",
                      inet_ntoa (lsa->data->id));
       }
 
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("ospf_abr_unapprove_translates(): Stop");
+    zlog_debug ("ospf_abr_unapprove_translates(): Stop");
 }
 
 void
@@ -1332,20 +1332,20 @@
   struct ospf_lsa *lsa;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_unapprove_summaries(): Start");
+    zlog_debug ("ospf_abr_unapprove_summaries(): Start");
 
   for (node = listhead (ospf->areas); node; nextnode (node))
     {
       area = getdata (node);
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("ospf_abr_unapprove_summaries(): "
+        zlog_debug ("ospf_abr_unapprove_summaries(): "
                    "considering area %s",
                    inet_ntoa (area->area_id)); 
       LSDB_LOOP (SUMMARY_LSDB (area), rn, lsa)
       if (ospf_lsa_is_self_originated (ospf, lsa))
         {
           if (IS_DEBUG_OSPF_EVENT)
-            zlog_info ("ospf_abr_unapprove_summaries(): "
+            zlog_debug ("ospf_abr_unapprove_summaries(): "
                        "approved unset on summary link id %s",
                        inet_ntoa (lsa->data->id)); 
           UNSET_FLAG (lsa->flags, OSPF_LSA_APPROVED);
@@ -1355,7 +1355,7 @@
       if (ospf_lsa_is_self_originated (ospf, lsa))
         {
           if (IS_DEBUG_OSPF_EVENT)
-            zlog_info ("ospf_abr_unapprove_summaries(): "
+            zlog_debug ("ospf_abr_unapprove_summaries(): "
                        "approved unset on asbr-summary link id %s",
                        inet_ntoa (lsa->data->id));
           UNSET_FLAG (lsa->flags, OSPF_LSA_APPROVED);
@@ -1363,7 +1363,7 @@
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_unapprove_summaries(): Stop");
+    zlog_debug ("ospf_abr_unapprove_summaries(): Stop");
 }
 
 void
@@ -1374,7 +1374,7 @@
   struct ospf_area_range *range;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_prepare_aggregates(): Start");
+    zlog_debug ("ospf_abr_prepare_aggregates(): Start");
 
   for (node = listhead (ospf->areas); node; nextnode (node))
     {
@@ -1389,7 +1389,7 @@
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_prepare_aggregates(): Stop");
+    zlog_debug ("ospf_abr_prepare_aggregates(): Stop");
 }
 
 void
@@ -1402,14 +1402,14 @@
   struct listnode *node, *n;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_announce_aggregates(): Start");
+    zlog_debug ("ospf_abr_announce_aggregates(): Start");
 
   for (node = listhead (ospf->areas); node; nextnode (node))
     {
       area = getdata (node);
 
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_abr_announce_aggregates(): looking at area %s",
+	zlog_debug ("ospf_abr_announce_aggregates(): looking at area %s",
 		   inet_ntoa (area->area_id));
 
       for (rn = route_top (area->ranges); rn; rn = route_next (rn))
@@ -1418,7 +1418,7 @@
 	    if (!CHECK_FLAG (range->flags, OSPF_AREA_RANGE_ADVERTISE))
 	      {
 		if (IS_DEBUG_OSPF_EVENT)
-		  zlog_info ("ospf_abr_announce_aggregates():"
+		  zlog_debug ("ospf_abr_announce_aggregates():"
 			     " discarding suppress-ranges");
 		continue;
 	      }
@@ -1428,7 +1428,7 @@
 	    p.prefixlen = range->masklen;
 
 	    if (IS_DEBUG_OSPF_EVENT)
-	      zlog_info ("ospf_abr_announce_aggregates():"
+	      zlog_debug ("ospf_abr_announce_aggregates():"
 			 " this is range: %s/%d",
 			 inet_ntoa (p.u.prefix4), p.prefixlen);
 
@@ -1442,7 +1442,7 @@
 	    if (range->specifics)
 	      {
 		if (IS_DEBUG_OSPF_EVENT)
-		  zlog_info ("ospf_abr_announce_aggregates(): active range");
+		  zlog_debug ("ospf_abr_announce_aggregates(): active range");
 
 		for (n = listhead (ospf->areas); n; nextnode (n))
 		  {
@@ -1461,7 +1461,7 @@
 			OSPF_IS_AREA_BACKBONE (area))
 		      {
 			if (IS_DEBUG_OSPF_EVENT)
-			  zlog_info ("ospf_abr_announce_aggregates(): Skipping "
+			  zlog_debug ("ospf_abr_announce_aggregates(): Skipping "
 				     "announcement of BB aggregate into"
 				     " a transit area");
 			continue; 
@@ -1473,7 +1473,7 @@
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_announce_aggregates(): Stop");
+    zlog_debug ("ospf_abr_announce_aggregates(): Stop");
 }
 
 void
@@ -1486,7 +1486,7 @@
   struct prefix_ipv4 p;
 
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("ospf_abr_send_nssa_aggregates(): Start");
+    zlog_debug ("ospf_abr_send_nssa_aggregates(): Start");
 
   for (node = listhead (ospf->areas); node; nextnode (node))
     {
@@ -1496,7 +1496,7 @@
 	continue;
 
       if (IS_DEBUG_OSPF_NSSA)
-	zlog_info ("ospf_abr_send_nssa_aggregates(): looking at area %s",
+	zlog_debug ("ospf_abr_send_nssa_aggregates(): looking at area %s",
 		   inet_ntoa (area->area_id));
 
       for (rn = route_top (area->ranges); rn; rn = route_next (rn))
@@ -1509,7 +1509,7 @@
           if (!CHECK_FLAG (range->flags, OSPF_AREA_RANGE_ADVERTISE))
 	    {
 	      if (IS_DEBUG_OSPF_NSSA)
-		zlog_info ("ospf_abr_send_nssa_aggregates():"
+		zlog_debug ("ospf_abr_send_nssa_aggregates():"
 			   " discarding suppress-ranges");
 	      continue;
 	    }
@@ -1519,7 +1519,7 @@
           p.prefixlen = range->masklen;
 
 	  if (IS_DEBUG_OSPF_NSSA)
-	    zlog_info ("ospf_abr_send_nssa_aggregates():"
+	    zlog_debug ("ospf_abr_send_nssa_aggregates():"
 		       " this is range: %s/%d",
 		       inet_ntoa (p.prefix), p.prefixlen);
 
@@ -1533,7 +1533,7 @@
           if (range->specifics)
             {
               if (IS_DEBUG_OSPF_NSSA)
-                zlog_info ("ospf_abr_send_nssa_aggregates(): active range");
+                zlog_debug ("ospf_abr_send_nssa_aggregates(): active range");
 
               /* Fetch LSA-Type-7 from aggregate prefix, and then
                *  translate, Install (as Type-5), Approve, and Flood
@@ -1544,7 +1544,7 @@
     } /* all areas */
 
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("ospf_abr_send_nssa_aggregates(): Stop");
+    zlog_debug ("ospf_abr_send_nssa_aggregates(): Stop");
 }
 
 void
@@ -1557,13 +1557,13 @@
     return;
 
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("ospf_abr_announce_stub_defaults(): Start");
+    zlog_debug ("ospf_abr_announce_stub_defaults(): Start");
 
   for (node = listhead (ospf->areas); node; nextnode (node))
     {
       area = getdata (node);
       if (IS_DEBUG_OSPF_NSSA)
-        zlog_info ("ospf_abr_announce_nssa_defaults(): looking at area %s",
+        zlog_debug ("ospf_abr_announce_nssa_defaults(): looking at area %s",
                    inet_ntoa (area->area_id));
 
       if (area->external_routing != OSPF_AREA_NSSA)
@@ -1576,7 +1576,7 @@
       if (area->NSSATranslatorState)
         {
           if (IS_DEBUG_OSPF_NSSA)
-            zlog_info ("ospf_abr_announce_nssa_defaults(): "
+            zlog_debug ("ospf_abr_announce_nssa_defaults(): "
                        "announcing 0.0.0.0/0 to this nssa");
           /* ospf_abr_announce_nssa_asbr_to_as (&p, area->default_cost, area); */
           /*ospf_abr_announce_network_to_area (&p, area->default_cost, area);*/
@@ -1595,7 +1595,7 @@
     return;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_announce_stub_defaults(): Start");
+    zlog_debug ("ospf_abr_announce_stub_defaults(): Start");
 
   p.family = AF_INET;
   p.prefix.s_addr = OSPF_DEFAULT_DESTINATION;
@@ -1605,8 +1605,8 @@
     {
       area = getdata (node);
       if (IS_DEBUG_OSPF_EVENT)
-      zlog_info ("ospf_abr_announce_stub_defaults(): looking at area %s",
-                 inet_ntoa (area->area_id));
+        zlog_debug ("ospf_abr_announce_stub_defaults(): looking at area %s",
+		    inet_ntoa (area->area_id));
 
      if ( (area->external_routing != OSPF_AREA_STUB)
           && (area->external_routing != OSPF_AREA_NSSA)
@@ -1617,14 +1617,14 @@
         continue; /* Sanity Check */
 
       if (IS_DEBUG_OSPF_EVENT)
-      zlog_info ("ospf_abr_announce_stub_defaults(): "
-                 "announcing 0.0.0.0/0 to area %s",
+        zlog_debug ("ospf_abr_announce_stub_defaults(): "
+		    "announcing 0.0.0.0/0 to area %s",
                  inet_ntoa (area->area_id));
       ospf_abr_announce_network_to_area (&p, area->default_cost, area);
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_announce_stub_defaults(): Stop");
+    zlog_debug ("ospf_abr_announce_stub_defaults(): Stop");
 }
 
 int
@@ -1655,13 +1655,13 @@
   /* All AREA PROCESS should have APPROVED necessary LSAs */
   /* Remove any left over and not APPROVED */
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("ospf_abr_remove_unapproved_translates(): Start");
+    zlog_debug ("ospf_abr_remove_unapproved_translates(): Start");
 
   LSDB_LOOP (EXTERNAL_LSDB (ospf), rn, lsa)
     ospf_abr_remove_unapproved_translates_apply (ospf, lsa);
  
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("ospf_abr_remove_unapproved_translates(): Stop");
+    zlog_debug ("ospf_abr_remove_unapproved_translates(): Stop");
 }
 
 void
@@ -1673,14 +1673,14 @@
   struct ospf_lsa *lsa;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_remove_unapproved_summaries(): Start");
+    zlog_debug ("ospf_abr_remove_unapproved_summaries(): Start");
 
   for (node = listhead (ospf->areas); node; nextnode (node))
     {
       area = getdata (node);
 
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_abr_remove_unapproved_summaries(): "
+	zlog_debug ("ospf_abr_remove_unapproved_summaries(): "
 		   "looking at area %s", inet_ntoa (area->area_id));
 
       LSDB_LOOP (SUMMARY_LSDB (area), rn, lsa)
@@ -1695,7 +1695,7 @@
     }
  
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_remove_unapproved_summaries(): Stop");
+    zlog_debug ("ospf_abr_remove_unapproved_summaries(): Stop");
 }
 
 void
@@ -1749,7 +1749,7 @@
 ospf_abr_nssa_task (struct ospf *ospf) /* called only if any_nssa */
 {
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("Check for NSSA-ABR Tasks():");
+    zlog_debug ("Check for NSSA-ABR Tasks():");
 
   if (! IS_OSPF_ABR (ospf))
     return;
@@ -1759,17 +1759,17 @@
 
   /* Each area must confirm TranslatorRole */
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("ospf_abr_nssa_task(): Start");
+    zlog_debug ("ospf_abr_nssa_task(): Start");
 
   /* For all Global Entries flagged "local-translate", unset APPROVED */
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("ospf_abr_nssa_task(): unapprove translates");
+    zlog_debug ("ospf_abr_nssa_task(): unapprove translates");
 
   ospf_abr_unapprove_translates (ospf);
 
   /* RESET all Ranges in every Area, same as summaries */
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("ospf_abr_nssa_task(): NSSA initialize aggregates");
+    zlog_debug ("ospf_abr_nssa_task(): NSSA initialize aggregates");
   ospf_abr_prepare_aggregates (ospf);  /*TURNED OFF just for now */
 
   /* For all NSSAs, Type-7s, translate to 5's, INSTALL/FLOOD, or
@@ -1777,7 +1777,7 @@
    * Install or Approve in Type-5 Global LSDB 
    */
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("ospf_abr_nssa_task(): process translates");
+    zlog_debug ("ospf_abr_nssa_task(): process translates");
   ospf_abr_process_nssa_translates (ospf);
 
   /* Translate/Send any "ranged" aggregates, and also 5-Install and
@@ -1786,25 +1786,25 @@
    *  Install/Flood/Approve 
    */
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info("ospf_abr_nssa_task(): send NSSA aggregates");
+    zlog_debug("ospf_abr_nssa_task(): send NSSA aggregates");
   ospf_abr_send_nssa_aggregates (ospf);  /*TURNED OFF FOR NOW */
 
   /* Send any NSSA defaults as Type-5 
    *if (IS_DEBUG_OSPF_NSSA)
-   * zlog_info ("ospf_abr_nssa_task(): announce nssa defaults");
+   * zlog_debug ("ospf_abr_nssa_task(): announce nssa defaults");
    *ospf_abr_announce_nssa_defaults (ospf);
    * havnt a clue what above is supposed to do.
    */
    
   /* Flush any unapproved previous translates from Global Data Base */
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("ospf_abr_nssa_task(): remove unapproved translates");
+    zlog_debug ("ospf_abr_nssa_task(): remove unapproved translates");
   ospf_abr_remove_unapproved_translates (ospf);
 
   ospf_abr_manage_discard_routes (ospf); /* same as normal...discard */
 
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("ospf_abr_nssa_task(): Stop");
+    zlog_debug ("ospf_abr_nssa_task(): Stop");
 }
 
 /* This is the function taking care about ABR stuff, i.e.
@@ -1813,50 +1813,50 @@
 ospf_abr_task (struct ospf *ospf)
 {
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_task(): Start");
+    zlog_debug ("ospf_abr_task(): Start");
 
   if (ospf->new_table == NULL || ospf->new_rtrs == NULL)
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_abr_task(): Routing tables are not yet ready");
+	zlog_debug ("ospf_abr_task(): Routing tables are not yet ready");
       return;
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_task(): unapprove summaries");
+    zlog_debug ("ospf_abr_task(): unapprove summaries");
   ospf_abr_unapprove_summaries (ospf);
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_task(): prepare aggregates");
+    zlog_debug ("ospf_abr_task(): prepare aggregates");
   ospf_abr_prepare_aggregates (ospf);
 
   if (IS_OSPF_ABR (ospf))
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_abr_task(): process network RT");
+	zlog_debug ("ospf_abr_task(): process network RT");
       ospf_abr_process_network_rt (ospf, ospf->new_table);
 
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_abr_task(): process router RT");
+	zlog_debug ("ospf_abr_task(): process router RT");
       ospf_abr_process_router_rt (ospf, ospf->new_rtrs);
 
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_abr_task(): announce aggregates");
+	zlog_debug ("ospf_abr_task(): announce aggregates");
       ospf_abr_announce_aggregates (ospf);
 
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_abr_task(): announce stub defaults");
+	zlog_debug ("ospf_abr_task(): announce stub defaults");
       ospf_abr_announce_stub_defaults (ospf);
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_task(): remove unapproved summaries");
+    zlog_debug ("ospf_abr_task(): remove unapproved summaries");
   ospf_abr_remove_unapproved_summaries (ospf);
 
   ospf_abr_manage_discard_routes (ospf);
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_abr_task(): Stop");
+    zlog_debug ("ospf_abr_task(): Stop");
 }
 
 
@@ -1868,7 +1868,7 @@
   ospf->t_abr_task = 0;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("Running ABR task on timer");
+    zlog_debug ("Running ABR task on timer");
 
   ospf_check_abr_status (ospf);
   ospf_abr_nssa_check_status (ospf);
@@ -1883,7 +1883,7 @@
 ospf_schedule_abr_task (struct ospf *ospf)
 {
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("Scheduling ABR task");
+    zlog_debug ("Scheduling ABR task");
 
   if (ospf->t_abr_task == NULL)
     ospf->t_abr_task = thread_add_timer (master, ospf_abr_task_timer,
diff --git a/ospfd/ospf_api.c b/ospfd/ospf_api.c
index 8821d74..03b3186 100644
--- a/ospfd/ospf_api.c
+++ b/ospfd/ospf_api.c
@@ -80,13 +80,13 @@
   olsa = (struct opaque_lsa *) data;
 
   opaquelen = ntohs (data->length) - OSPF_LSA_HEADER_SIZE;
-  zlog_warn ("apiserver_lsa_print: opaquelen=%d\n", opaquelen);
+  zlog_debug ("apiserver_lsa_print: opaquelen=%d\n", opaquelen);
 
   for (i = 0; i < opaquelen; i++)
     {
-      zlog_warn ("0x%x ", olsa->mydata[i]);
+      zlog_debug ("0x%x ", olsa->mydata[i]);
     }
-  zlog_warn ("\n");
+  zlog_debug ("\n");
 }
 
 /* -----------------------------------------------------------
@@ -208,18 +208,18 @@
 {
   if (!msg)
     {
-      zlog_warn ("msg_print msg=NULL!\n");
+      zlog_debug ("msg_print msg=NULL!\n");
       return;
     }
 
 #ifdef ORIGINAL_CODING
-  zlog_warn
+  zlog_debug
     ("msg=%p msgtype=%d msglen=%d msgseq=%d streamdata=%p streamsize=%lu\n",
      msg, msg->hdr.msgtype, ntohs (msg->hdr.msglen), ntohl (msg->hdr.msgseq),
      STREAM_DATA (msg->s), STREAM_SIZE (msg->s));
 #else /* ORIGINAL_CODING */
   /* API message common header part. */
-  zlog_info
+  zlog_debug
     ("API-msg [%s]: type(%d),len(%d),seq(%lu),data(%p),size(%lu)",
      ospf_api_typename (msg->hdr.msgtype), msg->hdr.msgtype, 
      ntohs (msg->hdr.msglen), (unsigned long) ntohl (msg->hdr.msgseq),
diff --git a/ospfd/ospf_apiserver.c b/ospfd/ospf_apiserver.c
index 671bbc5..4f294f7 100644
--- a/ospfd/ospf_apiserver.c
+++ b/ospfd/ospf_apiserver.c
@@ -247,7 +247,7 @@
 ospf_apiserver_new_lsa_hook (struct ospf_lsa *lsa)
 {
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("API: Put LSA(%p)[%s] into reserve, total=%ld", lsa, dump_lsa_key (lsa), lsa->lsdb->total);
+    zlog_debug ("API: Put LSA(%p)[%s] into reserve, total=%ld", lsa, dump_lsa_key (lsa), lsa->lsdb->total);
   return 0;
 }
 
@@ -255,7 +255,7 @@
 ospf_apiserver_del_lsa_hook (struct ospf_lsa *lsa)
 {
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("API: Get LSA(%p)[%s] from reserve, total=%ld", lsa, dump_lsa_key (lsa), lsa->lsdb->total);
+    zlog_debug ("API: Get LSA(%p)[%s] from reserve, total=%ld", lsa, dump_lsa_key (lsa), lsa->lsdb->total);
   return 0;
 }
 
@@ -402,7 +402,7 @@
   listnode_delete (apiserver_list, apiserv);
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("API: Delete apiserv(%p), total#(%d)", apiserv, apiserver_list->count);
+    zlog_debug ("API: Delete apiserv(%p), total#(%d)", apiserv, apiserver_list->count);
 
   /* And free instance. */
   XFREE (MTYPE_OSPF_APISERVER, apiserv);
@@ -426,7 +426,7 @@
       apiserv->t_sync_read = NULL;
 
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("API: ospf_apiserver_read: Peer: %s/%u",
+        zlog_debug ("API: ospf_apiserver_read: Peer: %s/%u",
                     inet_ntoa (apiserv->peer_sync.sin_addr),
                     ntohs (apiserv->peer_sync.sin_port));
     }
@@ -437,7 +437,7 @@
       apiserv->t_async_read = NULL;
 
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("API: ospf_apiserver_read: Peer: %s/%u",
+        zlog_debug ("API: ospf_apiserver_read: Peer: %s/%u",
                     inet_ntoa (apiserv->peer_async.sin_addr),
                     ntohs (apiserv->peer_async.sin_port));
     }
@@ -498,7 +498,7 @@
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("API: ospf_apiserver_sync_write: Peer: %s/%u",
+    zlog_debug ("API: ospf_apiserver_sync_write: Peer: %s/%u",
                 inet_ntoa (apiserv->peer_sync.sin_addr),
                 ntohs (apiserv->peer_sync.sin_port));
 
@@ -567,7 +567,7 @@
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("API: ospf_apiserver_async_write: Peer: %s/%u",
+    zlog_debug ("API: ospf_apiserver_async_write: Peer: %s/%u",
                 inet_ntoa (apiserv->peer_async.sin_addr),
                 ntohs (apiserv->peer_async.sin_port));
 
@@ -699,7 +699,7 @@
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("API: ospf_apiserver_accept: New peer: %s/%u",
+    zlog_debug ("API: ospf_apiserver_accept: New peer: %s/%u",
                inet_ntoa (peer_sync.sin_addr), ntohs (peer_sync.sin_port));
 
   /* Create new socket for asynchronous messages. */
@@ -762,7 +762,7 @@
 #endif /* USE_ASYNC_READ */
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_warn ("API: New apiserv(%p), total#(%d)", apiserv, apiserver_list->count);
+    zlog_debug ("API: New apiserv(%p), total#(%d)", apiserv, apiserver_list->count);
 
   return 0;
 }
@@ -950,7 +950,7 @@
   listnode_add (apiserv->opaque_types, regtype);
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("API: Add LSA-type(%d)/Opaque-type(%d) into"
+    zlog_debug ("API: Add LSA-type(%d)/Opaque-type(%d) into"
                " apiserv(%p), total#(%d)", 
                lsa_type, opaque_type, apiserv, 
                listcount (apiserv->opaque_types));
@@ -986,7 +986,7 @@
 	  listnode_delete (apiserv->opaque_types, regtype);
 
           if (IS_DEBUG_OSPF_EVENT)
-            zlog_info ("API: Del LSA-type(%d)/Opaque-type(%d)"
+            zlog_debug ("API: Del LSA-type(%d)/Opaque-type(%d)"
                        " from apiserv(%p), total#(%d)", 
                        lsa_type, opaque_type, apiserv, 
                        listcount (apiserv->opaque_types));
@@ -1502,7 +1502,7 @@
 
   if (IS_DEBUG_OSPF (lsa, LSA_GENERATE))
     {
-      zlog_info ("LSA[Type%d:%s]: Creating an Opaque-LSA instance",
+      zlog_debug ("LSA[Type%d:%s]: Creating an Opaque-LSA instance",
 		 protolsa->type, inet_ntoa (protolsa->id));
     }
 
@@ -1908,7 +1908,7 @@
   /* Debug logging. */
   if (IS_DEBUG_OSPF (lsa, LSA_GENERATE))
     {
-      zlog_info ("LSA[Type%d:%s]: Refresh Opaque LSA",
+      zlog_debug ("LSA[Type%d:%s]: Refresh Opaque LSA",
 		 new->data->type, inet_ntoa (new->data->id));
       ospf_lsa_header_dump (new->data);
     }
@@ -2224,17 +2224,17 @@
   else
     {
       int i;
-      zlog_info ("    Added using OSPF API: %u octets of opaque data %s",
+      zlog_debug ("    Added using OSPF API: %u octets of opaque data %s",
 		 opaquelen,
 		 VALID_OPAQUE_INFO_LEN (lsa->
 					data) ? "" : "(Invalid length?)");
-      zlog_info ("    Opaque data: ");
+      zlog_debug ("    Opaque data: ");
 
       for (i = 0; i < opaquelen; i++)
 	{
-	  zlog_info ("0x%x ", olsa->data[i]);
+	  zlog_debug ("0x%x ", olsa->data[i]);
 	}
-      zlog_info ("\n");
+      zlog_debug ("\n");
     }
   return;
 }
diff --git a/ospfd/ospf_asbr.c b/ospfd/ospf_asbr.c
index d13bbc4..71093d9 100644
--- a/ospfd/ospf_asbr.c
+++ b/ospfd/ospf_asbr.c
@@ -43,15 +43,16 @@
 #include "ospfd/ospf_route.h"
 #include "ospfd/ospf_zebra.h"
 #include "ospfd/ospf_dump.h"
+
 
 /* Remove external route. */
 void
-ospf_external_route_remove (struct prefix_ipv4 *p)
+ospf_external_route_remove (struct ospf *ospf, struct prefix_ipv4 *p)
 {
   struct route_node *rn;
   struct ospf_route *or;
 
-  rn = route_node_lookup (ospf_top->old_external_route, (struct prefix *) p);
+  rn = route_node_lookup (ospf->old_external_route, (struct prefix *) p);
   if (rn)
     if ((or = rn->info))
       {
@@ -76,11 +77,12 @@
 
 /* Lookup external route. */
 struct ospf_route *
-ospf_external_route_lookup (struct prefix_ipv4 *p)
+ospf_external_route_lookup (struct ospf *ospf,
+			    struct prefix_ipv4 *p)
 {
   struct route_node *rn;
 
-  rn = route_node_lookup (ospf_top->old_external_route, (struct prefix *) p);
+  rn = route_node_lookup (ospf->old_external_route, (struct prefix *) p);
   if (rn)
     {
       route_unlock_node (rn);
@@ -166,7 +168,7 @@
   rn->info = new;
 
   if (IS_DEBUG_OSPF (lsa, LSA_GENERATE))
-    zlog_info ("Redistribute[%s]: %s/%d external info created.",
+    zlog_debug ("Redistribute[%s]: %s/%d external info created.",
 	       LOOKUP (ospf_redistributed_proto, type),
 	       inet_ntoa (p.prefix), p.prefixlen);
   return new;
@@ -203,14 +205,15 @@
 }
 
 struct ospf_lsa *
-ospf_external_info_find_lsa (struct prefix_ipv4 *p)
+ospf_external_info_find_lsa (struct ospf *ospf,
+			     struct prefix_ipv4 *p)
 {
   struct ospf_lsa *lsa;
   struct as_external_lsa *al;
   struct in_addr mask, id;
 
-  lsa = ospf_lsdb_lookup_by_id (ospf_top->lsdb, OSPF_AS_EXTERNAL_LSA,
-			       p->prefix, ospf_top->router_id);
+  lsa = ospf_lsdb_lookup_by_id (ospf->lsdb, OSPF_AS_EXTERNAL_LSA,
+				p->prefix, ospf->router_id);
 
   if (!lsa)
     return NULL;
@@ -222,8 +225,8 @@
   if (mask.s_addr != al->mask.s_addr)
     {
       id.s_addr = p->prefix.s_addr | (~mask.s_addr);
-      lsa = ospf_lsdb_lookup_by_id (ospf_top->lsdb, OSPF_AS_EXTERNAL_LSA,
-				   id, ospf_top->router_id);
+      lsa = ospf_lsdb_lookup_by_id (ospf->lsdb, OSPF_AS_EXTERNAL_LSA,
+				   id, ospf->router_id);
       if (!lsa)
 	return NULL;
     }
@@ -234,7 +237,7 @@
 
 /* Update ASBR status. */
 void
-ospf_asbr_status_update (u_char status)
+ospf_asbr_status_update (struct ospf *ospf, u_char status)
 {
   zlog_info ("ASBR[Status:%d]: Update", status);
 
@@ -242,46 +245,49 @@
   if (status)
     {
       /* Already ASBR. */
-      if (OSPF_IS_ASBR)
+      if (IS_OSPF_ASBR (ospf))
 	{
 	  zlog_info ("ASBR[Status:%d]: Already ASBR", status);
 	  return;
 	}
-      SET_FLAG (ospf_top->flags, OSPF_FLAG_ASBR);
+      SET_FLAG (ospf->flags, OSPF_FLAG_ASBR);
     }
   else
     {
       /* Already non ASBR. */
-      if (! OSPF_IS_ASBR)
+      if (! IS_OSPF_ASBR (ospf))
 	{
 	  zlog_info ("ASBR[Status:%d]: Already non ASBR", status);
 	  return;
 	}
-      UNSET_FLAG (ospf_top->flags, OSPF_FLAG_ASBR);
+      UNSET_FLAG (ospf->flags, OSPF_FLAG_ASBR);
     }
 
   /* Transition from/to status ASBR, schedule timer. */
-  ospf_spf_calculate_schedule ();
-  OSPF_TIMER_ON (ospf_top->t_router_lsa_update,
+  ospf_spf_calculate_schedule (ospf);
+  OSPF_TIMER_ON (ospf->t_router_lsa_update,
 		 ospf_router_lsa_update_timer, OSPF_LSA_UPDATE_DELAY);
 }
 
 void
 ospf_redistribute_withdraw (u_char type)
 {
+  struct ospf *ospf;
   struct route_node *rn;
   struct external_info *ei;
 
+  ospf = ospf_lookup ();
+
   /* Delete external info for specified type. */
   if (EXTERNAL_INFO (type))
     for (rn = route_top (EXTERNAL_INFO (type)); rn; rn = route_next (rn))
       if ((ei = rn->info))
-	if (ospf_external_info_find_lsa (&ei->p))
+	if (ospf_external_info_find_lsa (ospf, &ei->p))
 	  {
 	    if (is_prefix_default (&ei->p) &&
-		ospf_top->default_originate != DEFAULT_ORIGINATE_NONE)
+		ospf->default_originate != DEFAULT_ORIGINATE_NONE)
 	      continue;
-	    ospf_external_lsa_flush (type, &ei->p, ei->ifindex, ei->nexthop);
+	    ospf_external_lsa_flush (ospf, type, &ei->p, ei->ifindex, ei->nexthop);
 	    ospf_external_info_delete (type, ei->p);
 	  }
 }
diff --git a/ospfd/ospf_ase.c b/ospfd/ospf_ase.c
index 43951e9..e44a8e9 100644
--- a/ospfd/ospf_ase.c
+++ b/ospfd/ospf_ase.c
@@ -295,13 +295,13 @@
 
   if (lsa->data->type == OSPF_AS_NSSA_LSA)
     if (IS_DEBUG_OSPF_NSSA)
-      zlog_info ("ospf_ase_calc(): Processing Type-7");
+      zlog_debug ("ospf_ase_calc(): Processing Type-7");
 
   /* Stay away from any Local Translated Type-7 LSAs */
   if (CHECK_FLAG (lsa->flags, OSPF_LSA_LOCAL_XLT))
     {
       if (IS_DEBUG_OSPF_NSSA)
-	zlog_info ("ospf_ase_calc(): Rejecting Local Xlt'd");
+	zlog_debug ("ospf_ase_calc(): Rejecting Local Xlt'd");
       return 0;
     }
 
@@ -631,7 +631,7 @@
 	  {
 	    area = getdata (node);
 	    if (IS_DEBUG_OSPF_NSSA)
-	      zlog_info ("ospf_ase_calculate_timer(): looking at area %s",
+	      zlog_debug ("ospf_ase_calculate_timer(): looking at area %s",
 			 inet_ntoa (area->area_id));
 
 	    if (area->external_routing == OSPF_AREA_NSSA)
