diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog
index 7048b5e..26f1fa0 100644
--- a/ospfd/ChangeLog
+++ b/ospfd/ChangeLog
@@ -1,3 +1,7 @@
+2004-06-10 Hasso Tepper <hasso@estpak.ee>
+
+	* *: Removed ifdefs HAVE_NSSA.
+
 2004-06-06 Paul Jakma <paul@dishone.st>
 
 	* ospf_dump.c,ospf_lsa.c: Fix typos of merge of previous.
diff --git a/ospfd/ospf_abr.c b/ospfd/ospf_abr.c
index 359e3ba..21bd673 100644
--- a/ospfd/ospf_abr.c
+++ b/ospfd/ospf_abr.c
@@ -347,7 +347,6 @@
   return ospf->backbone->full_nbrs;
 }
 
-#ifdef HAVE_NSSA
 /* Determine whether this router is elected translator or not for area */
 int
 ospf_abr_nssa_am_elected (struct ospf_area *area)
@@ -472,7 +471,6 @@
          }
     }
 }
-#endif /* HAVE_NSSA */
 
 /* Check area border router status. */
 void
@@ -604,7 +602,6 @@
   memcpy(header->metric, mp, 3);
 }
 
-#ifdef HAVE_NSSA
 int
 ospf_abr_check_nssa_range (struct prefix_ipv4 *p, u_int32_t cost,
 				   struct ospf_area *area)
@@ -710,7 +707,6 @@
   /* The Type-7 is created from the aggregated prefix and forwarded
      for lsa installation and flooding... to be added... */
 }
-#endif /* HAVE_NSSA */
 
 void
 ospf_abr_announce_network_to_area (struct prefix_ipv4 *p, u_int32_t cost,
@@ -945,7 +941,6 @@
   return 1;
 }
 
-#ifdef HAVE_NSSA
 void
 ospf_abr_process_nssa_translates (struct ospf *ospf)
 {
@@ -985,7 +980,6 @@
     zlog_info ("ospf_abr_process_nssa_translates(): Stop");
 
 }
-#endif /* HAVE_NSSA */
 
 void
 ospf_abr_process_network_rt (struct ospf *ospf,
@@ -1303,7 +1297,6 @@
     zlog_info ("ospf_abr_process_router_rt(): Stop");
 }
 
-#ifdef HAVE_NSSA
 void
 ospf_abr_unapprove_translates (struct ospf *ospf) /* For NSSA Translations */
 {
@@ -1329,7 +1322,6 @@
   if (IS_DEBUG_OSPF_NSSA)
     zlog_info ("ospf_abr_unapprove_translates(): Stop");
 }
-#endif /* HAVE_NSSA */
 
 void
 ospf_abr_unapprove_summaries (struct ospf *ospf)
@@ -1484,7 +1476,6 @@
     zlog_info ("ospf_abr_announce_aggregates(): Stop");
 }
 
-#ifdef HAVE_NSSA
 void
 ospf_abr_send_nssa_aggregates (struct ospf *ospf) /* temporarily turned off */
 {
@@ -1592,7 +1583,6 @@
         }
     }
 }
-#endif /* HAVE_NSSA */
 
 void
 ospf_abr_announce_stub_defaults (struct ospf *ospf)
@@ -1619,9 +1609,7 @@
                  inet_ntoa (area->area_id));
 
      if ( (area->external_routing != OSPF_AREA_STUB)
-#ifdef HAVE_NSSA
           && (area->external_routing != OSPF_AREA_NSSA)
-#endif /* HAVE_NSSA */
         )
        continue;
 
@@ -1639,7 +1627,6 @@
     zlog_info ("ospf_abr_announce_stub_defaults(): Stop");
 }
 
-#ifdef HAVE_NSSA
 int
 ospf_abr_remove_unapproved_translates_apply (struct ospf *ospf,
 					     struct ospf_lsa *lsa)
@@ -1676,7 +1663,6 @@
   if (IS_DEBUG_OSPF_NSSA)
     zlog_info ("ospf_abr_remove_unapproved_translates(): Stop");
 }
-#endif /* HAVE_NSSA */
 
 void
 ospf_abr_remove_unapproved_summaries (struct ospf *ospf)
@@ -1734,7 +1720,6 @@
 	    }
 }
 
-#ifdef HAVE_NSSA
 /* This is the function taking care about ABR NSSA, i.e.  NSSA
    Translator, -LSA aggregation and flooding. For all NSSAs
 
@@ -1821,7 +1806,6 @@
   if (IS_DEBUG_OSPF_NSSA)
     zlog_info ("ospf_abr_nssa_task(): Stop");
 }
-#endif /* HAVE_NSSA */
 
 /* This is the function taking care about ABR stuff, i.e.
    summary-LSA origination and flooding. */
@@ -1887,14 +1871,10 @@
     zlog_info ("Running ABR task on timer");
 
   ospf_check_abr_status (ospf);
-#ifdef HAVE_NSSA
   ospf_abr_nssa_check_status (ospf);
-#endif /* HAVE_NSSA */
 
   ospf_abr_task (ospf);
-#ifdef HAVE_NSSA  
   ospf_abr_nssa_task (ospf); /* if nssa-abr, then scan Type-7 LSDB */
-#endif /* HAVE_NSSA */
 
   return 0;
 }
diff --git a/ospfd/ospf_apiserver.c b/ospfd/ospf_apiserver.c
index 545060c..6ee1c00 100644
--- a/ospfd/ospf_apiserver.c
+++ b/ospfd/ospf_apiserver.c
@@ -1495,9 +1495,7 @@
   if (area)
     {
       options = LSA_OPTIONS_GET (area);
-#ifdef HAVE_NSSA
       options |= LSA_OPTIONS_NSSA_GET (area);
-#endif /* HAVE_NSSA */
     }
 
   options |= OSPF_OPTION_O;	/* Don't forget to set option bit */
diff --git a/ospfd/ospf_ase.c b/ospfd/ospf_ase.c
index db43e10..c7b343c 100644
--- a/ospfd/ospf_ase.c
+++ b/ospfd/ospf_ase.c
@@ -293,7 +293,6 @@
   assert (lsa);
   al = (struct as_external_lsa *) lsa->data;
 
-#ifdef HAVE_NSSA
   if (lsa->data->type == OSPF_AS_NSSA_LSA)
     if (IS_DEBUG_OSPF_NSSA)
       zlog_info ("ospf_ase_calc(): Processing Type-7");
@@ -305,7 +304,6 @@
 	zlog_info ("ospf_ase_calc(): Rejecting Local Xlt'd");
       return 0;
     }
-#endif /* HAVE_NSSA */
 
   zlog_info ("Route[External]: Calculate AS-external-LSA to %s/%d",
 	     inet_ntoa (al->header.id), ip_masklen (al->mask));
@@ -613,10 +611,8 @@
   struct ospf *ospf;
   struct ospf_lsa *lsa;
   struct route_node *rn;
-#ifdef HAVE_NSSA
   listnode node;
   struct ospf_area *area;
-#endif /* HAVE_NSSA */
 
   ospf = THREAD_ARG (t);
   ospf->t_ase_calc = NULL;
