diff --git a/configure.ac b/configure.ac
index 0ea64b9..2129421 100755
--- a/configure.ac
+++ b/configure.ac
@@ -5,7 +5,7 @@
 ##  Copyright (c) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro <kunihiro@zebra.org>
 ##  Portions Copyright (c) 2003 Paul Jakma <paul@dishone.st>
 ##
-## $Id: configure.ac,v 1.52 2004/06/12 14:33:05 hasso Exp $
+## $Id: configure.ac,v 1.53 2004/06/20 21:00:27 hasso Exp $
 AC_PREREQ(2.53)
 
 AC_INIT(quagga, 0.96.5, [http://bugzilla.quagga.net])
@@ -97,9 +97,6 @@
 [  --with-libpam           use libpam for PAM support in vtysh])
 AC_ARG_ENABLE(tcp-zebra,
 [  --enable-tcp-zebra      enable TCP/IP socket connection between zebra and protocol daemon])
-dnl Temporary option until OSPF NSSA implementation complete
-AC_ARG_ENABLE(nssa,
-[  --enable-nssa           enable OSPF NSSA option])
 AC_ARG_ENABLE(opaque-lsa,
 [  --enable-opaque-lsa     enable OSPF Opaque-LSA with OSPFAPI support (RFC2370)])
 AC_ARG_ENABLE(ospfapi,
@@ -144,10 +141,6 @@
   AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
 fi
 
-if test "${enable_nssa}" = "yes"; then
-  AC_DEFINE(HAVE_NSSA,,OSPF NSSA)
-fi
-
 if test "${enable_opaque_lsa}" = "yes"; then
   AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
 fi
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 {                                                                      \
