diff --git a/ChangeLog b/ChangeLog
index 7e0765c..ecee45f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,3 @@
-2003-06-05 Hasso Tepper <hasso@linux.ee>
-  
-  * Patch from Cougar <cougar@random.ee>: Sort interface lists (iflist)
-    by name.
-
 2003-04-13 Paul Jakma <paul@dishone.st>
 
 	* Amir: Opaque LSA bug fix for deletion of Type11's
diff --git a/lib/if.c b/lib/if.c
index cb2d086..f003754 100644
--- a/lib/if.c
+++ b/lib/if.c
@@ -46,52 +46,6 @@
   int (*if_delete_hook) (struct interface *);
 } if_master;
 
-/* Compare interface names */
-int
-if_cmp_func (struct interface *ifp1, struct interface *ifp2)
-{
-  unsigned int l1, l2;
-  long int x1, x2;
-  char *p1, *p2;
-  int res;
-
-  p1 = ifp1->name;
-  p2 = ifp2->name;
-
-  while (1) {
-    /* look up to any number */
-    l1 = strcspn(p1, "0123456789");
-    l2 = strcspn(p2, "0123456789");
-
-    /* name lengths are different -> compare names */
-    if (l1 != l2)
-      return (strcmp(p1, p2));
-
-    res = strncmp(p1, p2, l1);
-
-    /* names are different -> compare them */
-    if (res)
-      return res;
-
-    /* with identical name part, go to numeric part */
-
-    p1 += l1;
-    p2 += l1;
-
-    x1 = strtol(p1, &p1, 10);
-    x2 = strtol(p2, &p2, 10);
-
-    /* let's compare numbers now */
-    if (x1 < x2)
-      return -1;
-    if (x1 > x2)
-      return 1;
-
-    /* numbers were equal, lets do it again..
-    (it happens with name like "eth123.456:789") */
-  }
-}
-
 /* Create new interface structure. */
 struct interface *
 if_new ()
@@ -104,18 +58,13 @@
 }
 
 struct interface *
-if_create (char *name, int namelen)
+if_create ()
 {
   struct interface *ifp;
 
   ifp = if_new ();
   
-  if (name) {
-    strncpy (ifp->name, name, namelen);
-    listnode_add_sort (iflist, ifp);
-  } else {
-    listnode_add (iflist, ifp);
-  }
+  listnode_add (iflist, ifp);
   ifp->connected = list_new ();
   ifp->connected->del = (void (*) (void *)) connected_free;
 
@@ -299,7 +248,10 @@
 
   ifp = if_lookup_by_name (name);
   if (ifp == NULL)
-    ifp = if_create (name, IFNAMSIZ);
+    {
+      ifp = if_create ();
+      strncpy (ifp->name, name, IFNAMSIZ);
+    }
   return ifp;
 }
 
@@ -478,7 +430,10 @@
   ifp = if_lookup_by_name (argv[0]);
 
   if (ifp == NULL)
-    ifp = if_create (argv[0], INTERFACE_NAMSIZ);
+    {
+      ifp = if_create ();
+      strncpy (ifp->name, argv[0], INTERFACE_NAMSIZ);
+    }
   vty->index = ifp;
   vty->node = INTERFACE_NODE;
 
@@ -848,10 +803,8 @@
   iflist = list_new ();
   ifaddr_ipv4_table = route_table_init ();
 
-  if (iflist) {
-    iflist->cmp = (int (*)(void *, void *))if_cmp_func;
+  if (iflist)
     return;
-  }
 
   memset (&if_master, 0, sizeof if_master);
 }
diff --git a/lib/if.h b/lib/if.h
index c6469ea..9ffe74c 100644
--- a/lib/if.h
+++ b/lib/if.h
@@ -181,7 +181,7 @@
 
 /* Prototypes. */
 struct interface *if_new (void);
-struct interface *if_create (char *name, int namelen);
+struct interface *if_create (void);
 struct interface *if_lookup_by_index (unsigned int);
 struct interface *if_lookup_by_name (char *);
 struct interface *if_lookup_exact_address (struct in_addr);
diff --git a/lib/zclient.c b/lib/zclient.c
index f6be513..bb7747f 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -555,7 +555,10 @@
 
   /* If such interface does not exist, make new one. */
   if (! ifp)
-    ifp = if_create (ifname_tmp, IFNAMSIZ);
+    {
+      ifp = if_create ();
+      strncpy (ifp->name, ifname_tmp, IFNAMSIZ);
+    }
 
   /* Read interface's index. */
   ifp->ifindex = stream_getl (s);
diff --git a/ospfd/ospf_interface.c b/ospfd/ospf_interface.c
index d3ab01f..08bc7fb 100644
--- a/ospfd/ospf_interface.c
+++ b/ospfd/ospf_interface.c
@@ -745,7 +745,7 @@
   if (IS_DEBUG_OSPF_EVENT)
     zlog_info ("ospf_vl_new(): creating pseudo zebra interface");
 
-  vi = if_create (NULL, 0);
+  vi = if_create ();
   co = connected_new ();
   co->ifp = vi;
   listnode_add (vi->connected, co);
diff --git a/zebra/kernel_socket.c b/zebra/kernel_socket.c
index ccf8515..30e0fb1 100644
--- a/zebra/kernel_socket.c
+++ b/zebra/kernel_socket.c
@@ -218,8 +218,9 @@
 	  return -1;
 	}
 
-      ifp = if_create (sdl->sdl_data, sdl->sdl_nlen);
+      ifp = if_create ();
 
+      strncpy (ifp->name, sdl->sdl_data, sdl->sdl_nlen);
       ifp->ifindex = ifm->ifm_index;
       ifp->flags = ifm->ifm_flags;
 #if defined(__bsdi__)