@@ -629,7 +625,6 @@
       LSDB_LOOP (EXTERNAL_LSDB (ospf), rn, lsa)
 	ospf_ase_calculate_route (ospf, lsa);
 
-#ifdef HAVE_NSSA
       /*  This version simple adds to the table all NSSA areas  */
       if (ospf->anyNSSA)
 	for (node = listhead (ospf->areas); node; nextnode (node))
@@ -647,8 +642,6 @@
       LSDB_LOOP (NSSA_LSDB (ospf),rn,lsa)
       		ospf_ase_calculate_route(ospf,lsa);
 
-#endif /* HAVE_NSSA */
-
       /* Compare old and new external routing table and install the
 	 difference info zebra/kernel */
       ospf_ase_compare_tables (ospf->new_external_route,
diff --git a/ospfd/ospf_dump.c b/ospfd/ospf_dump.c
index 9ea6755..c94fda1 100644
--- a/ospfd/ospf_dump.c
+++ b/ospfd/ospf_dump.c
@@ -562,11 +562,9 @@
 	case OSPF_AS_EXTERNAL_LSA:
 	  ospf_as_external_lsa_dump (s, length);
 	  break;
-#ifdef HAVE_NSSA
 	case OSPF_AS_NSSA_LSA:
 	  ospf_as_external_lsa_dump (s, length);
 	  break;
-#endif /* HAVE_NSSA */
 #ifdef HAVE_OPAQUE_LSA
 	case OSPF_OPAQUE_LINK_LSA:
 	case OSPF_OPAQUE_AREA_LSA:
@@ -1624,9 +1622,7 @@
   install_element (ENABLE_NODE, &debug_ospf_zebra_sub_cmd);
   install_element (ENABLE_NODE, &debug_ospf_zebra_cmd);
   install_element (ENABLE_NODE, &debug_ospf_event_cmd);
-#ifdef HAVE_NSSA
   install_element (ENABLE_NODE, &debug_ospf_nssa_cmd);
-#endif /* HAVE_NSSA */
   install_element (ENABLE_NODE, &no_debug_ospf_packet_send_recv_detail_cmd);
   install_element (ENABLE_NODE, &no_debug_ospf_packet_send_recv_cmd);
   install_element (ENABLE_NODE, &no_debug_ospf_packet_all_cmd);
@@ -1639,9 +1635,7 @@
   install_element (ENABLE_NODE, &no_debug_ospf_zebra_sub_cmd);
   install_element (ENABLE_NODE, &no_debug_ospf_zebra_cmd);
   install_element (ENABLE_NODE, &no_debug_ospf_event_cmd);
-#ifdef HAVE_NSSA
   install_element (ENABLE_NODE, &no_debug_ospf_nssa_cmd);
-#endif /* HAVE_NSSA */
 
   install_element (CONFIG_NODE, &debug_ospf_packet_send_recv_detail_cmd);
   install_element (CONFIG_NODE, &debug_ospf_packet_send_recv_cmd);
@@ -1655,9 +1649,7 @@
   install_element (CONFIG_NODE, &debug_ospf_zebra_sub_cmd);
   install_element (CONFIG_NODE, &debug_ospf_zebra_cmd);
   install_element (CONFIG_NODE, &debug_ospf_event_cmd);
-#ifdef HAVE_NSSA
   install_element (CONFIG_NODE, &debug_ospf_nssa_cmd);
-#endif /* HAVE_NSSA */
   install_element (CONFIG_NODE, &no_debug_ospf_packet_send_recv_detail_cmd);
   install_element (CONFIG_NODE, &no_debug_ospf_packet_send_recv_cmd);
   install_element (CONFIG_NODE, &no_debug_ospf_packet_all_cmd);
@@ -1670,7 +1662,5 @@
   install_element (CONFIG_NODE, &no_debug_ospf_zebra_sub_cmd);
   install_element (CONFIG_NODE, &no_debug_ospf_zebra_cmd);
   install_element (CONFIG_NODE, &no_debug_ospf_event_cmd);
-#ifdef HAVE_NSSA
   install_element (CONFIG_NODE, &no_debug_ospf_nssa_cmd);
-#endif /* HAVE_NSSA */
 }
diff --git a/ospfd/ospf_flood.c b/ospfd/ospf_flood.c
index d077a7d..b706279 100644
--- a/ospfd/ospf_flood.c
+++ b/ospfd/ospf_flood.c
@@ -184,7 +184,6 @@
       ospf_schedule_abr_task (ospf);
       break;
     case OSPF_AS_EXTERNAL_LSA :
-#ifdef HAVE_NSSA
     case OSPF_AS_NSSA_LSA:
        if ( (new->data->type == OSPF_AS_EXTERNAL_LSA)
              && CHECK_FLAG (new->flags, OSPF_LSA_LOCAL_XLT))
@@ -192,7 +191,6 @@
            ospf_translated_nssa_refresh (ospf, NULL, new);
            return;
          }
-#endif /* HAVE_NSSA */
       ei = ospf_external_info_check (new);
       if (ei)
         ospf_external_lsa_refresh (ospf, new, ei, LSA_REFRESH_FORCE);
@@ -513,11 +511,9 @@
 	 received the LSA already. */
       if (NBR_IS_DR (inbr) || NBR_IS_BDR (inbr))
 	{
-#ifdef HAVE_NSSA
 	  if (IS_DEBUG_OSPF_NSSA)
 	    zlog_info ("ospf_flood_through_interface(): "
 		       "DR/BDR NOT SEND to int %s", IF_NAME (oi));
-#endif /* HAVE_NSSA */
 	  return 1;
 	}
 	  
@@ -529,11 +525,9 @@
 
       if (oi->state == ISM_Backup)
 	{
-#ifdef HAVE_NSSA
 	  if (IS_DEBUG_OSPF_NSSA)
 	    zlog_info ("ospf_flood_through_interface(): "
 		       "ISM_Backup NOT SEND to int %s", IF_NAME (oi));
-#endif /* HAVE_NSSA */
 	  return 1;
 	}
     }
@@ -544,17 +538,10 @@
      (which	must be	> 0) when it is copied into the outgoing Link
      State Update packet (until the LS age field reaches the maximum
      value of MaxAge). */
-
-#ifdef HAVE_NSSA
+  /* XXX HASSO: Is this IS_DEBUG_OSPF_NSSA really correct? */
   if (IS_DEBUG_OSPF_NSSA)
     zlog_info ("ospf_flood_through_interface(): "
 	       "DR/BDR sending upd to int %s", IF_NAME (oi));
-#else /* ! HAVE_NSSA */
-
-  if (IS_DEBUG_OSPF_EVENT)
-    zlog_info ("ospf_flood_through_interface(): "
-	       "sending upd to int %s", IF_NAME (oi));
-#endif /* HAVE_NSSA */
 
   /*  RFC2328  Section 13.3
       On non-broadcast networks, separate	Link State Update
@@ -637,11 +624,9 @@
      interfaces are all the router's interfaces, excluding virtual
      links and those interfaces attaching to stub areas.  */
 
-#ifdef HAVE_NSSA
   if (CHECK_FLAG (lsa->flags, OSPF_LSA_LOCAL_XLT)) /* Translated from 7  */
     if (IS_DEBUG_OSPF_NSSA)
       zlog_info ("Flood/AS: NSSA TRANSLATED LSA");
