diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog
index 77ffbe5..fa901ce 100644
--- a/ospfd/ChangeLog
+++ b/ospfd/ChangeLog
@@ -1,3 +1,10 @@
+2004-05-10 Hasso Tepper <hasso@estpak.ee>
+
+	* ospf_zebra.c, ospfd.c: Move ospf_prefix_list_update() function
+	  to ospf_zebra.c from ospfd.c and add redistribution updates if
+	  route-map is used in redistribution.
+	* ospf_main.c: Remove now useless call to ospf_init().
+
 2004-05-08 Paul Jakma <paul@dishone.st>
 
 	* ospf_zebra.c: Sync with lib/zclient changes
diff --git a/ospfd/ospf_main.c b/ospfd/ospf_main.c
index d80aa26..1ebc9e9 100644
--- a/ospfd/ospf_main.c
+++ b/ospfd/ospf_main.c
@@ -268,7 +268,6 @@
   prefix_list_init ();
 
   /* OSPFd inits. */
-  ospf_init ();
   ospf_if_init ();
   ospf_zebra_init ();
 
diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c
index 518f554..e42373c 100644
--- a/ospfd/ospf_zebra.c
+++ b/ospfd/ospf_zebra.c
@@ -32,6 +32,7 @@
 #include "memory.h"
 #include "zclient.h"
 #include "filter.h"
+#include "plist.h"
 #include "log.h"
 
 #include "ospfd/ospfd.h"
@@ -1038,7 +1039,62 @@
   if (IS_OSPF_ABR (ospf) && abr_inv)
     ospf_schedule_abr_task (ospf);
 }
-
+
+/* If prefix-list is updated, do some updates. */
+void
+ospf_prefix_list_update (struct prefix_list *plist)
+{
+  struct ospf *ospf;
+  int type;
+  int abr_inv = 0;
+  struct ospf_area *area;
+  listnode node;
+
+  /* If OSPF instatnce does not exist, return right now. */
+  ospf = ospf_lookup ();
+  if (ospf == NULL)
+    return;
+
+  /* Update all route-maps which are used as redistribution filters.
+   * They might use prefix-list.
+   */
+  for (type = 0; type < ZEBRA_ROUTE_MAX; type++)
+    {
+      if (ROUTEMAP (ospf, type) != NULL)
+        {
+          /* If route-map is not NULL it may be using this prefix list */
+          ospf_distribute_list_update (ospf, type);
+          continue;
+        }
+    }
+
+  /* Update area filter-lists. */
+  for (node = listhead (ospf->areas); node; nextnode (node))
+    if ((area = getdata (node)) != NULL)
+      {
+      	/* Update filter-list in. */
+      	if (PREFIX_NAME_IN (area))
+          if (strcmp (PREFIX_NAME_IN (area), plist->name) == 0)
+            {
+              PREFIX_LIST_IN (area) =
+                prefix_list_lookup (AFI_IP, PREFIX_NAME_IN (area));
+              abr_inv++;
+            }
+
+        /* Update filter-list out. */
+        if (PREFIX_NAME_OUT (area))
+          if (strcmp (PREFIX_NAME_OUT (area), plist->name) == 0)
+            {
+              PREFIX_LIST_IN (area) =
+                prefix_list_lookup (AFI_IP, PREFIX_NAME_OUT (area));
+              abr_inv++;
+            }
+      }
+
+  /* Schedule ABR task. */
+  if (IS_OSPF_ABR (ospf) && abr_inv)
+    ospf_schedule_abr_task (ospf);
+}
 
 struct ospf_distance *
 ospf_distance_new ()
@@ -1203,4 +1259,6 @@
 
   access_list_add_hook (ospf_filter_update);
   access_list_delete_hook (ospf_filter_update);
+  prefix_list_add_hook (ospf_prefix_list_update);
+  prefix_list_delete_hook (ospf_prefix_list_update);
 }
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c
index abf898c..3cf93a6 100644
--- a/ospfd/ospfd.c
+++ b/ospfd/ospfd.c
@@ -1638,49 +1638,6 @@
   return 1;
 }
 
-
-void
-ospf_prefix_list_update (struct prefix_list *plist)
-{
-  struct ospf *ospf;
-  struct ospf_area *area;
-  listnode node;
-  int abr_inv = 0;
-
-  /* If OSPF instatnce does not exist, return right now. */
-  ospf = ospf_lookup ();
-  if (ospf == NULL)
-    return;
-
-  /* Update Area prefix-list. */
-  for (node = listhead (ospf->areas); node; nextnode (node))
-    {
-      area = getdata (node);
-
-      /* Update filter-list in. */
-      if (PREFIX_NAME_IN (area))
-	if (strcmp (PREFIX_NAME_IN (area), plist->name) == 0)
-	  {
-	    PREFIX_LIST_IN (area) = 
-	      prefix_list_lookup (AFI_IP, PREFIX_NAME_IN (area));
-	    abr_inv++;
-	  }
-
-      /* Update filter-list out. */
-      if (PREFIX_NAME_OUT (area))
-	if (strcmp (PREFIX_NAME_OUT (area), plist->name) == 0)
-	  {
-	    PREFIX_LIST_IN (area) = 
-	      prefix_list_lookup (AFI_IP, PREFIX_NAME_OUT (area));
-	    abr_inv++;
-	  }
-    }
-
-  /* Schedule ABR tasks. */
-  if (IS_OSPF_ABR (ospf) && abr_inv)
-    ospf_schedule_abr_task (ospf);
-}
-
 void
 ospf_master_init ()
 {
@@ -1691,10 +1648,3 @@
   om->master = thread_master_create ();
   om->start_time = time (NULL);
 }
-
-void
-ospf_init ()
-{
-  prefix_list_add_hook (ospf_prefix_list_update);
-  prefix_list_delete_hook (ospf_prefix_list_update);
-}
