Index: uspace/lib/net/il/ip_remote.c
===================================================================
--- uspace/lib/net/il/ip_remote.c	(revision ef09a7ad92d2a727ade3cc5c9a88b9b28ec9a98b)
+++ uspace/lib/net/il/ip_remote.c	(revision ee2fa30aed4921e38c357a0420357b61329be533)
@@ -123,7 +123,9 @@
  *
  */
-int ip_device_req_remote(async_sess_t *sess, device_id_t device_id)
-{
-	return generic_device_req_remote(sess, NET_IP_DEVICE, device_id, 0, 0);
+int ip_device_req_remote(async_sess_t *sess, device_id_t device_id,
+    services_t service)
+{
+	return generic_device_req_remote(sess, NET_IP_DEVICE, device_id, 0,
+	    service);
 }
 
Index: uspace/lib/net/include/ip_remote.h
===================================================================
--- uspace/lib/net/include/ip_remote.h	(revision ef09a7ad92d2a727ade3cc5c9a88b9b28ec9a98b)
+++ uspace/lib/net/include/ip_remote.h	(revision ee2fa30aed4921e38c357a0420357b61329be533)
@@ -48,5 +48,5 @@
 extern int ip_received_error_msg_remote(async_sess_t *, device_id_t, packet_t *,
     services_t, services_t);
-extern int ip_device_req_remote(async_sess_t *, device_id_t);
+extern int ip_device_req_remote(async_sess_t *, device_id_t, services_t);
 extern int ip_add_route_req_remote(async_sess_t *, device_id_t, in_addr_t,
     in_addr_t, in_addr_t);
Index: uspace/lib/net/include/netif_skel.h
===================================================================
--- uspace/lib/net/include/netif_skel.h	(revision ef09a7ad92d2a727ade3cc5c9a88b9b28ec9a98b)
+++ uspace/lib/net/include/netif_skel.h	(revision ee2fa30aed4921e38c357a0420357b61329be533)
@@ -205,5 +205,5 @@
 extern packet_t *netif_packet_get_1(size_t);
 
-extern int netif_module_start(sysarg_t);
+extern int netif_module_start(void);
 
 #endif
Index: uspace/lib/net/include/nil_remote.h
===================================================================
--- uspace/lib/net/include/nil_remote.h	(revision ef09a7ad92d2a727ade3cc5c9a88b9b28ec9a98b)
+++ uspace/lib/net/include/nil_remote.h	(revision ee2fa30aed4921e38c357a0420357b61329be533)
@@ -58,6 +58,7 @@
 	    packet_get_id(packet), sender, 0)
 
-#define nil_device_req(sess, device_id, mtu) \
-	generic_device_req_remote(sess, NET_NIL_DEVICE, device_id, mtu, 0)\
+#define nil_device_req(sess, device_id, mtu, netif_service) \
+	generic_device_req_remote(sess, NET_NIL_DEVICE, device_id, mtu, \
+	    netif_service)
 
 extern int nil_device_state_msg(async_sess_t *, device_id_t, sysarg_t);
Index: uspace/lib/net/netif/netif_skel.c
===================================================================
--- uspace/lib/net/netif/netif_skel.c	(revision ef09a7ad92d2a727ade3cc5c9a88b9b28ec9a98b)
+++ uspace/lib/net/netif/netif_skel.c	(revision ee2fa30aed4921e38c357a0420357b61329be533)
@@ -228,4 +228,29 @@
 }
 
+/** Register the device notification receiver,
+ *
+ * Register a network interface layer module as the device
+ * notification receiver.
+ *
+ * @param[in] sess      Session to the network interface layer module.
+ *
+ * @return EOK on success.
+ * @return ELIMIT if there is another module registered.
+ *
+ */
+static int register_message(async_sess_t *sess)
+{
+	fibril_rwlock_write_lock(&netif_globals.lock);
+	if (netif_globals.nil_sess != NULL) {
+		fibril_rwlock_write_unlock(&netif_globals.lock);
+		return ELIMIT;
+	}
+	
+	netif_globals.nil_sess = sess;
+	
+	fibril_rwlock_write_unlock(&netif_globals.lock);
+	return EOK;
+}
+
 /** Process the netif module messages.
  *
@@ -257,4 +282,9 @@
 		return EOK;
 	
+	async_sess_t *callback =
+	    async_callback_receive_start(EXCHANGE_SERIALIZE, call);
+	if (callback)
+		return register_message(callback);
+	
 	switch (IPC_GET_IMETHOD(*call)) {
 	case NET_NETIF_PROBE:
@@ -358,6 +388,4 @@
  * messages in an infinite loop.
  *
- * @param[in] nil_service Network interface layer service.
- *
  * @return EOK on success.
  * @return Other error codes as defined for each specific module
@@ -365,10 +393,10 @@
  *
  */
-int netif_module_start(sysarg_t nil_service)
+int netif_module_start(void)
 {
 	async_set_client_connection(netif_client_connection);
 	
 	netif_globals.sess = connect_to_service(SERVICE_NETWORKING);
-	netif_globals.nil_sess = connect_to_service(nil_service);
+	netif_globals.nil_sess = NULL;
 	netif_device_map_initialize(&netif_globals.device_map);
 	
Index: uspace/srv/hw/netif/ne2000/ne2000.c
===================================================================
--- uspace/srv/hw/netif/ne2000/ne2000.c	(revision ef09a7ad92d2a727ade3cc5c9a88b9b28ec9a98b)
+++ uspace/srv/hw/netif/ne2000/ne2000.c	(revision ee2fa30aed4921e38c357a0420357b61329be533)
@@ -404,5 +404,5 @@
 {
 	/* Start the module */
-	return netif_module_start(SERVICE_ETHERNET);
+	return netif_module_start();
 }
 
Index: uspace/srv/net/net/net.c
===================================================================
--- uspace/srv/net/net/net.c	(revision ef09a7ad92d2a727ade3cc5c9a88b9b28ec9a98b)
+++ uspace/srv/net/net/net.c	(revision ee2fa30aed4921e38c357a0420357b61329be533)
@@ -479,4 +479,5 @@
 	
 	/* Network interface layer startup */
+	services_t internet_service;
 	if (netif->nil) {
 		setting = measured_strings_find(&netif->configuration, (uint8_t *) CONF_MTU, 0);
@@ -486,12 +487,15 @@
 		
 		int mtu = setting ? strtol((char *) setting->value, NULL, 10) : 0;
-		
-		rc = nil_device_req(netif->nil->sess, netif->id, mtu);
+		rc = nil_device_req(netif->nil->sess, netif->id, mtu,
+		    netif->driver->service);
 		if (rc != EOK)
 			return rc;
-	}
+		
+		internet_service = netif->nil->service;
+	} else
+		internet_service = netif->driver->service;
 	
 	/* Inter-network layer startup */
-	rc = ip_device_req(netif->il->sess, netif->id);
+	rc = ip_device_req(netif->il->sess, netif->id, internet_service);
 	if (rc != EOK)
 		return rc;
Index: uspace/srv/net/netif/lo/lo.c
===================================================================
--- uspace/srv/net/netif/lo/lo.c	(revision ef09a7ad92d2a727ade3cc5c9a88b9b28ec9a98b)
+++ uspace/srv/net/netif/lo/lo.c	(revision ee2fa30aed4921e38c357a0420357b61329be533)
@@ -225,5 +225,5 @@
 {
 	/* Start the module */
-	return netif_module_start(SERVICE_NILDUMMY);
+	return netif_module_start();
 }
 