-#endif /* HAVE_NSSA */
 
   for (node = listhead (ospf->areas); node; nextnode (node))
     {
@@ -656,7 +641,6 @@
              here.  NSSA's will receive Type-7's that have areas
              matching the originl LSA. */
 	case OSPF_AREA_NSSA:	/* Sending Type 5 or 7 into NSSA area */
-#ifdef HAVE_NSSA
 	  /* Type-7, flood NSSA area */
           if (lsa->data->type == OSPF_AS_NSSA_LSA
 	      && area == lsa->area)
@@ -665,7 +649,6 @@
           else
 	    continue_flag = 1;  /* Skip this NSSA area for Type-5's et al */
           break;
-#endif /* HAVE_NSSA */
 
 	case OSPF_AREA_TYPE_MAX:
 	case OSPF_AREA_STUB:
@@ -674,12 +657,10 @@
 
 	case OSPF_AREA_DEFAULT:
 	default:
-#ifdef HAVE_NSSA
 	  /* No Type-7 into normal area */
           if (lsa->data->type == OSPF_AS_NSSA_LSA) 
 	    continue_flag = 1; /* skip Type-7 */
           else
-#endif /* HAVE_NSSA */
 	    continue_flag = 0;	/* Do this area. */
 	  break;
 	}
@@ -737,7 +718,6 @@
 #endif /* HAVE_OPAQUE_LSA */
       lsa_ack_flag = ospf_flood_through_as (ospf, inbr, lsa);
       break;
-#ifdef HAVE_NSSA
       /* Type-7 Only received within NSSA, then flooded */
     case OSPF_AS_NSSA_LSA:
       /* Any P-bit was installed with the Type-7. */
@@ -746,7 +726,6 @@
       if (IS_DEBUG_OSPF_NSSA)
 	zlog_info ("ospf_flood_through: LOCAL NSSA FLOOD of Type-7.");
       break;
-#endif /* HAVE_NSSA */
     default:
       break;
     }
@@ -771,7 +750,6 @@
 #endif /* HAVE_OPAQUE_LSA */
       lsa_ack_flag = ospf_flood_through_as (ospf, inbr, lsa);
       break;
-#ifdef HAVE_NSSA
       /* Type-7 Only received within NSSA, then flooded */
     case OSPF_AS_NSSA_LSA:
       /* Any P-bit was installed with the Type-7. */
@@ -779,7 +757,6 @@
       if (IS_DEBUG_OSPF_NSSA)
 	zlog_info ("ospf_flood_through: LOCAL NSSA FLOOD of Type-7.");
       /* Fallthrough */
-#endif /* HAVE_NSSA */
     default:
       lsa_ack_flag = ospf_flood_through_area (lsa->area, inbr, lsa);
       break;
diff --git a/ospfd/ospf_ia.c b/ospfd/ospf_ia.c
index e4c1468..bea2657 100644
--- a/ospfd/ospf_ia.c
+++ b/ospfd/ospf_ia.c
@@ -265,9 +265,7 @@
   new_or->u.std.origin = (struct lsa_header *) sl;
   new_or->cost = abr_or->cost + metric;
   new_or->u.std.area_id = area->area_id;
-#ifdef HAVE_NSSA
   new_or->u.std.external_routing = area->external_routing;
-#endif /* HAVE_NSSA */
   new_or->path_type = OSPF_PATH_INTER_AREA;
 
   if (sl->header.type == OSPF_SUMMARY_LSA)
@@ -349,9 +347,7 @@
       new_or->u.std.origin = (struct lsa_header *) lsa;
       new_or->cost = cost;
       new_or->u.std.area_id = area->area_id;
-#ifdef HAVE_NSSA
       new_or->u.std.external_routing = area->external_routing;
-#endif /* HAVE_NSSA */
       new_or->path_type = OSPF_PATH_INTER_AREA;
       ospf_route_add (rt, p, new_or, abr_or);
 
@@ -424,9 +420,7 @@
 	{
 	  or->path_type = OSPF_PATH_INTER_AREA;
 	  or->u.std.area_id = area->area_id;
-#ifdef HAVE_NSSA
 	  or->u.std.external_routing = area->external_routing;
-#endif /* HAVE_NSSA */
           /* Note that we can do this only in Shortcut ABR mode,
              because standard ABR must leave the route type and area
              unchanged
@@ -495,9 +489,7 @@
 	  new_or->u.std.origin = (struct lsa_header *)lsa;
 	  new_or->cost = cost;
 	  new_or->u.std.area_id = area->area_id;
-#ifdef HAVE_NSSA
 	  new_or->u.std.external_routing = area->external_routing;
-#endif /* HAVE_NSSA */
 	  new_or->path_type = OSPF_PATH_INTER_AREA;
 	  new_or->u.std.flags = ROUTER_LSA_EXTERNAL;
 	  ospf_ia_router_route (ospf, rtrs, p, new_or, abr_or);
diff --git a/ospfd/ospf_interface.c b/ospfd/ospf_interface.c
index 4787ca6..fcc70e3 100644
--- a/ospfd/ospf_interface.c
+++ b/ospfd/ospf_interface.c
@@ -292,12 +292,10 @@
     case OSPF_AREA_STUB:
       UNSET_FLAG (oi->nbr_self->options, OSPF_OPTION_E);
       break;
-#ifdef HAVE_NSSA
     case OSPF_AREA_NSSA:
       UNSET_FLAG (oi->nbr_self->options, OSPF_OPTION_E);
       SET_FLAG (oi->nbr_self->options, OSPF_OPTION_NP);
       break;
-#endif /* HAVE_NSSA */
     }
 
   ospf_lsa_unlock (oi->network_lsa_self);
diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c
index d4cb5fd..60c7aad 100644
--- a/ospfd/ospf_lsa.c
+++ b/ospfd/ospf_lsa.c
@@ -447,14 +447,12 @@
   if (IS_OSPF_ABR (area->ospf))
     {
       SET_FLAG (flags,  ROUTER_LSA_BORDER);
-#ifdef HAVE_NSSA
       /* If Area is NSSA and we are both ABR and unconditional translator, 
        * set Nt bit to inform other routers.
        */
       if ( (area->external_routing == OSPF_AREA_NSSA)
            && (area->NSSATranslatorRole == OSPF_NSSA_ROLE_ALWAYS))
         SET_FLAG (flags, ROUTER_LSA_NT);
-#endif /* HAVE_NSSA */
     }
   return flags;
 }
@@ -741,13 +739,8 @@
   s = stream_new (OSPF_MAX_LSA_SIZE);
   lsah = (struct lsa_header *) STREAM_DATA (s);
 
-#ifdef HAVE_NSSA
   /* Set LSA common header fields. */
   lsa_header_set (s, LSA_OPTIONS_GET (area) | LSA_OPTIONS_NSSA_GET (area),
-#else /* ! HAVE_NSSA */
-  /* Set LSA common header fields. */
-  lsa_header_set (s, LSA_OPTIONS_GET (area),
-#endif /* HAVE_NSSA */
 		  OSPF_ROUTER_LSA, ospf->router_id, ospf->router_id);
 
   /* Set router-LSA body fields. */
@@ -1428,7 +1421,6 @@
   return fwd;
 }
 
