diff --git a/ospfd/ospf_nsm.c b/ospfd/ospf_nsm.c
index dd5ba7b..e77546a 100644
--- a/ospfd/ospf_nsm.c
+++ b/ospfd/ospf_nsm.c
@@ -81,7 +81,7 @@
   oi = nbr->oi;
 
   if (IS_DEBUG_OSPF (nsm, NSM_TIMERS))
-    zlog (NULL, LOG_INFO, "NSM[%s:%s]: Timer (DD Retransmit timer expire)",
+    zlog (NULL, LOG_DEBUG, "NSM[%s:%s]: Timer (DD Retransmit timer expire)",
 	  IF_NAME (nbr->oi), inet_ntoa (nbr->src));
 
   /* resent last send DD packet. */
@@ -144,7 +144,7 @@
 nsm_ignore (struct ospf_neighbor *nbr)
 {
   if (IS_DEBUG_OSPF (nsm, NSM_EVENTS))
-    zlog (NULL, LOG_INFO, "NSM[%s:%s]: nsm_ignore called",
+    zlog (NULL, LOG_DEBUG, "NSM[%s:%s]: nsm_ignore called",
 	  IF_NAME (nbr->oi), inet_ntoa (nbr->router_id));
 
   return 0;
@@ -449,7 +449,7 @@
 			  nbr_nbma->v_poll);
 
       if (IS_DEBUG_OSPF (nsm, NSM_EVENTS))
-	zlog_info ("NSM[%s:%s]: Down (PollIntervalTimer scheduled)",
+	zlog_debug ("NSM[%s:%s]: Down (PollIntervalTimer scheduled)",
 		   IF_NAME (nbr->oi), inet_ntoa (nbr->address.u.prefix4));  
     }
 
@@ -669,7 +669,7 @@
   
   /* Logging change of status. */
   if (IS_DEBUG_OSPF (nsm, NSM_STATUS))
-    zlog_info ("NSM[%s:%s]: State change %s -> %s",
+    zlog_debug ("NSM[%s:%s]: State change %s -> %s",
 	       IF_NAME (nbr->oi), inet_ntoa (nbr->router_id),
 	       LOOKUP (ospf_nsm_state_msg, nbr->state),
 	       LOOKUP (ospf_nsm_state_msg, state));
@@ -832,7 +832,7 @@
   if (event == NSM_KillNbr || event == NSM_InactivityTimer)
     {
       if (IS_DEBUG_OSPF (nsm, NSM_EVENTS))
-	zlog_info ("NSM[%s:%s]: neighbor deleted",
+	zlog_debug ("NSM[%s:%s]: neighbor deleted",
 		   IF_NAME (oi), inet_ntoa (router_id));
 
       /* Timers are canceled in ospf_nbr_free, moreover we cannot call
@@ -846,7 +846,7 @@
     next_state = NSM [nbr->state][event].next_state;
 
   if (IS_DEBUG_OSPF (nsm, NSM_EVENTS))
-    zlog_info ("NSM[%s:%s]: %s (%s)", IF_NAME (oi),
+    zlog_debug ("NSM[%s:%s]: %s (%s)", IF_NAME (oi),
 	       inet_ntoa (nbr->router_id),
 	       LOOKUP (ospf_nsm_state_msg, nbr->state),
 	       ospf_nsm_event_str [event]);
diff --git a/ospfd/ospf_opaque.c b/ospfd/ospf_opaque.c
index 74bb5b7..4e7b04f 100644
--- a/ospfd/ospf_opaque.c
+++ b/ospfd/ospf_opaque.c
@@ -767,7 +767,7 @@
   if (!CHECK_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE))
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("Opaque capability: OFF -> ON");
+        zlog_debug ("Opaque capability: OFF -> ON");
 
       SET_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE);
       ospf_renegotiate_optional_capabilities (ospf);
@@ -794,7 +794,7 @@
   if (CHECK_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE))
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("Opaque capability: ON -> OFF");
+        zlog_debug ("Opaque capability: ON -> OFF");
 
       UNSET_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE);
       ospf_renegotiate_optional_capabilities (ospf);
@@ -1064,7 +1064,7 @@
           if (! CHECK_FLAG (top->opaque, OPAQUE_OPERATION_READY_BIT))
             {
               if (IS_DEBUG_OSPF_EVENT)
-                zlog_info ("Opaque-LSA: Now get operational!");
+                zlog_debug ("Opaque-LSA: Now get operational!");
 
               SET_FLAG (top->opaque, OPAQUE_OPERATION_READY_BIT);
             }
@@ -1187,11 +1187,11 @@
     }
   else
     {
-      zlog_info ("    Opaque-Type %u (%s)", opaque_type,
+      zlog_debug ("    Opaque-Type %u (%s)", opaque_type,
 		 ospf_opaque_type_name (opaque_type));
-      zlog_info ("    Opaque-ID   0x%x", opaque_id);
+      zlog_debug ("    Opaque-ID   0x%x", opaque_id);
 
-      zlog_info ("    Opaque-Info: %u octets of data%s",
+      zlog_debug ("    Opaque-Info: %u octets of data%s",
                ntohs (lsah->length) - OSPF_LSA_HEADER_SIZE,
                VALID_OPAQUE_INFO_LEN(lsah) ? "" : "(Invalid length?)");
     }
@@ -1304,13 +1304,13 @@
   if (! CHECK_FLAG (top->opaque, OPAQUE_OPERATION_READY_BIT))
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("ospf_opaque_lsa_originate_schedule: Not operational.");
+        zlog_debug ("ospf_opaque_lsa_originate_schedule: Not operational.");
       goto out; /* This is not an error. */
     }
   if (IS_OPAQUE_LSA_ORIGINATION_BLOCKED (top->opaque))
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("ospf_opaque_lsa_originate_schedule: Under blockade.");
+        zlog_debug ("ospf_opaque_lsa_originate_schedule: Under blockade.");
       goto out; /* This is not an error, too. */
     }
 
@@ -1333,7 +1333,7 @@
   &&    oi->t_opaque_lsa_self == NULL)
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("Schedule Type-9 Opaque-LSA origination in %d sec later.", delay);
+        zlog_debug ("Schedule Type-9 Opaque-LSA origination in %d sec later.", delay);
       oi->t_opaque_lsa_self =
 	thread_add_timer (master, ospf_opaque_type9_lsa_originate, oi, delay);
       delay += OSPF_MIN_LS_INTERVAL;
@@ -1349,7 +1349,7 @@
        * again and again.
        */
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("Schedule Type-10 Opaque-LSA origination in %d sec later.", delay);
+        zlog_debug ("Schedule Type-10 Opaque-LSA origination in %d sec later.", delay);
       area->t_opaque_lsa_self =
         thread_add_timer (master, ospf_opaque_type10_lsa_originate,
                           area, delay);
@@ -1366,7 +1366,7 @@
        * again and again.
        */
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("Schedule Type-11 Opaque-LSA origination in %d sec later.", delay);
+        zlog_debug ("Schedule Type-11 Opaque-LSA origination in %d sec later.", delay);
       top->t_opaque_lsa_self =
         thread_add_timer (master, ospf_opaque_type11_lsa_originate,
                           top, delay);
@@ -1457,7 +1457,7 @@
   oi->t_opaque_lsa_self = NULL;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("Timer[Type9-LSA]: Originate Opaque-LSAs for OI %s",
+    zlog_debug ("Timer[Type9-LSA]: Originate Opaque-LSAs for OI %s",
                 IF_NAME (oi));
 
   rc = opaque_lsa_originate_callback (ospf_opaque_type9_funclist, oi);
@@ -1475,7 +1475,7 @@
   area->t_opaque_lsa_self = NULL;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("Timer[Type10-LSA]: Originate Opaque-LSAs for Area %s",
+    zlog_debug ("Timer[Type10-LSA]: Originate Opaque-LSAs for Area %s",
                 inet_ntoa (area->area_id));
 
   rc = opaque_lsa_originate_callback (ospf_opaque_type10_funclist, area);
@@ -1493,7 +1493,7 @@
   top->t_opaque_lsa_self = NULL;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("Timer[Type11-LSA]: Originate AS-External Opaque-LSAs");
+    zlog_debug ("Timer[Type11-LSA]: Originate AS-External Opaque-LSAs");
 
   rc = opaque_lsa_originate_callback (ospf_opaque_type11_funclist, top);
 
@@ -1553,7 +1553,7 @@
     }
 
   if (IS_DEBUG_OSPF (lsa, LSA_INSTALL))
-    zlog_info ("Install Type-%u Opaque-LSA: [opaque-type=%u, opaque-id=%x]", lsa->data->type, GET_OPAQUE_TYPE (ntohl (lsa->data->id.s_addr)), GET_OPAQUE_ID (ntohl (lsa->data->id.s_addr)));
+    zlog_debug ("Install Type-%u Opaque-LSA: [opaque-type=%u, opaque-id=%x]", lsa->data->type, GET_OPAQUE_TYPE (ntohl (lsa->data->id.s_addr)), GET_OPAQUE_ID (ntohl (lsa->data->id.s_addr)));
 
   /* Replace the existing lsa with the new one. */
   if ((oipt = lookup_opaque_info_by_type (lsa)) != NULL
@@ -1632,7 +1632,7 @@
        * LSA from the routing domain.
        */
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("LSA[Type%d:%s]: Flush stray Opaque-LSA", lsa->data->type, inet_ntoa (lsa->data->id));
+        zlog_debug ("LSA[Type%d:%s]: Flush stray Opaque-LSA", lsa->data->type, inet_ntoa (lsa->data->id));
 
       lsa->data->ls_age = htons (OSPF_LSA_MAXAGE);
       ospf_lsa_maxage (ospf, lsa);
@@ -1754,13 +1754,13 @@
   if (!CHECK_FLAG (top->opaque, OPAQUE_OPERATION_READY_BIT))
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("ospf_opaque_lsa_reoriginate_schedule: Not operational.");
+        zlog_debug ("ospf_opaque_lsa_reoriginate_schedule: Not operational.");
       goto out;                 /* This is not an error. */
     }
   if (IS_OPAQUE_LSA_ORIGINATION_BLOCKED (top->opaque))
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("ospf_opaque_lsa_reoriginate_schedule: Under blockade.");
+        zlog_debug ("ospf_opaque_lsa_reoriginate_schedule: Under blockade.");
       goto out;                 /* This is not an error, too. */
     }
 
@@ -1791,7 +1791,7 @@
   if (oipt->t_opaque_lsa_self != NULL)
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("Type-%u Opaque-LSA has already scheduled to"
+        zlog_debug ("Type-%u Opaque-LSA has already scheduled to"
                    " RE-ORIGINATE: [opaque-type=%u]",
                    lsa_type, GET_OPAQUE_TYPE (ntohl (lsa->data->id.s_addr)));
       goto out;
@@ -1807,7 +1807,7 @@
   delay = OSPF_MIN_LS_INTERVAL; /* XXX */
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("Schedule Type-%u Opaque-LSA to RE-ORIGINATE in %d"
+    zlog_debug ("Schedule Type-%u Opaque-LSA to RE-ORIGINATE in %d"
                " sec later: [opaque-type=%u]", 
                lsa_type, delay, 
                GET_OPAQUE_TYPE (ntohl (lsa->data->id.s_addr)));
@@ -1868,7 +1868,7 @@
   ||    ospf_nbr_count_opaque_capable (oi) == 0)
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("Suspend re-origination of Type-9 Opaque-LSAs (opaque-type=%u) for a while...", oipt->opaque_type);
+        zlog_debug ("Suspend re-origination of Type-9 Opaque-LSAs (opaque-type=%u) for a while...", oipt->opaque_type);
     
       oipt->status = PROC_SUSPEND;
       rc = 0;
@@ -1876,7 +1876,7 @@
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("Timer[Type9-LSA]: Re-originate Opaque-LSAs (opaque-type=%u) for OI (%s)", oipt->opaque_type, IF_NAME (oi));
+    zlog_debug ("Timer[Type9-LSA]: Re-originate Opaque-LSAs (opaque-type=%u) for OI (%s)", oipt->opaque_type, IF_NAME (oi));
 
   rc = (* functab->lsa_originator)(oi);
 out:
@@ -1922,7 +1922,7 @@
   if (n == 0 || ! CHECK_FLAG (top->config, OSPF_OPAQUE_CAPABLE))
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("Suspend re-origination of Type-10 Opaque-LSAs"
+        zlog_debug ("Suspend re-origination of Type-10 Opaque-LSAs"
                    " (opaque-type=%u) for a while...", 
                    oipt->opaque_type);
 
@@ -1932,7 +1932,7 @@
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("Timer[Type10-LSA]: Re-originate Opaque-LSAs"
+    zlog_debug ("Timer[Type10-LSA]: Re-originate Opaque-LSAs"
                " (opaque-type=%u) for Area %s", 
                oipt->opaque_type, inet_ntoa (area->area_id));
 
@@ -1969,7 +1969,7 @@
   if (! CHECK_FLAG (top->config, OSPF_OPAQUE_CAPABLE))
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("Suspend re-origination of Type-11 Opaque-LSAs (opaque-type=%u) for a while...", oipt->opaque_type);
+        zlog_debug ("Suspend re-origination of Type-11 Opaque-LSAs (opaque-type=%u) for a while...", oipt->opaque_type);
     
       oipt->status = PROC_SUSPEND;
       rc = 0;
@@ -1977,7 +1977,7 @@
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("Timer[Type11-LSA]: Re-originate Opaque-LSAs (opaque-type=%u).", oipt->opaque_type);
+    zlog_debug ("Timer[Type11-LSA]: Re-originate Opaque-LSAs (opaque-type=%u).", oipt->opaque_type);
 
   rc = (* functab->lsa_originator)(top);
 out:
@@ -2014,7 +2014,7 @@
   if (oipi->t_opaque_lsa_self != NULL)
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("Type-%u Opaque-LSA has already scheduled to REFRESH: [opaque-type=%u, opaque-id=%x]", lsa->data->type, GET_OPAQUE_TYPE (ntohl (lsa->data->id.s_addr)), GET_OPAQUE_ID (ntohl (lsa->data->id.s_addr)));
+        zlog_debug ("Type-%u Opaque-LSA has already scheduled to REFRESH: [opaque-type=%u, opaque-id=%x]", lsa->data->type, GET_OPAQUE_TYPE (ntohl (lsa->data->id.s_addr)), GET_OPAQUE_ID (ntohl (lsa->data->id.s_addr)));
       goto out;
     }
 
@@ -2036,7 +2036,7 @@
   delay = ospf_lsa_refresh_delay (lsa);
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("Schedule Type-%u Opaque-LSA to REFRESH in %d sec later: [opaque-type=%u, opaque-id=%x]", lsa->data->type, delay, GET_OPAQUE_TYPE (ntohl (lsa->data->id.s_addr)), GET_OPAQUE_ID (ntohl (lsa->data->id.s_addr)));
+    zlog_debug ("Schedule Type-%u Opaque-LSA to REFRESH in %d sec later: [opaque-type=%u, opaque-id=%x]", lsa->data->type, delay, GET_OPAQUE_TYPE (ntohl (lsa->data->id.s_addr)), GET_OPAQUE_ID (ntohl (lsa->data->id.s_addr)));
 
   OSPF_OPAQUE_TIMER_ON (oipi->t_opaque_lsa_self,
                         ospf_opaque_lsa_refresh_timer, oipi, delay);
@@ -2052,7 +2052,7 @@
   struct ospf_lsa *lsa;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("Timer[Opaque-LSA]: (Opaque-LSA Refresh expire)");
+    zlog_debug ("Timer[Opaque-LSA]: (Opaque-LSA Refresh expire)");
 
   oipi = THREAD_ARG (t);
   oipi->t_opaque_lsa_self = NULL;
@@ -2118,7 +2118,7 @@
   lsa->data->ls_age = htons (OSPF_LSA_MAXAGE);
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("Schedule Type-%u Opaque-LSA to FLUSH: [opaque-type=%u, opaque-id=%x]", lsa->data->type, GET_OPAQUE_TYPE (ntohl (lsa->data->id.s_addr)), GET_OPAQUE_ID (ntohl (lsa->data->id.s_addr)));
+    zlog_debug ("Schedule Type-%u Opaque-LSA to FLUSH: [opaque-type=%u, opaque-id=%x]", lsa->data->type, GET_OPAQUE_TYPE (ntohl (lsa->data->id.s_addr)), GET_OPAQUE_ID (ntohl (lsa->data->id.s_addr)));
 
   /* This lsa will be flushed and removed eventually. */
   ospf_lsa_maxage (ospf, lsa);
@@ -2240,7 +2240,7 @@
         continue;
 
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("LSA[%s]: Exclude this entry from LSReq to send.", dump_lsa_key (lsa));
+        zlog_debug ("LSA[%s]: Exclude this entry from LSReq to send.", dump_lsa_key (lsa));
 
       ospf_ls_request_delete (onbr, ls_req);
 /*    ospf_check_nbr_loading (onbr);*//* XXX */
@@ -2302,7 +2302,7 @@
   if (before == 0 && IS_OPAQUE_LSA_ORIGINATION_BLOCKED (top->opaque))
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("Block Opaque-LSA origination: OFF -> ON");
+        zlog_debug ("Block Opaque-LSA origination: OFF -> ON");
     }
 
 out:
@@ -2363,7 +2363,7 @@
         goto out; /* Blocking still in progress. */
 
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("Block Opaque-LSA origination: ON -> OFF");
+        zlog_debug ("Block Opaque-LSA origination: ON -> OFF");
 
       if (! CHECK_FLAG (top->config, OSPF_OPAQUE_CAPABLE))
         goto out; /* Opaque capability condition must have changed. */
@@ -2394,7 +2394,7 @@
   if (n == 0)
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("Self-originated type-9 Opaque-LSAs: OI(%s): Flush completed", IF_NAME (oi));
+        zlog_debug ("Self-originated type-9 Opaque-LSAs: OI(%s): Flush completed", IF_NAME (oi));
 
       UNSET_FLAG (oi->area->ospf->opaque, OPAQUE_BLOCK_TYPE_09_LSA_BIT);
     }
@@ -2425,7 +2425,7 @@
   if (n == 0)
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("Self-originated type-10 Opaque-LSAs: AREA(%s): Flush completed", inet_ntoa (area->area_id));
+        zlog_debug ("Self-originated type-10 Opaque-LSAs: AREA(%s): Flush completed", inet_ntoa (area->area_id));
 
       UNSET_FLAG (area->ospf->opaque, OPAQUE_BLOCK_TYPE_10_LSA_BIT);
     }
@@ -2461,7 +2461,7 @@
   if (n == 0)
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("Self-originated type-11 Opaque-LSAs: Flush completed");
+        zlog_debug ("Self-originated type-11 Opaque-LSAs: Flush completed");
 
       UNSET_FLAG (top->opaque, OPAQUE_BLOCK_TYPE_11_LSA_BIT);
     }
diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c
index 50ff90b..23b6a09 100644
--- a/ospfd/ospf_packet.c
+++ b/ospfd/ospf_packet.c
@@ -543,14 +543,14 @@
       
       if (IS_DEBUG_OSPF_PACKET (type - 1, SEND))
         {
-          zlog_info ("ospf_write_frags: sent id %d, off %d, len %d to %s\n",
+          zlog_debug ("ospf_write_frags: sent id %d, off %d, len %d to %s\n",
                      iph->ip_id, iph->ip_off, iph->ip_len,
                      inet_ntoa (iph->ip_dst));
           if (IS_DEBUG_OSPF_PACKET (type - 1, DETAIL))
             {
-              zlog_info ("-----------------IP Header Dump----------------------");
+              zlog_debug ("-----------------IP Header Dump----------------------");
               ospf_ip_header_dump (iph);
-              zlog_info ("-----------------------------------------------------");
+              zlog_debug ("-----------------------------------------------------");
             }
         }
       
@@ -697,18 +697,18 @@
     {
       if (IS_DEBUG_OSPF_PACKET (type - 1, DETAIL))
 	{
-	  zlog_info ("-----------------------------------------------------");
+	  zlog_debug ("-----------------------------------------------------");
 	  ospf_ip_header_dump (&iph);
 	  stream_set_getp (op->s, 0);
 	  ospf_packet_dump (op->s);
 	}
 
-      zlog_info ("%s sent to [%s] via [%s].",
+      zlog_debug ("%s sent to [%s] via [%s].",
 		 ospf_packet_type_str[type], inet_ntoa (op->dst),
 		 IF_NAME (oi));
 
       if (IS_DEBUG_OSPF_PACKET (type - 1, DETAIL))
-	zlog_info ("-----------------------------------------------------");
+	zlog_debug ("-----------------------------------------------------");
     }
 
   /* Now delete packet from queue. */
@@ -748,7 +748,7 @@
     {
       if (IS_DEBUG_OSPF_PACKET (ospfh->type - 1, RECV))
         {
-          zlog_info ("ospf_header[%s/%s]: selforiginated, "
+          zlog_debug ("ospf_header[%s/%s]: selforiginated, "
                      "dropping.",
                      ospf_packet_type_str[ospfh->type],
                      inet_ntoa (iph->ip_src));
@@ -796,7 +796,7 @@
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("Packet %s [Hello:RECV]: Options %s",
+    zlog_debug ("Packet %s [Hello:RECV]: Options %s",
 	       inet_ntoa (ospfh->router_id),
 	       ospf_options_dump (hello->options));
 
@@ -846,7 +846,7 @@
 	  return;
 	}
       if (IS_DEBUG_OSPF_NSSA)
-        zlog_info ("NSSA-Hello:RECV:Packet from %s:", inet_ntoa(ospfh->router_id));
+        zlog_debug ("NSSA-Hello:RECV:Packet from %s:", inet_ntoa(ospfh->router_id));
     }
   else    
     /* The setting of the E-bit found in the Hello Packet's Options
@@ -1029,7 +1029,7 @@
 	{
 	  /* Received LSA is not recent. */
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("Packet [DD:RECV]: LSA received Type %d, "
+	    zlog_debug ("Packet [DD:RECV]: LSA received Type %d, "
 		       "ID %s is not recent.", lsah->type, inet_ntoa (lsah->id));
 	  ospf_lsa_discard (new);
 	  continue;
@@ -1211,7 +1211,7 @@
       if (CHECK_FLAG (oi->ospf->config, OSPF_OPAQUE_CAPABLE))
         {
           if (IS_DEBUG_OSPF_EVENT)
-            zlog_info ("Neighbor[%s] is %sOpaque-capable.",
+            zlog_debug ("Neighbor[%s] is %sOpaque-capable.",
 		       inet_ntoa (nbr->router_id),
 		       CHECK_FLAG (nbr->options, OSPF_OPTION_O) ? "" : "NOT ");
 
@@ -1251,7 +1251,7 @@
 	  zlog_warn ("Packet[DD]: MS-bit mismatch.");
 	  OSPF_NSM_EVENT_SCHEDULE (nbr, NSM_SeqNumberMismatch);
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("Packet[DD]: dd->flags=%d, nbr->dd_flags=%d",
+	    zlog_debug ("Packet[DD]: dd->flags=%d, nbr->dd_flags=%d",
 		       dd->flags, nbr->dd_flags);
 	  break;
 	}
@@ -1506,7 +1506,7 @@
 	      && nbr->oi->area->external_routing != OSPF_AREA_DEFAULT) 
             {
               if (IS_DEBUG_OSPF_EVENT)
-                zlog_info ("LSA[Type%d:%s]: We are a stub, don't take this LSA.", lsah->type, inet_ntoa (lsah->id));
+                zlog_debug ("LSA[Type%d:%s]: We are a stub, don't take this LSA.", lsah->type, inet_ntoa (lsah->id));
               continue;
             }
         }
@@ -1542,7 +1542,7 @@
       memcpy (lsa->data, lsah, length);
 
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info("LSA[Type%d:%s]: %p new LSA created with Link State Update",
+	zlog_debug("LSA[Type%d:%s]: %p new LSA created with Link State Update",
 		  lsa->data->type, inet_ntoa (lsa->data->id), lsa);
       listnode_add (lsas, lsa);
     }
@@ -1627,7 +1627,7 @@
 
 #define DISCARD_LSA(L,N) {\
         if (IS_DEBUG_OSPF_EVENT) \
-          zlog_info ("ospf_lsa_discard() in ospf_ls_upd() point %d: lsa %p Type-%d", N, lsa, (int) lsa->data->type); \
+          zlog_debug ("ospf_lsa_discard() in ospf_ls_upd() point %d: lsa %p Type-%d", N, lsa, (int) lsa->data->type); \
         ospf_lsa_discard (L); \
 	continue; }
 
@@ -1647,7 +1647,7 @@
 	  char buf2[INET_ADDRSTRLEN];
 	  char buf3[INET_ADDRSTRLEN];
 
-	  zlog_info("LSA Type-%d from %s, ID: %s, ADV: %s",
+	  zlog_debug("LSA Type-%d from %s, ID: %s, ADV: %s",
 		  lsa->data->type,
 		  inet_ntop (AF_INET, &ospfh->router_id,
 			     buf1, INET_ADDRSTRLEN),
@@ -1680,7 +1680,7 @@
 	  {
 	    DISCARD_LSA (lsa, 1);
 	    if (IS_DEBUG_OSPF_NSSA)
-	      zlog_info("Incoming External LSA Discarded: We are NSSA/STUB Area");
+	      zlog_debug("Incoming External LSA Discarded: We are NSSA/STUB Area");
 	  }
 
       if (lsa->data->type == OSPF_AS_NSSA_LSA)
@@ -1688,7 +1688,7 @@
 	  {
 	    DISCARD_LSA (lsa,2);
 	    if (IS_DEBUG_OSPF_NSSA)
-	      zlog_info("Incoming NSSA LSA Discarded:  Not NSSA Area");
+	      zlog_debug("Incoming NSSA LSA Discarded:  Not NSSA Area");
 	  }
 
       /* Find the LSA in the current database. */
@@ -1748,7 +1748,7 @@
           if (current == NULL)
             {
               if (IS_DEBUG_OSPF_EVENT)
-                zlog_info ("LSA[%s]: Previously originated Opaque-LSA, not found in the LSDB.", dump_lsa_key (lsa));
+                zlog_debug ("LSA[%s]: Previously originated Opaque-LSA, not found in the LSDB.", dump_lsa_key (lsa));
 
               SET_FLAG (lsa->flags, OSPF_LSA_SELF);
               listnode_add (mylsa_upds, ospf_lsa_dup  (lsa));
@@ -1782,7 +1782,7 @@
             {
               ospf_lsa_flush_area(lsa,out_if->area);
               if(IS_DEBUG_OSPF_EVENT)
-                zlog_info ("ospf_lsa_discard() in ospf_ls_upd() point 9: lsa %p Type-%d",
+                zlog_debug ("ospf_lsa_discard() in ospf_ls_upd() point 9: lsa %p Type-%d",
                             lsa, (int) lsa->data->type);
               ospf_lsa_discard (lsa);
               Flag = 1;
@@ -2105,12 +2105,12 @@
 	  IPV4_ADDR_SAME (&vl_data->vl_peer, &ospfh->router_id))
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("associating packet with %s",
+	    zlog_debug ("associating packet with %s",
 		       IF_NAME (vl_data->vl_oi));
 	  if (! CHECK_FLAG (vl_data->vl_oi->ifp->flags, IFF_UP))
 	    {
 	      if (IS_DEBUG_OSPF_EVENT)
-		zlog_info ("This VL is not up yet, sorry");
+		zlog_debug ("This VL is not up yet, sorry");
 	      return NULL;
 	    }
 	  
@@ -2119,7 +2119,7 @@
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("couldn't find any VL to associate the packet with");
+    zlog_debug ("couldn't find any VL to associate the packet with");
   
   return NULL;
 }
@@ -2343,7 +2343,7 @@
     {
       if (IS_DEBUG_OSPF_PACKET (0, RECV))
         {
-          zlog_info ("ospf_read[%s]: Dropping self-originated packet",
+          zlog_debug ("ospf_read[%s]: Dropping self-originated packet",
                      inet_ntoa (iph->ip_src));
         }
       stream_free (ibuf);
@@ -2409,18 +2409,18 @@
     {
       if (IS_DEBUG_OSPF_PACKET (ospfh->type - 1, DETAIL))
         {
-          zlog_info ("-----------------------------------------------------");
+          zlog_debug ("-----------------------------------------------------");
           ospf_packet_dump (ibuf);
         }
 
-      zlog_info ("%s received from [%s] via [%s]",
+      zlog_debug ("%s received from [%s] via [%s]",
                  ospf_packet_type_str[ospfh->type],
                  inet_ntoa (ospfh->router_id), IF_NAME (oi));
-      zlog_info (" src [%s],", inet_ntoa (iph->ip_src));
-      zlog_info (" dst [%s]", inet_ntoa (iph->ip_dst));
+      zlog_debug (" src [%s],", inet_ntoa (iph->ip_src));
+      zlog_debug (" dst [%s]", inet_ntoa (iph->ip_dst));
 
       if (IS_DEBUG_OSPF_PACKET (ospfh->type - 1, DETAIL))
-	zlog_info ("-----------------------------------------------------");
+	zlog_debug ("-----------------------------------------------------");
   }
 
   /* Some header verification. */
@@ -2429,7 +2429,7 @@
     {
       if (IS_DEBUG_OSPF_PACKET (ospfh->type - 1, RECV))
         {
-          zlog_info ("ospf_read[%s/%s]: Header check failed, "
+          zlog_debug ("ospf_read[%s/%s]: Header check failed, "
                      "dropping.",
                      ospf_packet_type_str[ospfh->type],
                      inet_ntoa (iph->ip_src));
@@ -2578,7 +2578,7 @@
   stream_putw (s, OSPF_IF_PARAM (oi, v_hello));
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("make_hello: options: %x, int: %s",
+    zlog_debug ("make_hello: options: %x, int: %s",
 	       OPTIONS(oi), IF_NAME (oi));
 
   /* Set Options. */
@@ -2810,7 +2810,7 @@
   int count = 0;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_make_ls_upd: Start");
+    zlog_debug ("ospf_make_ls_upd: Start");
 
   pp = stream_get_putp (s);
   ospf_output_forward (s, OSPF_LS_UPD_MIN_SIZE);
@@ -2821,7 +2821,7 @@
       u_int16_t ls_age;
 
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("ospf_make_ls_upd: List Iteration");
+        zlog_debug ("ospf_make_ls_upd: List Iteration");
 
       lsa = getdata (node);
       assert (lsa);
@@ -2857,7 +2857,7 @@
   stream_set_putp (s, s->endp);
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_make_ls_upd: Stop");
+    zlog_debug ("ospf_make_ls_upd: Stop");
   return length;
 }
 
@@ -2966,7 +2966,7 @@
   nbr_nbma->t_poll = NULL;
 
   if (IS_DEBUG_OSPF (nsm, NSM_TIMERS))
-    zlog (NULL, LOG_INFO, "NSM[%s:%s]: Timer (Poll timer expire)",
+    zlog (NULL, LOG_DEBUG, "NSM[%s:%s]: Timer (Poll timer expire)",
     IF_NAME (nbr_nbma->oi), inet_ntoa (nbr_nbma->addr));
 
   ospf_poll_send (nbr_nbma);
@@ -2990,7 +2990,7 @@
   assert (nbr->oi);
 
   if (IS_DEBUG_OSPF (nsm, NSM_TIMERS))
-    zlog (NULL, LOG_INFO, "NSM[%s:%s]: Timer (hello-reply timer expire)",
+    zlog (NULL, LOG_DEBUG, "NSM[%s:%s]: Timer (hello-reply timer expire)",
 	  IF_NAME (nbr->oi), inet_ntoa (nbr->router_id));
 
   ospf_hello_send_sub (nbr->oi, &nbr->address.u.prefix4);
@@ -3226,7 +3226,7 @@
         }
 
       if (IS_DEBUG_OSPF_PACKET (0, SEND))
-        zlog_warn ("ospf_ls_upd_packet_new: oversized LSA id:%s,"
+        zlog_debug ("ospf_ls_upd_packet_new: oversized LSA id:%s,"
                    " %d bytes originated by %s, will be fragmented!",
                    inet_ntoa (lsa->data->id),
                    ntohs (lsa->data->length),
@@ -3264,7 +3264,7 @@
   u_int16_t length = OSPF_HEADER_SIZE;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("listcount = %d, dst %s", listcount (update), inet_ntoa(addr));
+    zlog_debug ("listcount = %d, dst %s", listcount (update), inet_ntoa(addr));
   
   op = ospf_ls_upd_packet_new (update, oi);
 
@@ -3304,7 +3304,7 @@
   oi->t_ls_upd_event = NULL;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_ls_upd_send_queue start");
+    zlog_debug ("ospf_ls_upd_send_queue start");
 
   for (rn = route_top (oi->ls_upd_queue); rn; rn = rnext)
     {
@@ -3331,14 +3331,14 @@
   if (again != 0)
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("ospf_ls_upd_send_queue: update lists not cleared,"
+        zlog_debug ("ospf_ls_upd_send_queue: update lists not cleared,"
                    " %d nodes to try again, raising new event", again);
       oi->t_ls_upd_event = 
         thread_add_event (master, ospf_ls_upd_send_queue_event, oi, 0);
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_ls_upd_send_queue stop");
+    zlog_debug ("ospf_ls_upd_send_queue stop");
   
   return 0;
 }
diff --git a/ospfd/ospf_route.c b/ospfd/ospf_route.c
index 15331fd..cf55bf0 100644
--- a/ospfd/ospf_route.c
+++ b/ospfd/ospf_route.c
@@ -337,12 +337,12 @@
   struct router_lsa *lsa;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_intra_add_router: Start");
+    zlog_debug ("ospf_intra_add_router: Start");
 
   lsa = (struct router_lsa *) v->lsa;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_intra_add_router: LS ID: %s",
+    zlog_debug ("ospf_intra_add_router: LS ID: %s",
 	       inet_ntoa (lsa->header.id));
 
   ospf_vl_up_check (area, lsa->header.id, v);
@@ -356,7 +356,7 @@
   if (! IS_ROUTER_LSA_BORDER (lsa) && ! IS_ROUTER_LSA_EXTERNAL (lsa))
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_intra_add_router: "
+	zlog_debug ("ospf_intra_add_router: "
 		   "this router is neither ASBR nor ABR, skipping it");
       return;
     }
@@ -398,7 +398,7 @@
   p.prefixlen = IPV4_MAX_BITLEN;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_intra_add_router: talking about %s/%d",
+    zlog_debug ("ospf_intra_add_router: talking about %s/%d",
 	       inet_ntoa (p.prefix), p.prefixlen);
 
   rn = route_node_get (rt, (struct prefix *) &p);
@@ -414,7 +414,7 @@
   listnode_add (rn->info, or);
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_intra_add_router: Stop");
+    zlog_debug ("ospf_intra_add_router: Stop");
 }
 
 /* RFC2328 16.1. (4).  For transit network. */
@@ -492,7 +492,7 @@
   struct ospf_path *path;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_intra_add_stub(): Start");
+    zlog_debug ("ospf_intra_add_stub(): Start");
 
   lsa = (struct router_lsa *) v->lsa;
 
@@ -502,7 +502,7 @@
   apply_mask_ipv4 (&p);
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_intra_add_stub(): processing route to %s/%d",  
+    zlog_debug ("ospf_intra_add_stub(): processing route to %s/%d",  
 	       inet_ntoa (p.prefix), p.prefixlen);
 
   /* (1) Calculate the distance D of stub network from the root.  D is
@@ -512,7 +512,7 @@
   cost = v->distance + ntohs (link->m[0].metric);
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_intra_add_stub(): calculated cost is %d + %d = %d", 
+    zlog_debug ("ospf_intra_add_stub(): calculated cost is %d + %d = %d", 
 	       v->distance, ntohs(link->m[0].metric), cost);
 
   rn = route_node_get (rt, (struct prefix *) &p);
@@ -527,7 +527,7 @@
       cur_or = rn->info;
 
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_intra_add_stub(): "
+	zlog_debug ("ospf_intra_add_stub(): "
 		   "another route to the same prefix found with cost %u",
 		   cur_or->cost);
 
@@ -539,7 +539,7 @@
       if (cost > cur_or->cost)
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_intra_add_stub(): old route is better, exit");
+	    zlog_debug ("ospf_intra_add_stub(): old route is better, exit");
 	  return;
 	}
 
@@ -559,7 +559,7 @@
       if (cost == cur_or->cost)
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_intra_add_stub(): routes are equal, merge");
+	    zlog_debug ("ospf_intra_add_stub(): routes are equal, merge");
 
 	  ospf_route_copy_nexthops_from_vertex (cur_or, v);
 
@@ -578,7 +578,7 @@
       if (cost < cur_or->cost)
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_intra_add_stub(): new route is better, set it");
+	    zlog_debug ("ospf_intra_add_stub(): new route is better, set it");
 
 	  cur_or->cost = cost;
 
@@ -592,7 +592,7 @@
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_intra_add_stub(): installing new route");
+    zlog_debug ("ospf_intra_add_stub(): installing new route");
 
   or = ospf_route_new ();
 
@@ -608,18 +608,18 @@
   if (v != area->spf)
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_intra_add_stub(): this network is on remote router");
+	zlog_debug ("ospf_intra_add_stub(): this network is on remote router");
       ospf_route_copy_nexthops_from_vertex (or, v);
     }
   else
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_intra_add_stub(): this network is on this router");
+	zlog_debug ("ospf_intra_add_stub(): this network is on this router");
 
       if ((oi = ospf_if_lookup_by_prefix (area->ospf, &p)))
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_intra_add_stub(): the interface is %s",
+	    zlog_debug ("ospf_intra_add_stub(): the interface is %s",
 		       IF_NAME (oi));
 
 	  path = ospf_path_new ();
@@ -630,14 +630,14 @@
       else
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_intra_add_stub(): where's the interface ?");
+	    zlog_debug ("ospf_intra_add_stub(): where's the interface ?");
 	}
     }
 
   rn->info = or;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info("ospf_intra_add_stub(): Stop");
+    zlog_debug("ospf_intra_add_stub(): Stop");
 }
 
 const char *ospf_path_type_str[] =
@@ -660,17 +660,17 @@
   struct ospf_path *path;
 
 #if 0
-  zlog_info ("Type   Dest   Area   Path	 Type	 Cost	Next	 Adv.");
-  zlog_info ("					Hop(s)	 Router(s)");
+  zlog_debug ("Type   Dest   Area   Path	 Type	 Cost	Next	 Adv.");
+  zlog_debug ("					Hop(s)	 Router(s)");
 #endif /* 0 */
 
-  zlog_info ("========== OSPF routing table ==========");
+  zlog_debug ("========== OSPF routing table ==========");
   for (rn = route_top (rt); rn; rn = route_next (rn))
     if ((or = rn->info) != NULL)
       {
         if (or->type == OSPF_DESTINATION_NETWORK)
 	  {
-	    zlog_info ("N %s/%d\t%s\t%s\t%d", 
+	    zlog_debug ("N %s/%d\t%s\t%s\t%d", 
 		       inet_ntop (AF_INET, &rn->p.u.prefix4, buf1, BUFSIZ),
 		       rn->p.prefixlen,
 		       inet_ntop (AF_INET, &or->u.std.area_id, buf2,
@@ -680,18 +680,18 @@
 	    for (pnode = listhead (or->paths); pnode; nextnode (pnode))
 	      {
 		path = getdata (pnode);
-		zlog_info ("  -> %s", inet_ntoa (path->nexthop));
+		zlog_debug ("  -> %s", inet_ntoa (path->nexthop));
 	      }
 	  }
         else
-	  zlog_info ("R %s\t%s\t%s\t%d", 
+	  zlog_debug ("R %s\t%s\t%s\t%d", 
 		     inet_ntop (AF_INET, &rn->p.u.prefix4, buf1, BUFSIZ),
 		     inet_ntop (AF_INET, &or->u.std.area_id, buf2,
 				BUFSIZ),
 		     ospf_path_type_str[or->path_type],
 		     or->cost);
       }
-  zlog_info ("========================================");
+  zlog_debug ("========================================");
 }
 
 void
@@ -750,7 +750,7 @@
     return ret;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("Route[Compare]: Path types are the same.");
+    zlog_debug ("Route[Compare]: Path types are the same.");
   /* Path types are the same, compare any cost. */
   switch (r1->path_type)
     {
@@ -889,7 +889,7 @@
   if (rn->info)
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_route_add(): something's wrong !");
+	zlog_debug ("ospf_route_add(): something's wrong !");
       route_unlock_node (rn);
       return;
     }
@@ -904,7 +904,7 @@
   struct ospf_route *or;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("Pruning unreachable networks");
+    zlog_debug ("Pruning unreachable networks");
 
   for (rn = route_top (rt); rn; rn = next)
     {
@@ -915,7 +915,7 @@
 	  if (listcount (or->paths) == 0)
 	    {
 	      if (IS_DEBUG_OSPF_EVENT)
-		zlog_info ("Pruning route to %s/%d",
+		zlog_debug ("Pruning route to %s/%d",
 			   inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen);
 
 	      ospf_route_free (or);
@@ -935,7 +935,7 @@
   struct list *paths;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("Pruning unreachable routers");
+    zlog_debug ("Pruning unreachable routers");
 
   for (rn = route_top (rtrs); rn; rn = next)
     {
@@ -953,9 +953,9 @@
 	    {
 	      if (IS_DEBUG_OSPF_EVENT)
 		{
-		  zlog_info ("Pruning route to rtr %s",
+		  zlog_debug ("Pruning route to rtr %s",
 			     inet_ntoa (rn->p.u.prefix4));
-		  zlog_info ("               via area %s",
+		  zlog_debug ("               via area %s",
 			     inet_ntoa (or->u.std.area_id));
 		}
 
@@ -967,7 +967,7 @@
       if (listcount (paths) == 0)
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("Pruning router node %s", inet_ntoa (rn->p.u.prefix4));
+	    zlog_debug ("Pruning router node %s", inet_ntoa (rn->p.u.prefix4));
 
 	  list_delete (paths);
 	  rn->info = NULL;
@@ -988,7 +988,7 @@
   if (rn == NULL)
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_add_discard_route(): router installation error");
+	zlog_debug ("ospf_add_discard_route(): router installation error");
       return 0;
     }
 
@@ -1001,7 +1001,7 @@
       if (or->path_type == OSPF_PATH_INTRA_AREA)
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_add_discard_route(): "
+	    zlog_debug ("ospf_add_discard_route(): "
 		       "an intra-area route exists");
 	  return 0;
 	}
@@ -1009,7 +1009,7 @@
       if (or->type == OSPF_DESTINATION_DISCARD)
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_add_discard_route(): "
+	    zlog_debug ("ospf_add_discard_route(): "
 		       "discard entry already installed");
 	  return 0;
 	}
diff --git a/ospfd/ospf_spf.c b/ospfd/ospf_spf.c
index c7c25f8..1298ebe 100644
--- a/ospfd/ospf_spf.c
+++ b/ospfd/ospf_spf.c
@@ -121,7 +121,7 @@
   if ( ! IS_DEBUG_OSPF_EVENT)
     return;
 
-  zlog_info("%s %s vertex %s  distance %u backlink %d flags %u",
+  zlog_debug("%s %s vertex %s  distance %u backlink %d flags %u",
             msg,
 	    v->type == OSPF_VERTEX_ROUTER ? "Router" : "Network",
 	    inet_ntoa(v->lsa->id),
@@ -141,7 +141,7 @@
 	  nexthop = getdata (nnode);
 	  if (nexthop)
 	    {
-	      zlog_info (" nexthop %s  interface %s  parent %s",
+	      zlog_debug (" nexthop %s  interface %s  parent %s",
 			 inet_ntop(AF_INET, &nexthop->router, buf1, BUFSIZ),
 			 nexthop->oi ? IF_NAME(nexthop->oi) : "NULL",
 			 nexthop->parent ? inet_ntop(AF_INET, 
@@ -467,7 +467,7 @@
 
   if (IS_DEBUG_OSPF_EVENT)
     {
-      zlog_info ("ospf_nexthop_calculation(): Start");
+      zlog_debug ("ospf_nexthop_calculation(): Start");
       ospf_vertex_dump("V (parent):", v, 1, 1);
       ospf_vertex_dump("W (dest)  :", w, 1, 1);
     }
@@ -493,7 +493,7 @@
 	      if (IS_DEBUG_OSPF_EVENT)
 	        {
 		  char buf1[BUFSIZ];
-		  zlog_info("ospf_nexthop_calculation(): considering link "
+		  zlog_debug("ospf_nexthop_calculation(): considering link "
 			    "type %d link_id %s link_data %s",
 			    l->m[0].type,
 			    inet_ntop (AF_INET, &l->link_id, buf1, BUFSIZ),
@@ -676,7 +676,7 @@
 
   if (IS_DEBUG_OSPF_EVENT)
     {
-      zlog_info("ospf_install_candidate(): candidate list now contains:");
+      zlog_debug("ospf_install_candidate(): candidate list now contains:");
       for (node = listhead (candidate); node; nextnode (node))
         {
 	  cw = (struct vertex *) getdata (node);
@@ -744,7 +744,7 @@
               if (type == LSA_LINK_TYPE_VIRTUALLINK)
                 {
                   if (IS_DEBUG_OSPF_EVENT)
-                    zlog_info ("looking up LSA through VL: %s",
+                    zlog_debug ("looking up LSA through VL: %s",
                                inet_ntoa (l->link_id));
                 }
 
@@ -753,19 +753,18 @@
               if (w_lsa)
                 {
                   if (IS_DEBUG_OSPF_EVENT)
-                    zlog_info ("found Router LSA %s", inet_ntoa (l->link_id));
+                    zlog_debug ("found Router LSA %s", inet_ntoa (l->link_id));
                 }
               break;
             case LSA_LINK_TYPE_TRANSIT:
               if (IS_DEBUG_OSPF_EVENT)
-
-                zlog_info ("Looking up Network LSA, ID: %s",
+                zlog_debug ("Looking up Network LSA, ID: %s",
                            inet_ntoa (l->link_id));
               w_lsa = ospf_lsa_lookup_by_id (area, OSPF_NETWORK_LSA,
                                              l->link_id);
               if (w_lsa)
                 if (IS_DEBUG_OSPF_EVENT)
-                  zlog_info ("found the LSA");
+                  zlog_debug ("found the LSA");
               break;
             default:
               zlog_warn ("Invalid LSA link type %d", type);
@@ -794,7 +793,7 @@
       if ( (link = ospf_lsa_has_link (w_lsa->data, v->lsa)) < 0 )
         {
           if (IS_DEBUG_OSPF_EVENT)
-            zlog_info ("The LSA doesn't have a link back");
+            zlog_debug ("The LSA doesn't have a link back");
           continue;
         }
 
@@ -803,7 +802,7 @@
       if (ospf_spf_has_vertex (rv, nv, w_lsa->data))
         {
           if (IS_DEBUG_OSPF_EVENT)
-            zlog_info ("The LSA is already in SPF");
+            zlog_debug ("The LSA is already in SPF");
           continue;
         }
 
@@ -929,13 +928,13 @@
   if (v->type == OSPF_VERTEX_ROUTER)
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("SPF Result: %d [R] %s", i, inet_ntoa (v->lsa->id));
+        zlog_debug ("SPF Result: %d [R] %s", i, inet_ntoa (v->lsa->id));
     }
   else
     {
       struct network_lsa *lsa = (struct network_lsa *) v->lsa;
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("SPF Result: %d [N] %s/%d", i, inet_ntoa (v->lsa->id),
+        zlog_debug ("SPF Result: %d [N] %s/%d", i, inet_ntoa (v->lsa->id),
                    ip_masklen (lsa->mask));
     }
 
@@ -943,7 +942,7 @@
     {
       nexthop = getdata (nnode);
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info (" nexthop %s", inet_ntoa (nexthop->router));
+        zlog_debug (" nexthop %s", inet_ntoa (nexthop->router));
     }
 
   i++;
@@ -964,7 +963,7 @@
   struct vertex *child;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_process_stub():processing stubs for area %s",
+    zlog_debug ("ospf_process_stub():processing stubs for area %s",
                inet_ntoa (area->area_id));
   if (v->type == OSPF_VERTEX_ROUTER)
     {
@@ -974,13 +973,13 @@
       struct router_lsa *rlsa;
 
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("ospf_process_stubs():processing router LSA, id: %s",
+        zlog_debug ("ospf_process_stubs():processing router LSA, id: %s",
                    inet_ntoa (v->lsa->id));
       rlsa = (struct router_lsa *) v->lsa;
 
 
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("ospf_process_stubs(): we have %d links to process",
+        zlog_debug ("ospf_process_stubs(): we have %d links to process",
                    ntohs (rlsa->links));
       p = ((u_char *) v->lsa) + OSPF_LSA_HEADER_SIZE + 4;
       lim = ((u_char *) v->lsa) + ntohs (v->lsa->length);
@@ -1020,7 +1019,7 @@
   struct listnode *node;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("Route: Router Routing Table free");
+    zlog_debug ("Route: Router Routing Table free");
 
   for (rn = route_top (rtrs); rn; rn = route_next (rn))
     if ((or_list = rn->info) != NULL)
@@ -1050,7 +1049,7 @@
   char buf2[BUFSIZ];
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_rtrs_print() start");
+    zlog_debug ("ospf_rtrs_print() start");
 
   for (rn = route_top (rtrs); rn; rn = route_next (rn))
     if ((or_list = rn->info) != NULL)
@@ -1062,14 +1061,14 @@
             {
             case OSPF_PATH_INTRA_AREA:
               if (IS_DEBUG_OSPF_EVENT)
-                zlog_info ("%s   [%d] area: %s",
+                zlog_debug ("%s   [%d] area: %s",
                            inet_ntop (AF_INET, &or->id, buf1, BUFSIZ),
                            or->cost, inet_ntop (AF_INET, &or->u.std.area_id,
                                                 buf2, BUFSIZ));
               break;
             case OSPF_PATH_INTER_AREA:
               if (IS_DEBUG_OSPF_EVENT)
-                zlog_info ("%s IA [%d] area: %s",
+                zlog_debug ("%s IA [%d] area: %s",
                            inet_ntop (AF_INET, &or->id, buf1, BUFSIZ),
                            or->cost, inet_ntop (AF_INET, &or->u.std.area_id,
                                                 buf2, BUFSIZ));
@@ -1084,19 +1083,19 @@
               if (path->nexthop.s_addr == 0)
                 {
                   if (IS_DEBUG_OSPF_EVENT)
-                    zlog_info ("   directly attached to %s\r\n",
+                    zlog_debug ("   directly attached to %s\r\n",
                                IF_NAME (path->oi));
                 }
               else
                 {
                   if (IS_DEBUG_OSPF_EVENT)
-                    zlog_info ("   via %s, %s\r\n",
+                    zlog_debug ("   via %s, %s\r\n",
                                inet_ntoa (path->nexthop), IF_NAME (path->oi));
                 }
             }
         }
 
-  zlog_info ("ospf_rtrs_print() end");
+  zlog_debug ("ospf_rtrs_print() end");
 }
 
 /* Calculating the shortest-path tree for an area. */
@@ -1112,8 +1111,8 @@
 
   if (IS_DEBUG_OSPF_EVENT)
     {
-      zlog_info ("ospf_spf_calculate: Start");
-      zlog_info ("ospf_spf_calculate: running Dijkstra for area %s",
+      zlog_debug ("ospf_spf_calculate: Start");
+      zlog_debug ("ospf_spf_calculate: running Dijkstra for area %s",
                  inet_ntoa (area->area_id));
     }
 
@@ -1122,7 +1121,7 @@
   if (!area->router_lsa_self)
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("ospf_spf_calculate: "
+        zlog_debug ("ospf_spf_calculate: "
                    "Skip area %s's calculation due to empty router_lsa_self",
                    inet_ntoa (area->area_id));
       return;
@@ -1211,7 +1210,7 @@
   area->ospf->ts_spf = time (NULL);
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_spf_calculate: Stop");
+    zlog_debug ("ospf_spf_calculate: Stop");
 }
 
 /* Timer for SPF calculation. */
@@ -1223,7 +1222,7 @@
   struct listnode *node;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("SPF: Timer (SPF calculation expire)");
+    zlog_debug ("SPF: Timer (SPF calculation expire)");
 
   ospf->t_spf_calc = NULL;
 
@@ -1271,7 +1270,7 @@
     ospf_abr_task (ospf);
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("SPF: calculation complete");
+    zlog_debug ("SPF: calculation complete");
 
   return 0;
 }
@@ -1284,7 +1283,7 @@
   time_t ht, delay;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("SPF: calculation timer scheduled");
+    zlog_debug ("SPF: calculation timer scheduled");
 
   /* OSPF instance does not exist. */
   if (ospf == NULL)
@@ -1294,7 +1293,7 @@
   if (ospf->t_spf_calc)
     {
       if (IS_DEBUG_OSPF_EVENT)
-        zlog_info ("SPF: calculation timer is already scheduled: %p",
+        zlog_debug ("SPF: calculation timer is already scheduled: %p",
                    ospf->t_spf_calc);
       return;
     }
@@ -1313,7 +1312,7 @@
     delay = ospf->spf_delay;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("SPF: calculation timer delay = %ld", (long)delay);
+    zlog_debug ("SPF: calculation timer delay = %ld", (long)delay);
   ospf->t_spf_calc =
     thread_add_timer (master, ospf_spf_calculate_timer, ospf, delay);
 }
diff --git a/ospfd/ospf_te.c b/ospfd/ospf_te.c
index ff89350..0b04c96 100644
--- a/ospfd/ospf_te.c
+++ b/ospfd/ospf_te.c
@@ -881,7 +881,7 @@
   lsa_id.s_addr = htonl (tmp);
 
   if (IS_DEBUG_OSPF (lsa, LSA_GENERATE))
-    zlog_info ("LSA[Type%d:%s]: Create an Opaque-LSA/MPLS-TE instance", lsa_type, inet_ntoa (lsa_id));
+    zlog_debug ("LSA[Type%d:%s]: Create an Opaque-LSA/MPLS-TE instance", lsa_type, inet_ntoa (lsa_id));
 
   /* Set opaque-LSA header fields. */
   lsa_header_set (s, options, lsa_type, lsa_id, area->ospf->router_id);
@@ -952,7 +952,7 @@
     {
       char area_id[INET_ADDRSTRLEN];
       strcpy (area_id, inet_ntoa (area->area_id));
-      zlog_info ("LSA[Type%d:%s]: Originate Opaque-LSA/MPLS-TE: Area(%s), Link(%s)", new->data->type, inet_ntoa (new->data->id), area_id, lp->ifp->name);
+      zlog_debug ("LSA[Type%d:%s]: Originate Opaque-LSA/MPLS-TE: Area(%s), Link(%s)", new->data->type, inet_ntoa (new->data->id), area_id, lp->ifp->name);
       ospf_lsa_header_dump (new->data);
     }
 
@@ -1065,7 +1065,7 @@
   /* Debug logging. */
   if (IS_DEBUG_OSPF (lsa, LSA_GENERATE))
     {
-      zlog_info ("LSA[Type%d:%s]: Refresh Opaque-LSA/MPLS-TE",
+      zlog_debug ("LSA[Type%d:%s]: Refresh Opaque-LSA/MPLS-TE",
 		 new->data->type, inet_ntoa (new->data->id));
       ospf_lsa_header_dump (new->data);
     }
@@ -1124,7 +1124,7 @@
   if (vty != NULL)
     vty_out (vty, "  Router-Address: %s%s", inet_ntoa (top->value), VTY_NEWLINE);
   else
-    zlog_info ("    Router-Address: %s", inet_ntoa (top->value));
+    zlog_debug ("    Router-Address: %s", inet_ntoa (top->value));
 
   return TLV_SIZE (tlvh);
 }
@@ -1137,7 +1137,7 @@
   if (vty != NULL)
     vty_out (vty, "  Link: %u octets of data%s", ntohs (top->header.length), VTY_NEWLINE);
   else
-    zlog_info ("    Link: %u octets of data", ntohs (top->header.length));
+    zlog_debug ("    Link: %u octets of data", ntohs (top->header.length));
 
   return TLV_HDR_SIZE;	/* Here is special, not "TLV_SIZE". */
 }
@@ -1164,7 +1164,7 @@
   if (vty != NULL)
     vty_out (vty, "  Link-Type: %s (%u)%s", cp, top->link_type.value, VTY_NEWLINE);
   else
-    zlog_info ("    Link-Type: %s (%u)", cp, top->link_type.value);
+    zlog_debug ("    Link-Type: %s (%u)", cp, top->link_type.value);
 
   return TLV_SIZE (tlvh);
 }
@@ -1178,7 +1178,7 @@
   if (vty != NULL)
     vty_out (vty, "  Link-ID: %s%s", inet_ntoa (top->value), VTY_NEWLINE);
   else
-    zlog_info ("    Link-ID: %s", inet_ntoa (top->value));
+    zlog_debug ("    Link-ID: %s", inet_ntoa (top->value));
 
   return TLV_SIZE (tlvh);
 }
@@ -1195,14 +1195,14 @@
   if (vty != NULL)
     vty_out (vty, "  Local Interface IP Address(es): %d%s", n, VTY_NEWLINE);
   else
-    zlog_info ("    Local Interface IP Address(es): %d", n);
+    zlog_debug ("    Local Interface IP Address(es): %d", n);
 
   for (i = 0; i < n; i++)
     {
       if (vty != NULL)
         vty_out (vty, "    #%d: %s%s", i, inet_ntoa (top->value[i]), VTY_NEWLINE);
       else
-        zlog_info ("      #%d: %s", i, inet_ntoa (top->value[i]));
+        zlog_debug ("      #%d: %s", i, inet_ntoa (top->value[i]));
     }
   return TLV_SIZE (tlvh);
 }
@@ -1218,14 +1218,14 @@
   if (vty != NULL)
     vty_out (vty, "  Remote Interface IP Address(es): %d%s", n, VTY_NEWLINE);
   else
-    zlog_info ("    Remote Interface IP Address(es): %d", n);
+    zlog_debug ("    Remote Interface IP Address(es): %d", n);
 
   for (i = 0; i < n; i++)
     {
       if (vty != NULL)
         vty_out (vty, "    #%d: %s%s", i, inet_ntoa (top->value[i]), VTY_NEWLINE);
       else
-        zlog_info ("      #%d: %s", i, inet_ntoa (top->value[i]));
+        zlog_debug ("      #%d: %s", i, inet_ntoa (top->value[i]));
     }
   return TLV_SIZE (tlvh);
 }
@@ -1239,7 +1239,7 @@
   if (vty != NULL)
     vty_out (vty, "  Traffic Engineering Metric: %u%s", (u_int32_t) ntohl (top->value), VTY_NEWLINE);
   else
-    zlog_info ("    Traffic Engineering Metric: %u", (u_int32_t) ntohl (top->value));
+    zlog_debug ("    Traffic Engineering Metric: %u", (u_int32_t) ntohl (top->value));
 
   return TLV_SIZE (tlvh);
 }
@@ -1256,7 +1256,7 @@
   if (vty != NULL)
     vty_out (vty, "  Maximum Bandwidth: %g (Bytes/sec)%s", fval, VTY_NEWLINE);
   else
-    zlog_info ("    Maximum Bandwidth: %g (Bytes/sec)", fval);
+    zlog_debug ("    Maximum Bandwidth: %g (Bytes/sec)", fval);
 
   return TLV_SIZE (tlvh);
 }
@@ -1273,7 +1273,7 @@
   if (vty != NULL)
     vty_out (vty, "  Maximum Reservable Bandwidth: %g (Bytes/sec)%s", fval, VTY_NEWLINE);
   else
-    zlog_info ("    Maximum Reservable Bandwidth: %g (Bytes/sec)", fval);
+    zlog_debug ("    Maximum Reservable Bandwidth: %g (Bytes/sec)", fval);
 
   return TLV_SIZE (tlvh);
 }
@@ -1292,7 +1292,7 @@
       if (vty != NULL)
         vty_out (vty, "  Unreserved Bandwidth (pri %d): %g (Bytes/sec)%s", i, fval, VTY_NEWLINE);
       else
-        zlog_info ("    Unreserved Bandwidth (pri %d): %g (Bytes/sec)", i, fval);
+        zlog_debug ("    Unreserved Bandwidth (pri %d): %g (Bytes/sec)", i, fval);
     }
 
   return TLV_SIZE (tlvh);
@@ -1307,7 +1307,7 @@
   if (vty != NULL)
     vty_out (vty, "  Resource class/color: 0x%x%s", (u_int32_t) ntohl (top->value), VTY_NEWLINE);
   else
-    zlog_info ("    Resource Class/Color: 0x%x", (u_int32_t) ntohl (top->value));
+    zlog_debug ("    Resource Class/Color: 0x%x", (u_int32_t) ntohl (top->value));
 
   return TLV_SIZE (tlvh);
 }
@@ -1318,7 +1318,7 @@
   if (vty != NULL)
     vty_out (vty, "  Unknown TLV: [type(0x%x), length(0x%x)]%s", ntohs (tlvh->type), ntohs (tlvh->length), VTY_NEWLINE);
   else
-    zlog_info ("    Unknown TLV: [type(0x%x), length(0x%x)]", ntohs (tlvh->type), ntohs (tlvh->length));
+    zlog_debug ("    Unknown TLV: [type(0x%x), length(0x%x)]", ntohs (tlvh->type), ntohs (tlvh->length));
 
   return TLV_SIZE (tlvh);
 }
@@ -1478,7 +1478,7 @@
     return CMD_SUCCESS;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("MPLS-TE: OFF -> ON");
+    zlog_debug ("MPLS-TE: OFF -> ON");
 
   OspfMplsTE.status = enabled;
 
@@ -1517,7 +1517,7 @@
     return CMD_SUCCESS;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("MPLS-TE: ON -> OFF");
+    zlog_debug ("MPLS-TE: ON -> OFF");
 
   OspfMplsTE.status = disabled;
 
diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c
index c84da74..6a679f9 100644
--- a/ospfd/ospf_vty.c
+++ b/ospfd/ospf_vty.c
@@ -3395,6 +3395,7 @@
   return 0;
 }
 
+/* N.B. This function currently seems to be unused. */
 int
 show_as_external_lsa_stdvty (struct ospf_lsa *lsa)
 {
@@ -3402,18 +3403,18 @@
 
   /* show_ip_ospf_database_header (vty, lsa); */
 
-  zlog_info( "  Network Mask: /%d%s",
+  zlog_debug( "  Network Mask: /%d%s",
 	     ip_masklen (al->mask), "\n");
-  zlog_info( "        Metric Type: %s%s",
+  zlog_debug( "        Metric Type: %s%s",
 	     IS_EXTERNAL_METRIC (al->e[0].tos) ?
 	     "2 (Larger than any link state path)" : "1", "\n");
-  zlog_info( "        TOS: 0%s", "\n");
-  zlog_info( "        Metric: %d%s",
+  zlog_debug( "        TOS: 0%s", "\n");
+  zlog_debug( "        Metric: %d%s",
 	     GET_METRIC (al->e[0].metric), "\n");
-  zlog_info( "        Forward Address: %s%s",
+  zlog_debug( "        Forward Address: %s%s",
 	     inet_ntoa (al->e[0].fwd_addr), "\n");
 
-  zlog_info( "        External Route Tag: %u%s%s",
+  zlog_debug( "        External Route Tag: %u%s%s",
 	     ntohl (al->e[0].route_tag), "\n", "\n");
 
   return 0;
