diff --git a/ospfd/ospf_dump.c b/ospfd/ospf_dump.c
index e3ca1a0..fd28ac7 100644
--- a/ospfd/ospf_dump.c
+++ b/ospfd/ospf_dump.c
@@ -294,20 +294,20 @@
 
   hello = (struct ospf_hello *) STREAM_PNT (s);
 
-  zlog_info ("Hello");
-  zlog_info ("  NetworkMask %s", inet_ntoa (hello->network_mask));
-  zlog_info ("  HelloInterval %d", ntohs (hello->hello_interval));
-  zlog_info ("  Options %d (%s)", hello->options,
+  zlog_debug ("Hello");
+  zlog_debug ("  NetworkMask %s", inet_ntoa (hello->network_mask));
+  zlog_debug ("  HelloInterval %d", ntohs (hello->hello_interval));
+  zlog_debug ("  Options %d (%s)", hello->options,
 	     ospf_options_dump (hello->options));
-  zlog_info ("  RtrPriority %d", hello->priority);
-  zlog_info ("  RtrDeadInterval %ld", (u_long)ntohl (hello->dead_interval));
-  zlog_info ("  DRouter %s", inet_ntoa (hello->d_router));
-  zlog_info ("  BDRouter %s", inet_ntoa (hello->bd_router));
+  zlog_debug ("  RtrPriority %d", hello->priority);
+  zlog_debug ("  RtrDeadInterval %ld", (u_long)ntohl (hello->dead_interval));
+  zlog_debug ("  DRouter %s", inet_ntoa (hello->d_router));
+  zlog_debug ("  BDRouter %s", inet_ntoa (hello->bd_router));
 
   length -= OSPF_HEADER_SIZE + OSPF_HELLO_MIN_SIZE;
-  zlog_info ("  # Neighbors %d", length / 4);
+  zlog_debug ("  # Neighbors %d", length / 4);
   for (i = 0; length > 0; i++, length -= sizeof (struct in_addr))
-    zlog_info ("    Neighbor %s", inet_ntoa (hello->neighbors[i]));
+    zlog_debug ("    Neighbor %s", inet_ntoa (hello->neighbors[i]));
 }
 
 char *