-#ifdef HAVE_NSSA
 /* NSSA-external-LSA related functions. */
 
 /* Get 1st IP connection for Forward Addr */
@@ -1479,8 +1471,7 @@
 
   return fwd;
 }
-#endif /* HAVE_NSSA */
-
+
 #define DEFAULT_DEFAULT_METRIC	             20
 #define DEFAULT_DEFAULT_ORIGINATE_METRIC     10
 #define DEFAULT_DEFAULT_ALWAYS_METRIC	      1
@@ -1620,7 +1611,6 @@
   return new;
 }
 
-#ifdef HAVE_NSSA
 /* As Type-7 */
 void
 ospf_install_flood_nssa (struct ospf *ospf, 
@@ -1942,7 +1932,6 @@
 
   return new;
 }
-#endif /* HAVE_NSSA */
 
 int
 is_prefix_default (struct prefix_ipv4 *p)
@@ -2019,13 +2008,11 @@
   /* Flooding new LSA. only to AS (non-NSSA/STUB) */
   ospf_flood_through_as (ospf, NULL, new);
 
-#ifdef HAVE_NSSA
   /* If there is any attached NSSA, do special handling */
   if (ospf->anyNSSA &&
       /* stay away from translated LSAs! */
       !(CHECK_FLAG (new->flags, OSPF_LSA_LOCAL_XLT)))
     ospf_install_flood_nssa (ospf, new, ei); /* Install/Flood Type-7 to all NSSAs */
-#endif /* HAVE_NSSA */
 
   /* Debug logging. */
   if (IS_DEBUG_OSPF (lsa, LSA_GENERATE))
@@ -2121,7 +2108,6 @@
   return 0;
 }
 
-#ifdef HAVE_NSSA
 /* Flush any NSSA LSAs for given prefix */
 void
 ospf_nssa_lsa_flush (struct ospf *ospf, struct prefix_ipv4 *p)
@@ -2152,7 +2138,6 @@
     }
   }
 }
-#endif /* HAVE_NSSA */
 
 /* Flush an AS-external-LSA from LSDB and routing domain. */
 void
@@ -2174,14 +2159,13 @@
 		   inet_ntoa (p->prefix), p->prefixlen);
       return;
     }
-#ifdef HAVE_NSSA
+
   /* If LSA is selforiginated, not a translated LSA, and there is 
    * NSSA area, flush Type-7 LSA's at first. 
    */
   if (IS_LSA_SELF(lsa) && (ospf->anyNSSA)
       && !(CHECK_FLAG (lsa->flags, OSPF_LSA_LOCAL_XLT)))
     ospf_nssa_lsa_flush (ospf, p);
-#endif /* HAVE_NSSA */
 
   /* Sweep LSA from Link State Retransmit List. */
   ospf_ls_retransmit_delete_nbr_as (ospf, lsa);
@@ -2324,19 +2308,15 @@
   /* Flood LSA through AS. */
   ospf_flood_through_as (ospf, NULL, new);
 
-#ifdef HAVE_NSSA
   /* If any attached NSSA, install as Type-7, flood to all NSSA Areas */
   if (ospf->anyNSSA && !(CHECK_FLAG (new->flags, OSPF_LSA_LOCAL_XLT)))
     ospf_install_flood_nssa (ospf, new, ei); /* Install/Flood per new rules */
-#endif /* HAVE_NSSA */
 
   /* Register self-originated LSA to refresh queue. 
    * Translated LSAs should not be registered, but refreshed upon 
    * refresh of the Type-7
    */
-#ifdef HAVE_NSSA
   if ( !CHECK_FLAG (new->flags, OSPF_LSA_LOCAL_XLT) )
-#endif
     ospf_refresher_register_lsa (ospf, new);
 
   /* Debug logging. */
@@ -2507,7 +2487,6 @@
         ospf_ase_incremental_update (ospf, new);
     }
 
