diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog
index 41453bf..08a3fcb 100644
--- a/ospfd/ChangeLog
+++ b/ospfd/ChangeLog
@@ -1,3 +1,24 @@
+2005-11-20 Paul Jakma <paul.jakma@sun.com>
+
+        * ospfd.h: remove the OSPF_ROUTER_ID_UPDATE_DELAY define
+          (struct ospf) remove the router_id timer thread.
+          remove export of ospf_router_id_update_timer.   
+        * ospfd.c: (ospf_router_id_update) call ospf_if_update to
+          poke interfaces into action after ID has been configured.
+          (ospf_router_id_update_timer) removed.
+          (ospf_finish_final) t_router_id_update timer is gone.
+          (ospf_network_run) router-id update timer gone.
+          call ospf_router_id_update directly if ID not configured.
+          In the per-iface loop, don't ospf_if_up interfaces if
+          ID is still not configured. The update function will call
+          ospf_if_update anyway.
+          (ospf_if_update) ID update timer is gone. Just return if no
+          ID is set.
+        * ospf_vty.c: (ospf_router_id) call ospf_router_id_update, no
+          timer needed.
+        * ospf_zebra.c: (ospf_router_id_update_zebra) call
+          ospf_router_id_update directly, not via timer.  
+
 2005-11-16 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
 
 	* ospf_dump.h: Define OSPF_TIME_DUMP_SIZE as appropriate buffer size
diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c
index de021bc..385eb8d 100644
--- a/ospfd/ospf_vty.c
+++ b/ospfd/ospf_vty.c
@@ -215,11 +215,9 @@
     }
 
   ospf->router_id_static = router_id;
-
-  if (ospf->t_router_id_update == NULL)
-    OSPF_TIMER_ON (ospf->t_router_id_update, ospf_router_id_update_timer,
-		   OSPF_ROUTER_ID_UPDATE_DELAY);
-
+  
+  ospf_router_id_update (ospf);
+  
   return CMD_SUCCESS;
 }
 
diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c
index 0d98008..af82e97 100644
--- a/ospfd/ospf_zebra.c
+++ b/ospfd/ospf_zebra.c
@@ -68,12 +68,10 @@
   router_id_zebra = router_id.u.prefix4;
 
   ospf = ospf_lookup ();
+  
   if (ospf != NULL)
-    {
-      if (ospf->t_router_id_update == NULL)
-	OSPF_TIMER_ON (ospf->t_router_id_update, ospf_router_id_update_timer,
-                       OSPF_ROUTER_ID_UPDATE_DELAY);
-    }
+    ospf_router_id_update (ospf);
+  
   return 0;
 }
 
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c
index 3cc0202..7c9fb8f 100644
--- a/ospfd/ospfd.c
+++ b/ospfd/ospfd.c
@@ -119,22 +119,11 @@
 
       OSPF_TIMER_ON (ospf->t_router_lsa_update,
 		     ospf_router_lsa_update_timer, OSPF_LSA_UPDATE_DELAY);
+      
+      /* update ospf_interface's */
+      ospf_if_update (ospf);
     }
 }
-
-int
-ospf_router_id_update_timer (struct thread *thread)
-{
-  struct ospf *ospf = THREAD_ARG (thread);
-
-  if (IS_DEBUG_OSPF_EVENT)
-    zlog_debug ("Router-ID: Update timer fired!");
-
-  ospf->t_router_id_update = NULL;
-  ospf_router_id_update (ospf);
-
-  return 0;
-}
 
 /* For OSPF area sort by area id. */
 static int
@@ -454,7 +443,6 @@
 
   /* Cancel all timers. */
   OSPF_TIMER_OFF (ospf->t_external_lsa);
-  OSPF_TIMER_OFF (ospf->t_router_id_update);
   OSPF_TIMER_OFF (ospf->t_router_lsa_update);
   OSPF_TIMER_OFF (ospf->t_spf_calc);
   OSPF_TIMER_OFF (ospf->t_ase_calc);
@@ -834,12 +822,8 @@
 
   /* Schedule Router ID Update. */
   if (ospf->router_id_static.s_addr == 0)
-    if (ospf->t_router_id_update == NULL)
-      {
-	OSPF_TIMER_ON (ospf->t_router_id_update, ospf_router_id_update_timer,
-		       OSPF_ROUTER_ID_UPDATE_DELAY);
-      }
-
+    ospf_router_id_update (ospf);
+  
   /* Get target interface. */
   for (ALL_LIST_ELEMENTS_RO (om->iflist, node, ifp))
     {
@@ -913,8 +897,14 @@
 		  }
 
 		ospf_area_add_if (oi->area, oi);
-
-		if (if_is_operative (ifp)) 
+		
+		/* if router_id is not configured, dont bring up
+		 * interfaces.
+                 * ospf_router_id_update() will call ospf_if_update
+                 * whenever r-id is configured instead.
+                 */
+		if ((ospf->router_id_static.s_addr != 0)
+		    && if_is_operative (ifp)) 
 		  ospf_if_up (oi);
 
 		break;
@@ -961,15 +951,10 @@
 
   if (ospf != NULL)
     {
-      /* Update Router ID scheduled. */
+      /* Router-ID must be configured. */
       if (ospf->router_id_static.s_addr == 0)
-        if (ospf->t_router_id_update == NULL)
-          {
-	    OSPF_TIMER_ON (ospf->t_router_id_update,
-			   ospf_router_id_update_timer,
-			   OSPF_ROUTER_ID_UPDATE_DELAY);
-          }
-
+        return;
+      
       /* Find interfaces that not configured already.  */
       for (ALL_LIST_ELEMENTS (ospf->oiflist, node, nnode, oi))
 	{
diff --git a/ospfd/ospfd.h b/ospfd/ospfd.h
index ff27a32..ebacc1b 100644
--- a/ospfd/ospfd.h
+++ b/ospfd/ospfd.h
@@ -126,9 +126,6 @@
 #define OSPF_DD_FLAG_I                   0x04
 #define OSPF_DD_FLAG_ALL                 0x07
 
-/* Timer value. */
-#define OSPF_ROUTER_ID_UPDATE_DELAY             1
-
 #define OSPF_LS_REFRESH_SHIFT       (60 * 15)
 #define OSPF_LS_REFRESH_JITTER      60
 
@@ -249,7 +246,6 @@
   int redistribute;                     /* Num of redistributed protocols. */
 
   /* Threads. */
-  struct thread *t_router_id_update;	/* Router ID update timer. */
   struct thread *t_router_lsa_update;   /* router-LSA update timer. */
   struct thread *t_abr_task;            /* ABR task timer. */
   struct thread *t_asbr_check;          /* ASBR check timer. */
@@ -555,7 +551,6 @@
 extern struct ospf *ospf_lookup (void);
 extern struct ospf *ospf_get (void);
 extern void ospf_finish (struct ospf *);
-extern int ospf_router_id_update_timer (struct thread *);
 extern void ospf_router_id_update (struct ospf *ospf);
 extern int ospf_network_match_iface (struct connected *, struct prefix *);
 extern int ospf_network_set (struct ospf *, struct prefix_ipv4 *,