@@ -328,17 +328,17 @@
 {
   const char *lsah_type = LOOKUP (ospf_lsa_type_msg, lsah->type);
   
-  zlog_info ("  LSA Header");
-  zlog_info ("    LS age %d", ntohs (lsah->ls_age));
-  zlog_info ("    Options %d (%s)", lsah->options,
+  zlog_debug ("  LSA Header");
+  zlog_debug ("    LS age %d", ntohs (lsah->ls_age));
+  zlog_debug ("    Options %d (%s)", lsah->options,
 	     ospf_options_dump (lsah->options));
-  zlog_info ("    LS type %d (%s)", lsah->type,
+  zlog_debug ("    LS type %d (%s)", lsah->type,
              (lsah->type ? lsah_type : "unknown type"));
-  zlog_info ("    Link State ID %s", inet_ntoa (lsah->id));
-  zlog_info ("    Advertising Router %s", inet_ntoa (lsah->adv_router));
-  zlog_info ("    LS sequence number 0x%lx", (u_long)ntohl (lsah->ls_seqnum));
-  zlog_info ("    LS checksum 0x%x", ntohs (lsah->checksum));
-  zlog_info ("    length %d", ntohs (lsah->length));
+  zlog_debug ("    Link State ID %s", inet_ntoa (lsah->id));
+  zlog_debug ("    Advertising Router %s", inet_ntoa (lsah->adv_router));
+  zlog_debug ("    LS sequence number 0x%lx", (u_long)ntohl (lsah->ls_seqnum));
+  zlog_debug ("    LS checksum 0x%x", ntohs (lsah->checksum));
+  zlog_debug ("    length %d", ntohs (lsah->length));
 }
 
 char *
@@ -363,19 +363,19 @@
 
   rl = (struct router_lsa *) STREAM_PNT (s);
 
-  zlog_info ("  Router-LSA");
-  zlog_info ("    flags %s", 
+  zlog_debug ("  Router-LSA");
+  zlog_debug ("    flags %s", 
 	     ospf_router_lsa_flags_dump (rl->flags, buf, BUFSIZ));
-  zlog_info ("    # links %d", ntohs (rl->links));
+  zlog_debug ("    # links %d", ntohs (rl->links));
 
   len = ntohs (rl->header.length) - OSPF_LSA_HEADER_SIZE - 4;
   for (i = 0; len > 0; i++)
     {
-      zlog_info ("    Link ID %s", inet_ntoa (rl->link[i].link_id));
-      zlog_info ("    Link Data %s", inet_ntoa (rl->link[i].link_data));
-      zlog_info ("    Type %d", (u_char) rl->link[i].type);
-      zlog_info ("    TOS %d", (u_char) rl->link[i].tos);
-      zlog_info ("    metric %d", ntohs (rl->link[i].metric));
+      zlog_debug ("    Link ID %s", inet_ntoa (rl->link[i].link_id));
+      zlog_debug ("    Link Data %s", inet_ntoa (rl->link[i].link_data));
+      zlog_debug ("    Type %d", (u_char) rl->link[i].type);
+      zlog_debug ("    TOS %d", (u_char) rl->link[i].tos);
+      zlog_debug ("    metric %d", ntohs (rl->link[i].metric));
 
       len -= 12;
     }
@@ -390,16 +390,16 @@
   nl = (struct network_lsa *) STREAM_PNT (s);
   cnt = (ntohs (nl->header.length) - (OSPF_LSA_HEADER_SIZE + 4)) / 4;
   
-  zlog_info ("  Network-LSA");
+  zlog_debug ("  Network-LSA");
   /*
-  zlog_info ("LSA total size %d", ntohs (nl->header.length));
-  zlog_info ("Network-LSA size %d", 
+  zlog_debug ("LSA total size %d", ntohs (nl->header.length));
+  zlog_debug ("Network-LSA size %d", 
   ntohs (nl->header.length) - OSPF_LSA_HEADER_SIZE);
   */
-  zlog_info ("    Network Mask %s", inet_ntoa (nl->mask));
-  zlog_info ("    # Attached Routers %d", cnt);
+  zlog_debug ("    Network Mask %s", inet_ntoa (nl->mask));
+  zlog_debug ("    # Attached Routers %d", cnt);
   for (i = 0; i < cnt; i++)
-    zlog_info ("      Attached Router %s", inet_ntoa (nl->routers[i]));
+    zlog_debug ("      Attached Router %s", inet_ntoa (nl->routers[i]));
 }
 
 void
@@ -411,12 +411,12 @@
 
   sl = (struct summary_lsa *) STREAM_PNT (s);
 
-  zlog_info ("  Summary-LSA");
-  zlog_info ("    Network Mask %s", inet_ntoa (sl->mask));
+  zlog_debug ("  Summary-LSA");
+  zlog_debug ("    Network Mask %s", inet_ntoa (sl->mask));
 
   size = ntohs (sl->header.length) - OSPF_LSA_HEADER_SIZE - 4;
   for (i = 0; size > 0; size -= 4, i++)
-    zlog_info ("    TOS=%d metric %d", sl->tos,
+    zlog_debug ("    TOS=%d metric %d", sl->tos,
 	       GET_METRIC (sl->metric));
 }
 
@@ -428,17 +428,17 @@
   int i;
 
   al = (struct as_external_lsa *) STREAM_PNT (s);
-  zlog_info ("  %s", ospf_lsa_type_msg[al->header.type].str);
-  zlog_info ("    Network Mask %s", inet_ntoa (al->mask));
+  zlog_debug ("  %s", ospf_lsa_type_msg[al->header.type].str);
+  zlog_debug ("    Network Mask %s", inet_ntoa (al->mask));
 
   size = ntohs (al->header.length) - OSPF_LSA_HEADER_SIZE -4;
   for (i = 0; size > 0; size -= 12, i++)
     {
-      zlog_info ("    bit %s TOS=%d metric %d",
+      zlog_debug ("    bit %s TOS=%d metric %d",
 		 IS_EXTERNAL_METRIC (al->e[i].tos) ? "E" : "-",
 		 al->e[i].tos & 0x7f, GET_METRIC (al->e[i].metric));
-      zlog_info ("    Forwarding address %s", inet_ntoa (al->e[i].fwd_addr));
-      zlog_info ("    External Route Tag %d", al->e[i].route_tag);
+      zlog_debug ("    Forwarding address %s", inet_ntoa (al->e[i].fwd_addr));
+      zlog_debug ("    External Route Tag %d", al->e[i].route_tag);
     }
 }
 
@@ -447,7 +447,7 @@
 {
   struct lsa_header *lsa;
 
-  zlog_info ("  # LSA Headers %d", length / OSPF_LSA_HEADER_SIZE);
+  zlog_debug ("  # LSA Headers %d", length / OSPF_LSA_HEADER_SIZE);
 
   /* LSA Headers. */
   while (length > 0)
@@ -471,13 +471,13 @@
   gp = stream_get_getp (s);
   dd = (struct ospf_db_desc *) STREAM_PNT (s);
 
-  zlog_info ("Database Description");
-  zlog_info ("  Interface MTU %d", ntohs (dd->mtu));
-  zlog_info ("  Options %d (%s)", dd->options,
+  zlog_debug ("Database Description");
+  zlog_debug ("  Interface MTU %d", ntohs (dd->mtu));
+  zlog_debug ("  Options %d (%s)", dd->options,
 	     ospf_options_dump (dd->options));
-  zlog_info ("  Flags %d (%s)", dd->flags,
+  zlog_debug ("  Flags %d (%s)", dd->flags,
 	     ospf_dd_flags_dump (dd->flags, dd_flags, sizeof dd_flags));
-  zlog_info ("  Sequence Number 0x%08lx", (u_long)ntohl (dd->dd_seqnum));
+  zlog_debug ("  Sequence Number 0x%08lx", (u_long)ntohl (dd->dd_seqnum));
 
   length -= OSPF_HEADER_SIZE + OSPF_DB_DESC_MIN_SIZE;
 
@@ -500,8 +500,8 @@
 
   length -= OSPF_HEADER_SIZE;
 
-  zlog_info ("Link State Request");
-  zlog_info ("  # Requests %d", length / 12);
+  zlog_debug ("Link State Request");
+  zlog_debug ("  # Requests %d", length / 12);
 
   for (; length > 0; length -= 12)
     {
@@ -509,9 +509,9 @@
       ls_id.s_addr = stream_get_ipv4 (s);
       adv_router.s_addr = stream_get_ipv4 (s);
 
-      zlog_info ("  LS type %d", ls_type);
-      zlog_info ("  Link State ID %s", inet_ntoa (ls_id));
-      zlog_info ("  Advertising Router %s",
+      zlog_debug ("  LS type %d", ls_type);
+      zlog_debug ("  Link State ID %s", inet_ntoa (ls_id));
+      zlog_debug ("  Advertising Router %s",
 		 inet_ntoa (adv_router));
     }
 
@@ -533,14 +533,14 @@
   count = stream_getl (s);
   length -= 4;
 
-  zlog_info ("Link State Update");
-  zlog_info ("  # LSAs %d", count);
+  zlog_debug ("Link State Update");
+  zlog_debug ("  # LSAs %d", count);
 
   while (length > 0 && count > 0)
     {
       if (length < OSPF_HEADER_SIZE || length % 4 != 0)
 	{
-          zlog_info ("  Remaining %d bytes; Incorrect length.", length);
+          zlog_debug ("  Remaining %d bytes; Incorrect length.", length);
 	  break;
 	}
 
@@ -593,7 +593,7 @@
   length -= OSPF_HEADER_SIZE;
   sp = stream_get_getp (s);
 
-  zlog_info ("Link State Acknowledgment");
+  zlog_debug ("Link State Acknowledgment");
   ospf_lsa_header_list_dump (s, length);
 
   stream_set_getp (s, sp);
@@ -604,17 +604,17 @@
 ospf_ip_header_dump (struct ip *iph)
 {
   /* IP Header dump. */
-  zlog_info ("ip_v %d", iph->ip_v);
-  zlog_info ("ip_hl %d", iph->ip_hl);
-  zlog_info ("ip_tos %d", iph->ip_tos);
-  zlog_info ("ip_len %d", iph->ip_len);
-  zlog_info ("ip_id %u", (u_int32_t) iph->ip_id);
-  zlog_info ("ip_off %u", (u_int32_t) iph->ip_off);
-  zlog_info ("ip_ttl %d", iph->ip_ttl);
-  zlog_info ("ip_p %d", iph->ip_p);
-  zlog_info ("ip_sum 0x%x", (u_int32_t) iph->ip_sum);
-  zlog_info ("ip_src %s",  inet_ntoa (iph->ip_src));
-  zlog_info ("ip_dst %s", inet_ntoa (iph->ip_dst));
+  zlog_debug ("ip_v %d", iph->ip_v);
+  zlog_debug ("ip_hl %d", iph->ip_hl);
+  zlog_debug ("ip_tos %d", iph->ip_tos);
+  zlog_debug ("ip_len %d", iph->ip_len);
+  zlog_debug ("ip_id %u", (u_int32_t) iph->ip_id);
+  zlog_debug ("ip_off %u", (u_int32_t) iph->ip_off);
+  zlog_debug ("ip_ttl %d", iph->ip_ttl);
+  zlog_debug ("ip_p %d", iph->ip_p);
+  zlog_debug ("ip_sum 0x%x", (u_int32_t) iph->ip_sum);
+  zlog_debug ("ip_src %s",  inet_ntoa (iph->ip_src));
+  zlog_debug ("ip_dst %s", inet_ntoa (iph->ip_dst));
 }
 
 void
@@ -622,15 +622,15 @@
 {
   char buf[9];
 
-  zlog_info ("Header");
-  zlog_info ("  Version %d", ospfh->version);
-  zlog_info ("  Type %d (%s)", ospfh->type,
+  zlog_debug ("Header");
+  zlog_debug ("  Version %d", ospfh->version);
+  zlog_debug ("  Type %d (%s)", ospfh->type,
 	     ospf_packet_type_str[ospfh->type]);
-  zlog_info ("  Packet Len %d", ntohs (ospfh->length));
-  zlog_info ("  Router ID %s", inet_ntoa (ospfh->router_id));
-  zlog_info ("  Area ID %s", inet_ntoa (ospfh->area_id));
-  zlog_info ("  Checksum 0x%x", ntohs (ospfh->checksum));
-  zlog_info ("  AuType %d", ntohs (ospfh->auth_type));
+  zlog_debug ("  Packet Len %d", ntohs (ospfh->length));
+  zlog_debug ("  Router ID %s", inet_ntoa (ospfh->router_id));
+  zlog_debug ("  Area ID %s", inet_ntoa (ospfh->area_id));
+  zlog_debug ("  Checksum 0x%x", ntohs (ospfh->checksum));
+  zlog_debug ("  AuType %d", ntohs (ospfh->auth_type));
 
   switch (ntohs (ospfh->auth_type))
     {
@@ -639,17 +639,17 @@
     case OSPF_AUTH_SIMPLE:
       memset (buf, 0, 9);
       strncpy (buf, (char *) ospfh->u.auth_data, 8);
-      zlog_info ("  Simple Password %s", buf);
+      zlog_debug ("  Simple Password %s", buf);
       break;
     case OSPF_AUTH_CRYPTOGRAPHIC:
-      zlog_info ("  Cryptographic Authentication");
-      zlog_info ("  Key ID %d", ospfh->u.crypt.key_id);
-      zlog_info ("  Auth Data Len %d", ospfh->u.crypt.auth_data_len);
-      zlog_info ("  Sequence number %ld",
+      zlog_debug ("  Cryptographic Authentication");
+      zlog_debug ("  Key ID %d", ospfh->u.crypt.key_id);
+      zlog_debug ("  Auth Data Len %d", ospfh->u.crypt.auth_data_len);
+      zlog_debug ("  Sequence number %ld",
 		 (u_long)ntohl (ospfh->u.crypt.crypt_seqnum));
       break;
     default:
-      zlog_info ("* This is not supported authentication type");
+      zlog_debug ("* This is not supported authentication type");
       break;
     }
     
@@ -867,7 +867,7 @@
 
 #ifdef DEBUG
   for (i = 0; i < 5; i++)
-    zlog_info ("flag[%d] = %d", i, ospf_debug_packet[i]);
+    zlog_debug ("flag[%d] = %d", i, ospf_debug_packet[i]);
 #endif /* DEBUG */
 
   return CMD_SUCCESS;
diff --git a/ospfd/ospf_flood.c b/ospfd/ospf_flood.c
index c1d2131..586c25f 100644
--- a/ospfd/ospf_flood.c
+++ b/ospfd/ospf_flood.c
@@ -119,7 +119,7 @@
   struct listnode *node;
   
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("LSA[Type%d:%s]: Process self-originated LSA seq 0x%x",
+    zlog_debug ("LSA[Type%d:%s]: Process self-originated LSA seq 0x%x",
 	       new->data->type, inet_ntoa (new->data->id), 
 	       ntohl(new->data->ls_seqnum));
 
@@ -246,7 +246,7 @@
      but will also be flooded as Type-5's into ABR capable links.  */
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("LSA[Flooding]: start, NBR %s (%s), cur(%p), New-LSA[%s]",
+    zlog_debug ("LSA[Flooding]: start, NBR %s (%s), cur(%p), New-LSA[%s]",
                inet_ntoa (nbr->router_id),
                LOOKUP (ospf_nsm_state_msg, nbr->state),
                current,
@@ -269,7 +269,7 @@
       &&  ntohl (current->data->ls_seqnum) == OSPF_INITIAL_SEQUENCE_NUMBER))
         {
           if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("LSA[Flooding]: Got a self-originated LSA, "
+	    zlog_debug ("LSA[Flooding]: Got a self-originated LSA, "
 		       "while local one is initial instance.");
           ; /* Accept this LSA for quick LSDB resynchronization. */
         }
@@ -277,7 +277,7 @@
 	               int2tv (OSPF_MIN_LS_ARRIVAL)) < 0)
         {
           if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("LSA[Flooding]: LSA is received recently.");
+	    zlog_debug ("LSA[Flooding]: LSA is received recently.");
           return -1;
         }
     }
@@ -358,7 +358,7 @@
   int retx_flag;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_flood_through_interface(): "
+    zlog_debug ("ospf_flood_through_interface(): "
 	       "considering int %s, INBR(%s), LSA[%s]",
 	       IF_NAME (oi), inbr ? inet_ntoa (inbr->router_id) : "NULL",
                dump_lsa_key (lsa));
@@ -381,7 +381,7 @@
 
       onbr = rn->info;
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_flood_through_interface(): considering nbr %s (%s)",
+	zlog_debug ("ospf_flood_through_interface(): considering nbr %s (%s)",
 		   inet_ntoa (onbr->router_id),
                    LOOKUP (ospf_nsm_state_msg, onbr->state));
 
@@ -400,7 +400,7 @@
       if (onbr->state < NSM_Full)
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_flood_through_interface(): nbr adj is not Full");
+	    zlog_debug ("ospf_flood_through_interface(): nbr adj is not Full");
 	  ls_req = ospf_ls_request_lookup (onbr, lsa);
 	  if (ls_req != NULL)
 	    {
@@ -434,7 +434,7 @@
           if (! CHECK_FLAG (onbr->options, OSPF_OPTION_O))
             {
               if (IS_DEBUG_OSPF (lsa, LSA_FLOODING))
-                zlog_info ("Skip this neighbor: Not Opaque-capable.");
+                zlog_debug ("Skip this neighbor: Not Opaque-capable.");
               continue;
             }
 
@@ -444,7 +444,7 @@
             {
               /* Small attempt to reduce unnecessary retransmission. */
               if (IS_DEBUG_OSPF (lsa, LSA_FLOODING))
-                zlog_info ("Skip this neighbor: Initial flushing done.");
+                zlog_debug ("Skip this neighbor: Initial flushing done.");
               continue;
             }
         }
@@ -466,7 +466,7 @@
           if (IPV4_ADDR_SAME (&inbr->router_id, &onbr->router_id))
             {
               if (IS_DEBUG_OSPF (lsa, LSA_FLOODING))
-                zlog_info ("Skip this neighbor: inbr == onbr");
+                zlog_debug ("Skip this neighbor: inbr == onbr");
               continue;
             }
         }
@@ -479,7 +479,7 @@
           if (IPV4_ADDR_SAME (&lsa->data->adv_router, &onbr->router_id))
             {
               if (IS_DEBUG_OSPF (lsa, LSA_FLOODING))
-                zlog_info ("Skip this neighbor: lsah->adv_router == onbr");
+                zlog_debug ("Skip this neighbor: lsah->adv_router == onbr");
               continue;
             }
         }
@@ -512,7 +512,7 @@
       if (NBR_IS_DR (inbr) || NBR_IS_BDR (inbr))
 	{
 	  if (IS_DEBUG_OSPF_NSSA)
-	    zlog_info ("ospf_flood_through_interface(): "
+	    zlog_debug ("ospf_flood_through_interface(): "
 		       "DR/BDR NOT SEND to int %s", IF_NAME (oi));
 	  return 1;
 	}
@@ -526,7 +526,7 @@
       if (oi->state == ISM_Backup)
 	{
 	  if (IS_DEBUG_OSPF_NSSA)
-	    zlog_info ("ospf_flood_through_interface(): "
+	    zlog_debug ("ospf_flood_through_interface(): "
 		       "ISM_Backup NOT SEND to int %s", IF_NAME (oi));
 	  return 1;
 	}
@@ -540,7 +540,7 @@
      value of MaxAge). */
   /* XXX HASSO: Is this IS_DEBUG_OSPF_NSSA really correct? */
   if (IS_DEBUG_OSPF_NSSA)
-    zlog_info ("ospf_flood_through_interface(): "
+    zlog_debug ("ospf_flood_through_interface(): "
 	       "DR/BDR sending upd to int %s", IF_NAME (oi));
 
   /*  RFC2328  Section 13.3
@@ -592,7 +592,7 @@
            * for the link on which the LSA has received.
            */
           if (IS_DEBUG_OSPF (lsa, LSA_FLOODING))
-            zlog_info ("Type-9 Opaque-LSA: lsa->oi(%p) != oi(%p)", lsa->oi, oi);
+            zlog_debug ("Type-9 Opaque-LSA: lsa->oi(%p) != oi(%p)", lsa->oi, oi);
           continue;
         }
 #endif /* HAVE_OPAQUE_LSA */
@@ -626,7 +626,7 @@
 
   if (CHECK_FLAG (lsa->flags, OSPF_LSA_LOCAL_XLT)) /* Translated from 7  */
     if (IS_DEBUG_OSPF_NSSA)
-      zlog_info ("Flood/AS: NSSA TRANSLATED LSA");
+      zlog_debug ("Flood/AS: NSSA TRANSLATED LSA");
 
   for (node = listhead (ospf->areas); node; nextnode (node))
     {
@@ -724,7 +724,7 @@
       lsa_ack_flag = ospf_flood_through_area (inbr->oi->area, inbr, lsa);
 
       if (IS_DEBUG_OSPF_NSSA)
-	zlog_info ("ospf_flood_through: LOCAL NSSA FLOOD of Type-7.");
+	zlog_debug ("ospf_flood_through: LOCAL NSSA FLOOD of Type-7.");
       break;
     default:
       break;
@@ -755,7 +755,7 @@
       /* Any P-bit was installed with the Type-7. */
 
       if (IS_DEBUG_OSPF_NSSA)
-	zlog_info ("ospf_flood_through: LOCAL NSSA FLOOD of Type-7.");
+	zlog_debug ("ospf_flood_through: LOCAL NSSA FLOOD of Type-7.");
       /* Fallthrough */
     default:
       lsa_ack_flag = ospf_flood_through_area (lsa->area, inbr, lsa);
@@ -779,7 +779,7 @@
    * the common function "ospf_lsdb_add()" -- endo.
    */
   if (IS_DEBUG_OSPF (lsa, LSA_FLOODING))
-      zlog_info ("RqstL(%lu)++, NBR(%s), LSA[%s]",
+      zlog_debug ("RqstL(%lu)++, NBR(%s), LSA[%s]",
                   ospf_ls_request_count (nbr),
                   inet_ntoa (nbr->router_id), dump_lsa_key (lsa));
 
@@ -809,7 +809,7 @@
     }
 
   if (IS_DEBUG_OSPF (lsa, LSA_FLOODING))	/* -- endo. */
-      zlog_info ("RqstL(%lu)--, NBR(%s), LSA[%s]",
+      zlog_debug ("RqstL(%lu)--, NBR(%s), LSA[%s]",
                   ospf_ls_request_count (nbr),
                   inet_ntoa (nbr->router_id), dump_lsa_key (lsa));
 
@@ -887,7 +887,7 @@
        * the common function "ospf_lsdb_add()" -- endo.
        */
       if (IS_DEBUG_OSPF (lsa, LSA_FLOODING))
-	  zlog_info ("RXmtL(%lu)++, NBR(%s), LSA[%s]",
+	  zlog_debug ("RXmtL(%lu)++, NBR(%s), LSA[%s]",
                      ospf_ls_retransmit_count (nbr),
 		     inet_ntoa (nbr->router_id), dump_lsa_key (lsa));
       ospf_lsdb_add (&nbr->ls_rxmt, lsa);
@@ -902,7 +902,7 @@
     {
       lsa->retransmit_counter--;  
       if (IS_DEBUG_OSPF (lsa, LSA_FLOODING))		/* -- endo. */
-	  zlog_info ("RXmtL(%lu)--, NBR(%s), LSA[%s]",
+	  zlog_debug ("RXmtL(%lu)--, NBR(%s), LSA[%s]",
                      ospf_ls_retransmit_count (nbr),
 		     inet_ntoa (nbr->router_id), dump_lsa_key (lsa));
       ospf_lsdb_delete (&nbr->ls_rxmt, lsa);
diff --git a/ospfd/ospf_ia.c b/ospfd/ospf_ia.c
index 8e82582..5bdcfba 100644
--- a/ospfd/ospf_ia.c
+++ b/ospfd/ospf_ia.c
@@ -79,7 +79,7 @@
   struct ospf_route *or;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_ia_network_route(): processing summary route to %s/%d", 
+    zlog_debug ("ospf_ia_network_route(): processing summary route to %s/%d", 
 	       inet_ntoa (p->prefix), p->prefixlen);
 
   /* Find a route to the same dest */
@@ -92,7 +92,7 @@
       if ((or = rn1->info))
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_ia_network_route(): "
+	    zlog_debug ("ospf_ia_network_route(): "
 		       "Found a route to the same network");
 	  /* Check the existing route. */
 	  if ((res = ospf_route_cmp (ospf, new_or, or)) < 0)
@@ -121,7 +121,7 @@
   else
     { /* no route */
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_ia_network_route(): add new route to %s/%d",
+	zlog_debug ("ospf_ia_network_route(): add new route to %s/%d",
 		   inet_ntoa (p->prefix), p->prefixlen);
       ospf_route_add (rt, p, new_or, abr_or);
     }
@@ -137,7 +137,7 @@
   int ret;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_ia_router_route(): considering %s/%d", 
+    zlog_debug ("ospf_ia_router_route(): considering %s/%d", 
 	       inet_ntoa (p->prefix), p->prefixlen);
   /* Find a route to the same dest */
   rn = route_node_get (rtrs, (struct prefix *) p);
@@ -158,7 +158,7 @@
   if (or)
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_ia_router_route(): "
+	zlog_debug ("ospf_ia_router_route(): "
 		   "a route to the same ABR through the same area exists");
       /* New route is better */
       if ((ret = ospf_route_cmp (ospf, new_or, or)) < 0)
@@ -171,7 +171,7 @@
       else if (ret == 0)
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_ia_router_route(): merging the new route");
+	    zlog_debug ("ospf_ia_router_route(): merging the new route");
 
 	  ospf_route_copy_nexthops (or, abr_or->paths);
 	  ospf_route_free (new_or);
@@ -181,7 +181,7 @@
       else
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_ia_router_route(): skipping the new route");
+	    zlog_debug ("ospf_ia_router_route(): skipping the new route");
 	  ospf_route_free (new_or);
 	  return;
 	}
@@ -190,7 +190,7 @@
   ospf_route_copy_nexthops (new_or, abr_or->paths);
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_ia_router_route(): adding the new route"); 
+    zlog_debug ("ospf_ia_router_route(): adding the new route"); 
 
   listnode_add (rn->info, new_or);
 }
@@ -213,7 +213,7 @@
   sl = (struct summary_lsa *) lsa->data;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("process_summary_lsa(): LS ID: %s", inet_ntoa (sl->header.id));
+    zlog_debug ("process_summary_lsa(): LS ID: %s", inet_ntoa (sl->header.id));
 
   metric = GET_METRIC (sl->metric);
    
@@ -328,7 +328,7 @@
   if (abr_or == NULL)
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_update_network_route(): can't find a route to the ABR");
+	zlog_debug ("ospf_update_network_route(): can't find a route to the ABR");
       return;
     }
 
@@ -342,7 +342,7 @@
         return; /* Standard ABR can update only already installed
                    backbone paths                                       */
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_update_network_route(): "
+	zlog_debug ("ospf_update_network_route(): "
 		   "Allowing Shortcut ABR to add new route");
       new_or = ospf_route_new ();
       new_or->type = OSPF_DESTINATION_NETWORK;
@@ -371,7 +371,7 @@
       or->path_type != OSPF_PATH_INTER_AREA)
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_update_network_route(): ERR: path type is wrong");
+	zlog_debug ("ospf_update_network_route(): ERR: path type is wrong");
       return;
     }
 
@@ -381,7 +381,7 @@
 	  !OSPF_IS_AREA_ID_BACKBONE (or->u.std.area_id))
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_update_network_route(): Shortcut: "
+	    zlog_debug ("ospf_update_network_route(): Shortcut: "
 		       "this intra-area path is not backbone");
 	  return;
 	}
@@ -391,7 +391,7 @@
       if (!OSPF_IS_AREA_ID_BACKBONE (or->u.std.area_id))
 	{
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_update_network_route(): "
+	    zlog_debug ("ospf_update_network_route(): "
 		       "route is not BB-associated");
 	  return; /* We can update only BB routes */
 	}
@@ -400,14 +400,14 @@
   if (or->cost < cost)
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_update_network_route(): new route is worse");
+	zlog_debug ("ospf_update_network_route(): new route is worse");
       return;
     }
 
   if (or->cost == cost)
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_update_network_route(): "
+	zlog_debug ("ospf_update_network_route(): "
 		   "new route is same distance, adding nexthops");
       ospf_route_copy_nexthops (or, abr_or->paths);
     }
@@ -415,7 +415,7 @@
   if (or->cost > cost)
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_update_network_route(): "
+	zlog_debug ("ospf_update_network_route(): "
 		   "new route is better, overriding nexthops");
       ospf_route_subst_nexthops (or, abr_or->paths);
       or->cost = cost;
@@ -455,7 +455,7 @@
   if (abr_or == NULL)
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_update_router_route(): can't find a route to the ABR");
+	zlog_debug ("ospf_update_router_route(): can't find a route to the ABR");
       return;
     }
 
@@ -508,7 +508,7 @@
   if (!(or->u.std.flags & ROUTER_LSA_EXTERNAL))
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_upd_router_route(): the remote router is not an ASBR");
+	zlog_debug ("ospf_upd_router_route(): the remote router is not an ASBR");
       return;
     }
 
@@ -548,28 +548,28 @@
   sl = (struct summary_lsa *) lsa->data;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("process_transit_summaries(): LS ID: %s",
+    zlog_debug ("process_transit_summaries(): LS ID: %s",
 	       inet_ntoa (lsa->data->id));
   metric = GET_METRIC (sl->metric);
    
   if (metric == OSPF_LS_INFINITY)
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("process_transit_summaries(): metric is infinity, skip");
+	zlog_debug ("process_transit_summaries(): metric is infinity, skip");
       return 0;
     }
 
   if (IS_LSA_MAXAGE (lsa))
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("process_transit_summaries(): This LSA is too old");
+	zlog_debug ("process_transit_summaries(): This LSA is too old");
       return 0;
     }
 
   if (ospf_lsa_is_self_originated (area->ospf, lsa))
     { 
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("process_transit_summaries(): This LSA is mine, skip");
+	zlog_debug ("process_transit_summaries(): This LSA is mine, skip");
       return 0;
     }
 
@@ -612,7 +612,7 @@
   struct ospf_area * area;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_ia_routing():start");
+    zlog_debug ("ospf_ia_routing():start");
 
   if (IS_OSPF_ABR (ospf))
     {
@@ -623,7 +623,7 @@
         {
         case OSPF_ABR_STAND:
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_ia_routing():Standard ABR");
+	    zlog_debug ("ospf_ia_routing():Standard ABR");
 
           if ((area = ospf->backbone))
             {
@@ -631,8 +631,8 @@
 
 	      if (IS_DEBUG_OSPF_EVENT)
 		{
-		  zlog_info ("ospf_ia_routing():backbone area found");
-		  zlog_info ("ospf_ia_routing():examining summaries");
+		  zlog_debug ("ospf_ia_routing():backbone area found");
+		  zlog_debug ("ospf_ia_routing():examining summaries");
 		}
 
               OSPF_EXAMINE_SUMMARIES_ALL (area, rt, rtrs);
@@ -645,12 +645,12 @@
             }
           else
 	    if (IS_DEBUG_OSPF_EVENT)
-	      zlog_info ("ospf_ia_routing():backbone area NOT found");
+	      zlog_debug ("ospf_ia_routing():backbone area NOT found");
           break;
         case OSPF_ABR_IBM:
         case OSPF_ABR_CISCO:
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_ia_routing():Alternative Cisco/IBM ABR");
+	    zlog_debug ("ospf_ia_routing():Alternative Cisco/IBM ABR");
           area = ospf->backbone; /* Find the BB */
 
           /* If we have an active BB connection */
@@ -658,8 +658,8 @@
             {
 	      if (IS_DEBUG_OSPF_EVENT)
 		{
-		  zlog_info ("ospf_ia_routing(): backbone area found");
-		  zlog_info ("ospf_ia_routing(): examining BB summaries");
+		  zlog_debug ("ospf_ia_routing(): backbone area found");
+		  zlog_debug ("ospf_ia_routing(): examining BB summaries");
 		}
 
               OSPF_EXAMINE_SUMMARIES_ALL (area, rt, rtrs);
@@ -673,7 +673,7 @@
           else
             { /* No active BB connection--consider all areas */
 	      if (IS_DEBUG_OSPF_EVENT)
-		zlog_info ("ospf_ia_routing(): "
+		zlog_debug ("ospf_ia_routing(): "
 			   "Active BB connection not found");
 	      for (node = listhead (ospf->areas); node; nextnode (node))
                 if ((area = getdata (node)) != NULL)
@@ -682,7 +682,7 @@
           break;
         case OSPF_ABR_SHORTCUT:
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_ia_routing():Alternative Shortcut");
+	    zlog_debug ("ospf_ia_routing():Alternative Shortcut");
           area = ospf->backbone; /* Find the BB */
 
           /* If we have an active BB connection */
@@ -690,8 +690,8 @@
             {
 	      if (IS_DEBUG_OSPF_EVENT)
 		{
-		  zlog_info ("ospf_ia_routing(): backbone area found");
-		  zlog_info ("ospf_ia_routing(): examining BB summaries");
+		  zlog_debug ("ospf_ia_routing(): backbone area found");
+		  zlog_debug ("ospf_ia_routing(): examining BB summaries");
 		}
               OSPF_EXAMINE_SUMMARIES_ALL (area, rt, rtrs);
             }
@@ -715,7 +715,7 @@
       struct listnode *node;
 
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_ia_routing():not ABR, considering all areas");
+	zlog_debug ("ospf_ia_routing():not ABR, considering all areas");
 
       for (node = listhead (ospf->areas); node; nextnode (node))
         if ((area = getdata (node)) != NULL)
diff --git a/ospfd/ospf_interface.c b/ospfd/ospf_interface.c
index e74c375..5a8f453 100644
--- a/ospfd/ospf_interface.c
+++ b/ospfd/ospf_interface.c
@@ -800,17 +800,17 @@
   struct prefix_ipv4 *p;
   
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_vl_new(): Start");
+    zlog_debug ("ospf_vl_new(): Start");
   if (vlink_count == OSPF_VL_MAX_COUNT)
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_vl_new(): Alarm: "
+	zlog_debug ("ospf_vl_new(): Alarm: "
 		   "cannot create more than OSPF_MAX_VL_COUNT virtual links");
       return NULL;
     }
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_vl_new(): creating pseudo zebra interface");
+    zlog_debug ("ospf_vl_new(): creating pseudo zebra interface");
 
   snprintf (ifname, INTERFACE_NAMSIZ + 1, "VLINK%d", vlink_count);
   vi = if_create (ifname, INTERFACE_NAMSIZ);
@@ -829,7 +829,7 @@
   if (voi == NULL)
     {
       if (IS_DEBUG_OSPF_EVENT)
-	zlog_info ("ospf_vl_new(): Alarm: OSPF int structure is not created");
+	zlog_debug ("ospf_vl_new(): Alarm: OSPF int structure is not created");
       return NULL;
     }
   voi->connected = co;
@@ -839,23 +839,23 @@
 
   vlink_count++;
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_vl_new(): Created name: %s", ifname);
+    zlog_debug ("ospf_vl_new(): Created name: %s", ifname);
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_vl_new(): set if->name to %s", vi->name);
+    zlog_debug ("ospf_vl_new(): set if->name to %s", vi->name);
 
   area_id.s_addr = 0;
   area = ospf_area_get (ospf, area_id, OSPF_AREA_ID_FORMAT_ADDRESS);
   voi->area = area;
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_vl_new(): set associated area to the backbone");
+    zlog_debug ("ospf_vl_new(): set associated area to the backbone");
 
   ospf_area_add_if (voi->area, voi);
 
   ospf_if_stream_set (voi);
 
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_vl_new(): Stop");
+    zlog_debug ("ospf_vl_new(): Stop");
   return voi;
 }
 
@@ -984,7 +984,7 @@
             {
               case LSA_LINK_TYPE_VIRTUALLINK:
                 if (IS_DEBUG_OSPF_EVENT)
-                  zlog_info ("found back link through VL");
+                  zlog_debug ("found back link through VL");
               case LSA_LINK_TYPE_TRANSIT:
               case LSA_LINK_TYPE_POINTOPOINT:
                 if (!IPV4_ADDR_SAME (&vl_data->peer_addr,
@@ -992,7 +992,7 @@
                   changed = 1;
                 vl_data->peer_addr = rl->link[i].link_data;
               if (IS_DEBUG_OSPF_EVENT)
-                zlog_info ("ospf_vl_set_params: %s peer address is %s\n",
+                zlog_debug ("ospf_vl_set_params: %s peer address is %s\n",
                                vl_data->vl_oi->ifp->name, 
                                inet_ntoa(vl_data->peer_addr));
               return changed;
@@ -1001,7 +1001,7 @@
     }
     
   if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_vl_set_params: %s peer address is %s\n",
+    zlog_debug ("ospf_vl_set_params: %s peer address is %s\n",
                vl_data->vl_oi->ifp->name,
                inet_ntoa(vl_data->peer_addr));
                
@@ -1020,9 +1020,9 @@
 
   if (IS_DEBUG_OSPF_EVENT)
     {
-      zlog_info ("ospf_vl_up_check(): Start");
-      zlog_info ("ospf_vl_up_check(): Router ID is %s", inet_ntoa (rid));
-      zlog_info ("ospf_vl_up_check(): Area is %s", inet_ntoa (area->area_id));
+      zlog_debug ("ospf_vl_up_check(): Start");
+      zlog_debug ("ospf_vl_up_check(): Router ID is %s", inet_ntoa (rid));
+      zlog_debug ("ospf_vl_up_check(): Area is %s", inet_ntoa (area->area_id));
     }
 
   for (node = listhead (ospf->vlinks); node; nextnode (node))
@@ -1032,9 +1032,9 @@
   
       if (IS_DEBUG_OSPF_EVENT)
 	{
-	  zlog_info ("ospf_vl_up_check(): considering VL, name: %s", 
+	  zlog_debug ("ospf_vl_up_check(): considering VL, name: %s", 
 		     vl_data->vl_oi->ifp->name);
-	  zlog_info ("ospf_vl_up_check(): VL area: %s, peer ID: %s", 
+	  zlog_debug ("ospf_vl_up_check(): VL area: %s, peer ID: %s", 
 		     inet_ntoa (vl_data->vl_area_id),
 		     inet_ntoa (vl_data->vl_peer));
 	}
@@ -1046,12 +1046,12 @@
           SET_FLAG (vl_data->flags, OSPF_VL_FLAG_APPROVED);
 
 	  if (IS_DEBUG_OSPF_EVENT)
-	    zlog_info ("ospf_vl_up_check(): this VL matched");
+	    zlog_debug ("ospf_vl_up_check(): this VL matched");
 
           if (oi->state == ISM_Down)
             {
 	      if (IS_DEBUG_OSPF_EVENT)
-		zlog_info ("ospf_vl_up_check(): VL is down, waking it up");
+		zlog_debug ("ospf_vl_up_check(): VL is down, waking it up");
               SET_FLAG (oi->ifp->flags, IFF_UP);
               OSPF_ISM_EVENT_EXECUTE(oi,ISM_InterfaceUp);
             }
@@ -1059,12 +1059,12 @@
          if (ospf_vl_set_params (vl_data, v))
            {
              if (IS_DEBUG_OSPF (ism, ISM_EVENTS))
-               zlog_info ("ospf_vl_up_check: VL cost change,"
+               zlog_debug ("ospf_vl_up_check: VL cost change,"
                           " scheduling router lsa refresh");
              if(ospf->backbone)
                ospf_router_lsa_timer_add (ospf->backbone);
              else if (IS_DEBUG_OSPF (ism, ISM_EVENTS))
-               zlog_info ("ospf_vl_up_check: VL cost change, no backbone!");
+               zlog_debug ("ospf_vl_up_check: VL cost change, no backbone!");
            }
         }
     }
@@ -1098,9 +1098,9 @@
 {
   if (IS_DEBUG_OSPF_EVENT)
     {
-      zlog_info ("counting fully adjacent virtual neighbors in area %s",
+      zlog_debug ("counting fully adjacent virtual neighbors in area %s",
 		 inet_ntoa (area->area_id));
-      zlog_info ("there are %d of them", area->full_vls);
+      zlog_debug ("there are %d of them", area->full_vls);
     }
 
   return area->full_vls;
diff --git a/ospfd/ospf_ism.c b/ospfd/ospf_ism.c
index 84a5dc5..17ec9b5 100644
--- a/ospfd/ospf_ism.c
+++ b/ospfd/ospf_ism.c
@@ -452,7 +452,7 @@
 ism_ignore (struct ospf_interface *oi)
 {
   if (IS_DEBUG_OSPF (ism, ISM_EVENTS))
-    zlog (NULL, LOG_INFO, "ISM[%s]: ism_ignore called", IF_NAME (oi));
+    zlog (NULL, LOG_DEBUG, "ISM[%s]: ism_ignore called", IF_NAME (oi));
 
   return 0;
 }
@@ -573,7 +573,7 @@
 
   /* Logging change of state. */
   if (IS_DEBUG_OSPF (ism, ISM_STATUS))
-    zlog (NULL, LOG_INFO, "ISM[%s]: State change %s -> %s", IF_NAME (oi),
+    zlog (NULL, LOG_DEBUG, "ISM[%s]: State change %s -> %s", IF_NAME (oi),
 	  LOOKUP (ospf_ism_state_msg, oi->state),
 	  LOOKUP (ospf_ism_state_msg, state));
 
@@ -642,7 +642,7 @@
     next_state = ISM [oi->state][event].next_state;
 
   if (IS_DEBUG_OSPF (ism, ISM_EVENTS))
-    zlog (NULL, LOG_INFO, "ISM[%s]: %s (%s)", IF_NAME (oi),
+    zlog (NULL, LOG_DEBUG, "ISM[%s]: %s (%s)", IF_NAME (oi),
 	  LOOKUP (ospf_ism_state_msg, oi->state),
 	  ospf_ism_event_str[event]);
 