-#ifdef HAVE_NSSA
   if (new->data->type == OSPF_AS_NSSA_LSA)
     {
       /* There is no point to register selforiginate Type-7 LSA for
@@ -2523,17 +2502,11 @@
           ospf_translated_nssa_refresh (ospf, new, NULL);
         }
     }
-#endif /* HAVE_NSSA */
 
   /* Register self-originated LSA to refresh queue. 
    * Leave Translated LSAs alone if NSSA is enabled
    */
-  if (IS_LSA_SELF (new) 
-#ifdef HAVE_NSSA
-      && !CHECK_FLAG (new->flags, OSPF_LSA_LOCAL_XLT ) 
-#endif /* HAVE_NSSA */
-      )
-
+  if (IS_LSA_SELF (new) && !CHECK_FLAG (new->flags, OSPF_LSA_LOCAL_XLT ) )
     ospf_refresher_register_lsa (ospf, new);
 
   return new;
@@ -2562,12 +2535,10 @@
       ospf_ls_retransmit_delete_nbr_as (ospf, old);
       ospf_ase_unregister_external_lsa (old, ospf);
       break;
-#ifdef HAVE_NSSA
     case OSPF_AS_NSSA_LSA:
       ospf_ls_retransmit_delete_nbr_area (old->area, old);
       ospf_ase_unregister_external_lsa (old, ospf);
-    break;
-#endif /* HAVE_NSSA */
+      break;
     default:
       ospf_ls_retransmit_delete_nbr_area (old->area, old);
       break;
@@ -2589,7 +2560,6 @@
   /* Set LSDB. */
   switch (lsa->data->type)
     {
-#ifdef HAVE_NSSA
       /* kevinm */
     case OSPF_AS_NSSA_LSA:
       if (lsa->area)
@@ -2597,7 +2567,6 @@
       else
 	lsdb = ospf->lsdb;
       break;
-#endif /* HAVE_NSSA */
     case OSPF_AS_EXTERNAL_LSA:
 #ifdef HAVE_OPAQUE_LSA
     case OSPF_OPAQUE_AS_LSA:
@@ -2724,10 +2693,8 @@
       new = ospf_opaque_lsa_install (lsa, rt_recalc);
       break;
 #endif /* HAVE_OPAQUE_LSA */
-#ifdef HAVE_NSSA
     case OSPF_AS_NSSA_LSA:
       new = ospf_external_lsa_install (ospf, lsa, rt_recalc);
-#endif /* HAVE_NSSA */
     default: /* type-6,8,9....nothing special */
       break;
     }
@@ -2746,9 +2713,7 @@
 #ifdef HAVE_OPAQUE_LSA
         case OSPF_OPAQUE_AS_LSA:
 #endif /* HAVE_OPAQUE_LSA */
-#ifdef HAVE_NSSA
-	case OSPF_AS_NSSA_LSA:
-#endif /* HAVE_NSSA */
+        case OSPF_AS_NSSA_LSA:
           zlog_info ("LSA[%s]: Install %s",
                  dump_lsa_key (new),
                  LOOKUP (ospf_lsa_type_msg, new->data->type));
@@ -2817,9 +2782,7 @@
     case OSPF_NETWORK_LSA:
     case OSPF_SUMMARY_LSA:
     case OSPF_ASBR_SUMMARY_LSA:
-#ifdef HAVE_NSSA
     case OSPF_AS_NSSA_LSA:
-#endif /* HAVE_NSSA */
 #ifdef HAVE_OPAQUE_LSA
     case OSPF_OPAQUE_LINK_LSA:
     case OSPF_OPAQUE_AREA_LSA:
@@ -2953,11 +2916,9 @@
 int
 ospf_lsa_maxage_walker_remover (struct ospf *ospf, struct ospf_lsa *lsa)
 {
-#ifdef HAVE_NSSA
   /* Stay away from any Local Translated Type-7 LSAs */
   if (CHECK_FLAG (lsa->flags, OSPF_LSA_LOCAL_XLT))
     return 0;
-#endif /* HAVE_NSSA */
 
   if (IS_LSA_MAXAGE (lsa))
     /* Self-originated LSAs should NOT time-out instead,
@@ -2984,9 +2945,7 @@
             break;
 #endif /* HAVE_OPAQUE_LSA */
           case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_NSSA
-	  case OSPF_AS_NSSA_LSA:
-#endif /* HAVE_NSSA */
+          case OSPF_AS_NSSA_LSA:
 	    ospf_ase_incremental_update (ospf, lsa);
             break;
           default:
@@ -3028,10 +2987,8 @@
       LSDB_LOOP (OPAQUE_LINK_LSDB (area), rn, lsa)
 	ospf_lsa_maxage_walker_remover (ospf, lsa);
 #endif /* HAVE_OPAQUE_LSA */
-#ifdef HAVE_NSSA
       LSDB_LOOP (NSSA_LSDB (area), rn, lsa)
         ospf_lsa_maxage_walker_remover (ospf, lsa);
-#endif /* HAVE_NSSA */
     }
 
   /* for AS-external-LSAs. */
@@ -3094,9 +3051,7 @@
     case OSPF_NETWORK_LSA:
     case OSPF_SUMMARY_LSA:
     case OSPF_ASBR_SUMMARY_LSA:
-#ifdef HAVE_NSSA
     case OSPF_AS_NSSA_LSA:
-#endif /* HAVE_NSSA */
 #ifdef HAVE_OPAQUE_LSA
     case OSPF_OPAQUE_LINK_LSA:
     case OSPF_OPAQUE_AREA_LSA:
@@ -3619,13 +3574,11 @@
       ospf_summary_asbr_lsa_refresh (ospf, lsa);
       break;
     case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_NSSA
       /* Translated from NSSA Type-5s are refreshed when 
        * from refresh of Type-7 - do not refresh these directly.
        */
       if (CHECK_FLAG (lsa->flags, OSPF_LSA_LOCAL_XLT))
         break;
-#endif /* HAVE_NSSA */
       ei = ospf_external_info_check (lsa);
       if (ei)
         ospf_external_lsa_refresh (ospf, lsa, ei, LSA_REFRESH_FORCE);
diff --git a/ospfd/ospf_lsa.h b/ospfd/ospf_lsa.h
index 021d6a4..6d60b57 100644
--- a/ospfd/ospf_lsa.h
+++ b/ospfd/ospf_lsa.h
@@ -27,10 +27,8 @@
 #define OSPF_MIN_LSA		1  /* begin range here */
 #if defined (HAVE_OPAQUE_LSA)
 #define OSPF_MAX_LSA           12
-#elif defined (HAVE_NSSA)
-#define OSPF_MAX_LSA		8
 #else
-#define OSPF_MAX_LSA		6
+#define OSPF_MAX_LSA		8
 #endif
 
 /* OSPF LSA Type definition. */
@@ -77,9 +75,7 @@
 #define OSPF_LSA_RECEIVED	  0x04
 #define OSPF_LSA_APPROVED	  0x08
 #define OSPF_LSA_DISCARD	  0x10
-#ifdef HAVE_NSSA
 #define OSPF_LSA_LOCAL_XLT	  0x20
-#endif /* HAVE_NSSA */
 #define OSPF_LSA_PREMATURE_AGE	  0x40
 
   /* LSA data. */
@@ -320,12 +316,10 @@
 int metric_type (struct ospf *, u_char);
 int metric_value (struct ospf *, u_char);
 
-#ifdef HAVE_NSSA
 struct in_addr ospf_get_nssa_ip (struct ospf_area *);
 int ospf_translated_nssa_compare (struct ospf_lsa *, struct ospf_lsa *);
 struct ospf_lsa *ospf_translated_nssa_refresh (struct ospf *, struct ospf_lsa *,
                                    struct ospf_lsa *);
 struct ospf_lsa *ospf_translated_nssa_originate (struct ospf *, struct ospf_lsa *);
-#endif
 
 #endif /* _ZEBRA_OSPF_LSA_H */
diff --git a/ospfd/ospf_nsm.c b/ospfd/ospf_nsm.c
index a8efdcc..14c75df 100644
--- a/ospfd/ospf_nsm.c
+++ b/ospfd/ospf_nsm.c
@@ -244,11 +244,9 @@
     }
 #endif /* HAVE_OPAQUE_LSA */
 
-#ifdef HAVE_NSSA
   /* Stay away from any Local Translated Type-7 LSAs */
   if (CHECK_FLAG (lsa->flags, OSPF_LSA_LOCAL_XLT))
     return 0;
-#endif /* HAVE_NSSA */
 
   if (IS_LSA_MAXAGE (lsa))
     ospf_ls_retransmit_add (nbr, lsa);                      
diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c
index e6b2ea7..5692db6 100644
--- a/ospfd/ospf_packet.c
+++ b/ospfd/ospf_packet.c
@@ -707,7 +707,6 @@
 
   /* new for NSSA is to ensure that NP is on and E is off */
 
