Index: uspace/lib/net/il/ip_remote.c
===================================================================
--- uspace/lib/net/il/ip_remote.c	(revision 6b8200979d8daac47bccc812f910bbf881df8e94)
+++ uspace/lib/net/il/ip_remote.c	(revision 7250d2ce7d5ccaadad51f64c98445fd7e57e998f)
@@ -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 6b8200979d8daac47bccc812f910bbf881df8e94)
+++ uspace/lib/net/include/ip_remote.h	(revision 7250d2ce7d5ccaadad51f64c98445fd7e57e998f)
@@ -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 6b8200979d8daac47bccc812f910bbf881df8e94)
+++ uspace/lib/net/include/netif_skel.h	(revision 7250d2ce7d5ccaadad51f64c98445fd7e57e998f)
@@ -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 6b8200979d8daac47bccc812f910bbf881df8e94)
+++ uspace/lib/net/include/nil_remote.h	(revision 7250d2ce7d5ccaadad51f64c98445fd7e57e998f)
@@ -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 6b8200979d8daac47bccc812f910bbf881df8e94)
+++ uspace/lib/net/netif/netif_skel.c	(revision 7250d2ce7d5ccaadad51f64c98445fd7e57e998f)
@@ -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);
 	