-#ifdef HAVE_NSSA
   if (oi->area->external_routing == OSPF_AREA_NSSA) 
     {
       if (! (CHECK_FLAG (OPTIONS (oi), OSPF_OPTION_NP)
@@ -722,7 +721,6 @@
         zlog_info ("NSSA-Hello:RECV:Packet from %s:", inet_ntoa(ospfh->router_id));
     }
   else    
-#endif /* HAVE_NSSA */
     /* The setting of the E-bit found in the Hello Packet's Options
        field must match this area's ExternalRoutingCapability A
        mismatch causes processing to stop and the packet to be
@@ -873,13 +871,9 @@
 #ifdef HAVE_OPAQUE_LSA
 	case OSPF_OPAQUE_AS_LSA:
 #endif /* HAVE_OPAQUE_LSA */
-#ifdef HAVE_NSSA
           /* Check for stub area.  Reject if AS-External from stub but
              allow if from NSSA. */
           if (oi->area->external_routing == OSPF_AREA_STUB)
-#else /* ! HAVE_NSSA */
-          if (oi->area->external_routing != OSPF_AREA_DEFAULT)
-#endif /* HAVE_NSSA */
             {
               zlog_warn ("Packet [DD:RECV]: LSA[Type%d:%s] from %s area.",
                          lsah->type, inet_ntoa (lsah->id),
@@ -985,7 +979,6 @@
       return;
     }
 
-#ifdef HAVE_NSSA
   /* 
    * XXX HACK by Hasso Tepper. Setting N/P bit in NSSA area DD packets is not
    * required. In fact at least JunOS sends DD packets with P bit clear. 
@@ -1008,7 +1001,6 @@
                     inet_ntoa (nbr->router_id) );
       SET_FLAG (dd->options, OSPF_OPTION_NP);
     }
-#endif /* HAVE_NSSA */
 
 #ifdef REJECT_IF_TBIT_ON
   if (CHECK_FLAG (dd->options, OSPF_OPTION_T))
@@ -1518,7 +1510,6 @@
 
       lsa = getdata (node);
 
-#ifdef HAVE_NSSA
       if (IS_DEBUG_OSPF_NSSA)
 	{
 	  char buf1[INET_ADDRSTRLEN];
@@ -1534,7 +1525,6 @@
 		  inet_ntop (AF_INET, &lsa->data->adv_router,
 			     buf3, INET_ADDRSTRLEN));
 	}
-#endif /* HAVE_NSSA */
 
       listnode_delete (lsas, lsa); /* We don't need it in list anymore */
 
@@ -1558,13 +1548,10 @@
         if (nbr->oi->area->external_routing != OSPF_AREA_DEFAULT) 
 	  {
 	    DISCARD_LSA (lsa, 1);
-#ifdef HAVE_NSSA
 	    if (IS_DEBUG_OSPF_NSSA)
 	      zlog_info("Incoming External LSA Discarded: We are NSSA/STUB Area");
-#endif /* HAVE_NSSA */
 	  }
 
-#ifdef  HAVE_NSSA 
       if (lsa->data->type == OSPF_AS_NSSA_LSA)
 	if (nbr->oi->area->external_routing != OSPF_AREA_NSSA)
 	  {
@@ -1572,7 +1559,6 @@
 	    if (IS_DEBUG_OSPF_NSSA)
 	      zlog_info("Incoming NSSA LSA Discarded:  Not NSSA Area");
 	  }
-#endif /* HAVE_NSSA */
 
       /* Find the LSA in the current database. */
 
diff --git a/ospfd/ospf_packet.h b/ospfd/ospf_packet.h
index 81a104c..a439aa3 100644
--- a/ospfd/ospf_packet.h
+++ b/ospfd/ospf_packet.h
@@ -42,10 +42,7 @@
 
 #define OSPF_SEND_PACKET_DIRECT         1
 #define OSPF_SEND_PACKET_INDIRECT       2
-
-#ifdef HAVE_NSSA
 #define OSPF_SEND_PACKET_LOOP           3
-#endif /* HAVE_NSSA */
 
 #define OSPF_HELLO_REPLY_DELAY          1
 
diff --git a/ospfd/ospf_route.c b/ospfd/ospf_route.c
index d56b565..a8ee232 100644
--- a/ospfd/ospf_route.c
+++ b/ospfd/ospf_route.c
@@ -319,9 +319,7 @@
 
   or->id = v->id;
   or->u.std.area_id = area->area_id;
-#ifdef HAVE_NSSA
   or->u.std.external_routing= area->external_routing;
-#endif /* HAVE_NSSA */
   or->path_type = OSPF_PATH_INTRA_AREA;
   or->cost = v->distance;
 
@@ -376,9 +374,7 @@
 
   or->id = v->id;
   or->u.std.area_id = area->area_id;
-#ifdef HAVE_NSSA
   or->u.std.external_routing = area->external_routing;
-#endif /* HAVE_NSSA */
   or->path_type = OSPF_PATH_INTRA_AREA;
   or->cost = v->distance;
   or->type = OSPF_DESTINATION_ROUTER;
@@ -471,9 +467,7 @@
 
   or->id = v->id;
   or->u.std.area_id = area->area_id;
-#ifdef HAVE_NSSA
   or->u.std.external_routing = area->external_routing;
-#endif /* HAVE_NSSA */
   or->path_type = OSPF_PATH_INTRA_AREA;
   or->cost = v->distance;
   or->type = OSPF_DESTINATION_NETWORK;
@@ -603,9 +597,7 @@
 
   or->id = v->id;
   or->u.std.area_id = area->area_id;
-#ifdef HAVE_NSSA
   or->u.std.external_routing = area->external_routing;
-#endif /* HAVE_NSSA */
   or->path_type = OSPF_PATH_INTRA_AREA;
   or->cost = cost;
   or->type = OSPF_DESTINATION_NETWORK;
@@ -1029,9 +1021,7 @@
   new_or->id.s_addr = 0;
   new_or->cost = 0;
   new_or->u.std.area_id = area->area_id;
-#ifdef HAVE_NSSA
   new_or->u.std.external_routing = area->external_routing;
-#endif /* HAVE_NSSA */
   new_or->path_type = OSPF_PATH_INTER_AREA;
   rn->info = new_or;
 
diff --git a/ospfd/ospf_route.h b/ospfd/ospf_route.h
index 8d05be2..802aac6 100644
--- a/ospfd/ospf_route.h
+++ b/ospfd/ospf_route.h
@@ -62,10 +62,8 @@
   /* Associated Area. */
   struct in_addr area_id;	/* The area the route belongs to */
 
-#ifdef HAVE_NSSA
   /*  Area Type */
   int external_routing;
-#endif /* HAVE_NSSA */
 
   /* Optional Capability. */
   u_char options;		/* Get from LSA header. */
diff --git a/ospfd/ospf_te.c b/ospfd/ospf_te.c
index 0d455ec..1a9946d 100644
--- a/ospfd/ospf_te.c
+++ b/ospfd/ospf_te.c
@@ -878,9 +878,7 @@
   lsah = (struct lsa_header *) STREAM_DATA (s);
 
   options  = LSA_OPTIONS_GET (area);
-#ifdef HAVE_NSSA
   options |= LSA_OPTIONS_NSSA_GET (area);
-#endif /* HAVE_NSSA */
   options |= OSPF_OPTION_O; /* Don't forget this :-) */
 
   lsa_type = OSPF_OPAQUE_AREA_LSA;
diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c
index 2b2c000..c930817 100644
--- a/ospfd/ospf_vty.c
+++ b/ospfd/ospf_vty.c
@@ -675,20 +675,12 @@
       if (vl_config->format == OSPF_AREA_ID_FORMAT_ADDRESS)
 	vty_out (vty, "Area %s is %s%s",
 		 inet_ntoa (area_id),
-#ifdef HAVE_NSSA
 		 area->external_routing == OSPF_AREA_NSSA?"nssa":"stub",
-#else
-		 "stub",
-#endif /* HAVE_NSSA */		 
 		 VTY_NEWLINE);
       else
 	vty_out (vty, "Area %ld is %s%s",
 		 (u_long)ntohl (area_id.s_addr),
-#ifdef HAVE_NSSA
 		 area->external_routing == OSPF_AREA_NSSA?"nssa":"stub",
-#else
-		 "stub",
-#endif /* HAVE_NSSA */		 
 		 VTY_NEWLINE);	
       return NULL;
     }
@@ -1478,7 +1470,6 @@
   return CMD_SUCCESS;
 }
 
-#ifdef HAVE_NSSA
 int
 ospf_area_nssa_cmd_handler (struct vty *vty, int argc, char **argv, int nosum)
 {
@@ -1619,8 +1610,6 @@
   return CMD_SUCCESS;
 }
 
-#endif /* HAVE_NSSA */
-
 DEFUN (ospf_area_default_cost,
        ospf_area_default_cost_cmd,
        "area (A.B.C.D|<0-4294967295>) default-cost <0-16777215>",
@@ -2370,13 +2359,10 @@
 		         area->no_summary ? ", no summary" : "",
 		         area->shortcut_configured ? "; " : "");
 
-#ifdef HAVE_NSSA
-
       else if (area->external_routing == OSPF_AREA_NSSA)
         vty_out (vty, " (NSSA%s%s)",
                  area->no_summary ? ", no summary" : "",
                  area->shortcut_configured ? "; " : "");
-#endif /* HAVE_NSSA */
 
       vty_out (vty, "%s", VTY_NEWLINE);
       vty_out (vty, "   Shortcutting mode: %s",
@@ -2390,7 +2376,6 @@
 	   "Active: %d%s", listcount (area->oiflist),
 	   area->act_ints, VTY_NEWLINE);
 
-#ifdef HAVE_NSSA
   if (area->external_routing == OSPF_AREA_NSSA)
     {
       vty_out (vty, "   It is an NSSA configuration. %s   Elected NSSA/ABR performs type-7/type-5 LSA translation. %s", VTY_NEWLINE, VTY_NEWLINE);
@@ -2418,7 +2403,6 @@
 	             VTY_NEWLINE);
 	   }
     }
-#endif /* HAVE_NSSA */
 
   /* Show number of fully adjacent neighbors. */
   vty_out (vty, "   Number of fully adjacent neighbors in this area:"
@@ -3119,9 +3103,7 @@
 	    vty_out (vty, " %s/%d", inet_ntoa (p.prefix), p.prefixlen);
 	    break;
 	  case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_NSSA
 	  case OSPF_AS_NSSA_LSA:
-#endif /* HAVE_NSSA */
 	    asel = (struct as_external_lsa *) lsa->data;
 
 	    p.family = AF_INET;
@@ -3158,10 +3140,8 @@
   "Summary Link States",
   "ASBR-Summary Link States",
   "AS External Link States",
-#if defined  (HAVE_NSSA) || defined (HAVE_OPAQUE_LSA)
   "Group Membership LSA",
   "NSSA-external Link States",
-#endif /* HAVE_NSSA */
 #ifdef HAVE_OPAQUE_LSA
   "Type-8 LSA",
   "Link-Local Opaque-LSA",
@@ -3181,15 +3161,9 @@
   "Link ID         ADV Router      Age  Seq#       CkSum  Route",
   "Link ID         ADV Router      Age  Seq#       CkSum",
   "Link ID         ADV Router      Age  Seq#       CkSum  Route",
-#ifdef HAVE_NSSA
   " --- header for Group Member ----",
   "Link ID         ADV Router      Age  Seq#       CkSum  Route",
-#endif /* HAVE_NSSA */
 #ifdef HAVE_OPAQUE_LSA
-#ifndef HAVE_NSSA
-  " --- type-6 ---",
-  " --- type-7 ---",
-#endif /* HAVE_NSSA */
   " --- type-8 ---",
   "Opaque-Type/Id  ADV Router      Age  Seq#       CkSum",
   "Opaque-Type/Id  ADV Router      Age  Seq#       CkSum",
@@ -3204,9 +3178,7 @@
   "Received",
   "Approved",
   "Discard",
-#ifdef HAVE_NSSA
   "Translated",
-#endif
 };
 
 void
@@ -3221,11 +3193,7 @@
            VTY_NEWLINE);
   vty_out (vty, "  LS Flags: 0x%-2x %s%s",
            lsa->flags,
-#ifdef HAVE_NSSA
            ((lsa->flags & OSPF_LSA_LOCAL_XLT) ? "(Translated from Type-7)" : ""),
-#else
-           "",
-#endif /* HAVE_NSSA */
            VTY_NEWLINE);
 
   if (lsa->data->type == OSPF_ROUTER_LSA)
@@ -3421,7 +3389,6 @@
   return 0;
 }
 
-#ifdef HAVE_NSSA
 int
 show_as_external_lsa_stdvty (struct ospf_lsa *lsa)
 {
@@ -3474,8 +3441,6 @@
   return 0;
 }
 
-#endif /* HAVE_NSSA */
-
 int
 show_func_dummy (struct vty *vty, struct ospf_lsa *lsa)
 {
@@ -3505,15 +3470,9 @@
   show_summary_lsa_detail,
   show_summary_asbr_lsa_detail,
   show_as_external_lsa_detail,
-#ifdef HAVE_NSSA
   show_func_dummy,
   show_as_nssa_lsa_detail,  /* almost same as external */
-#endif /* HAVE_NSSA */
 #ifdef HAVE_OPAQUE_LSA
-#ifndef HAVE_NSSA
-  show_func_dummy,
-  show_func_dummy,
-#endif /* HAVE_NSSA */
   NULL,				/* type-8 */
   show_opaque_lsa_detail,
   show_opaque_lsa_detail,
@@ -3608,10 +3567,8 @@
     if ((lsa = rn->info))
       if (IPV4_ADDR_SAME (adv_router, &lsa->data->adv_router))
 	{
-#ifdef HAVE_NSSA
 	  if (CHECK_FLAG (lsa->flags, OSPF_LSA_LOCAL_XLT))
 	    continue;
-#endif /* HAVE_NSSA */
 	  if (show_function[lsa->data->type] != NULL)
 	    show_function[lsa->data->type] (vty, lsa);
 	}
@@ -3743,13 +3700,8 @@
       }
 }
 
-#ifdef HAVE_NSSA
 #define OSPF_LSA_TYPE_NSSA_DESC      "NSSA external link state\n"
 #define OSPF_LSA_TYPE_NSSA_CMD_STR   "|nssa-external"
-#else  /* HAVE_NSSA */
-#define OSPF_LSA_TYPE_NSSA_DESC      ""
-#define OSPF_LSA_TYPE_NSSA_CMD_STR   ""
-#endif /* HAVE_NSSA */
 
 #ifdef HAVE_OPAQUE_LSA
 #define OSPF_LSA_TYPE_OPAQUE_LINK_DESC "Link local Opaque-LSA\n"
@@ -3810,10 +3762,8 @@
     type = OSPF_ROUTER_LSA;
   else if (strncmp (argv[0], "ne", 2) == 0)
     type = OSPF_NETWORK_LSA;
-#ifdef HAVE_NSSA
   else if (strncmp (argv[0], "ns", 2) == 0)
     type = OSPF_AS_NSSA_LSA;
-#endif /* HAVE_NSSA */
   else if (strncmp (argv[0], "su", 2) == 0)
     type = OSPF_SUMMARY_LSA;
   else if (strncmp (argv[0], "a", 1) == 0)
@@ -3946,10 +3896,8 @@
     type = OSPF_ROUTER_LSA;
   else if (strncmp (argv[0], "ne", 2) == 0)
     type = OSPF_NETWORK_LSA;
-#ifdef HAVE_NSSA
   else if (strncmp (argv[0], "ns", 2) == 0)
     type = OSPF_AS_NSSA_LSA;
-#endif /* HAVE_NSSA */
   else if (strncmp (argv[0], "s", 1) == 0)
     type = OSPF_SUMMARY_LSA;
   else if (strncmp (argv[0], "a", 1) == 0)
@@ -6625,7 +6573,6 @@
   vty_out (vty, "%s", VTY_NEWLINE);
 }
 
-#ifdef HAVE_NSSA
 DEFUN (show_ip_ospf_border_routers,
        show_ip_ospf_border_routers_cmd,
        "show ip ospf border-routers",
@@ -6657,7 +6604,6 @@
 
   return CMD_SUCCESS;
 }
-#endif /* HAVE_NSSA */
 
 DEFUN (show_ip_ospf_route,
        show_ip_ospf_route_cmd,
@@ -6976,14 +6922,11 @@
 		 VTY_NEWLINE);
 
       if ((area->external_routing == OSPF_AREA_STUB)
-#ifdef HAVE_NSSA
 	  || (area->external_routing == OSPF_AREA_NSSA)
-#endif /* HAVE_NSSA */
 	  )
 	{
 	  if (area->external_routing == OSPF_AREA_STUB)
 	    vty_out (vty, " area %s stub", buf);
-#ifdef HAVE_NSSA
 	  else if (area->external_routing == OSPF_AREA_NSSA)
 	    {
 	      vty_out (vty, " area %s nssa", buf);
@@ -7000,7 +6943,6 @@
 	            vty_out (vty, " translate-candidate");
 	        }
 	    }
-#endif /* HAVE_NSSA */
 
 	  if (area->no_summary)
 	    vty_out (vty, " no-summary");
@@ -7405,10 +7347,8 @@
   /* "show ip ospf route" commands. */
   install_element (VIEW_NODE, &show_ip_ospf_route_cmd);
   install_element (ENABLE_NODE, &show_ip_ospf_route_cmd);
-#ifdef HAVE_NSSA
   install_element (VIEW_NODE, &show_ip_ospf_border_routers_cmd);
   install_element (ENABLE_NODE, &show_ip_ospf_border_routers_cmd);
-#endif /* HAVE_NSSA */
 }
 
 
@@ -7718,7 +7658,6 @@
   install_element (OSPF_NODE, &no_ospf_area_stub_no_summary_cmd);
   install_element (OSPF_NODE, &no_ospf_area_stub_cmd);
 
-#ifdef HAVE_NSSA
   /* "area nssa" commands. */
   install_element (OSPF_NODE, &ospf_area_nssa_cmd);
   install_element (OSPF_NODE, &ospf_area_nssa_translate_no_summary_cmd);
@@ -7726,7 +7665,6 @@
   install_element (OSPF_NODE, &ospf_area_nssa_no_summary_cmd);
   install_element (OSPF_NODE, &no_ospf_area_nssa_cmd);
   install_element (OSPF_NODE, &no_ospf_area_nssa_no_summary_cmd);
-#endif /* HAVE_NSSA */
 
   install_element (OSPF_NODE, &ospf_area_default_cost_cmd);
   install_element (OSPF_NODE, &no_ospf_area_default_cost_cmd);
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c
index 3cf93a6..04b34fb 100644
--- a/ospfd/ospfd.c
+++ b/ospfd/ospfd.c
@@ -503,10 +503,8 @@
   LSDB_LOOP (ASBR_SUMMARY_LSDB (area), rn, lsa)
     ospf_discard_from_db (area->ospf, area->lsdb, lsa);
 
-#ifdef HAVE_NSSA
   LSDB_LOOP (NSSA_LSDB (area), rn, lsa)
     ospf_discard_from_db (area->ospf, area->lsdb, lsa);
-#endif /* HAVE_NSSA */
 #ifdef HAVE_OPAQUE_LSA
   LSDB_LOOP (OPAQUE_AREA_LSDB (area), rn, lsa)
     ospf_discard_from_db (area->ospf, area->lsdb, lsa);
@@ -825,12 +823,10 @@
 		  case OSPF_AREA_STUB:
 		    UNSET_FLAG (oi->nbr_self->options, OSPF_OPTION_E);
 		    break;
-#ifdef HAVE_NSSA
 		  case OSPF_AREA_NSSA:
 		    UNSET_FLAG (oi->nbr_self->options, OSPF_OPTION_E);
 		    SET_FLAG (oi->nbr_self->options, OSPF_OPTION_NP);
 		    break;
-#endif /* HAVE_NSSA */
 		  }
 
 		ospf_area_add_if (oi->area, oi);
@@ -983,9 +979,7 @@
 	if ((oi = getdata (node)) != NULL)
 	  if (oi->nbr_self != NULL)
 	    {
-#ifdef HAVE_NSSA
 	      UNSET_FLAG (oi->nbr_self->options, OSPF_OPTION_NP);
-#endif /* HAVE_NSSA */
 	      SET_FLAG (oi->nbr_self->options, OSPF_OPTION_E);
 	    }
       break;
@@ -996,9 +990,7 @@
 	    {
 	      if (IS_DEBUG_OSPF_EVENT)
 		zlog_info ("setting options on %s accordingly", IF_NAME (oi));
-#ifdef HAVE_NSSA
 	      UNSET_FLAG (oi->nbr_self->options, OSPF_OPTION_NP);
-#endif /* HAVE_NSSA */
 	      UNSET_FLAG (oi->nbr_self->options, OSPF_OPTION_E);
 	      if (IS_DEBUG_OSPF_EVENT)
 		zlog_info ("options set on %s: %x",
@@ -1006,7 +998,6 @@
 	    }
       break;
     case OSPF_AREA_NSSA:
-#ifdef HAVE_NSSA
       for (node = listhead (area->oiflist); node; nextnode (node))
 	if ((oi = getdata (node)) != NULL)
 	  if (oi->nbr_self != NULL)
@@ -1016,7 +1007,6 @@
 	      SET_FLAG (oi->nbr_self->options, OSPF_OPTION_NP);
 	      zlog_info ("options set on %s: %x", IF_NAME (oi), OPTIONS (oi));
 	    }
-#endif /* HAVE_NSSA */
       break;
     default:
       break;
diff --git a/ospfd/ospfd.h b/ospfd/ospfd.h
index 23a83ff..988f438 100644
--- a/ospfd/ospfd.h
+++ b/ospfd/ospfd.h
@@ -69,9 +69,9 @@
 #define OSPF_ALLSPFROUTERS              0xe0000005      /* 224.0.0.5 */
 #define OSPF_ALLDROUTERS                0xe0000006      /* 224.0.0.6 */
 
-#ifdef HAVE_NSSA
+/* XXX Where is this used? And why it was used only if compiled with
+ * NSSA support. */
 #define OSPF_LOOPer                     0x7f000000      /* 127.0.0.0 */
-#endif /* HAVE_NSSA */
 
 #define OSPF_AREA_BACKBONE              0x00000000      /* 0.0.0.0 */
 
@@ -473,10 +473,8 @@
 
 #define LSA_OPTIONS_GET(area) \
         (((area)->external_routing == OSPF_AREA_DEFAULT) ? OSPF_OPTION_E : 0)
-#ifdef HAVE_NSSA
 #define LSA_OPTIONS_NSSA_GET(area) \
         (((area)->external_routing == OSPF_AREA_NSSA)  ? OSPF_OPTION_NP : 0)
-#endif /* HAVE_NSSA */
 
 #define OSPF_TIMER_ON(T,F,V)                                                  \
     do {                                                                      \
