Index: contrib/arch/uspace/srv/fs/devfs/devfs.adl
===================================================================
--- contrib/arch/uspace/srv/fs/devfs/devfs.adl	(revision ee5b35ae379e113674cdd8fd1e5e1ba75d7ef2b6)
+++ contrib/arch/uspace/srv/fs/devfs/devfs.adl	(revision 51d4040da629a823b7cc291e0c50eb3402dfb20d)
@@ -1,5 +1,10 @@
+interface devfs extends fs {
+	protocol:
+		[devfs.bp]
+};
+
 frame devfs {
 	provides:
-		fs fs;
+		devfs devfs;
 	requires:
 		[/uspace/lib/libc/requires]
@@ -9,5 +14,5 @@
 		service device;
 	protocol:
-		[/uspace/lib/libc/protocol] +
+		[/uspace/lib/libc/protocol] |
 		[devfs_server.bp]
 };
Index: contrib/arch/uspace/srv/fs/devfs/devfs.bp
===================================================================
--- contrib/arch/uspace/srv/fs/devfs/devfs.bp	(revision 51d4040da629a823b7cc291e0c50eb3402dfb20d)
+++ contrib/arch/uspace/srv/fs/devfs/devfs.bp	(revision 51d4040da629a823b7cc291e0c50eb3402dfb20d)
@@ -0,0 +1,62 @@
+(
+	?ipc_m_connect_me_to ;
+	(
+		?mounted {
+			?ipc_m_data_write /* mount options */
+		} +
+		
+		?lookup {
+			tentative {
+				[/uspace/lib/libc/fnc.devmap_device_get_handle] ;
+				tentative {
+					[/uspace/lib/libc/fnc.devmap_device_connect]
+				}
+			}
+		} +
+		
+		?open_node {
+			tentative {
+				[/uspace/lib/libc/fnc.devmap_device_connect]
+			}
+		} +
+		
+		?read {
+			tentative {
+				?ipc_m_data_read /* payload */ {
+					!device.read {
+						!device.ipc_m_data_read /* forward */
+					}
+				} +
+				(
+					[/uspace/lib/libc/fnc.devmap_device_get_count] ;
+					[/uspace/lib/libc/fnc.devmap_device_get_devices]
+				)
+			}
+		} +
+		
+		?write {
+			tentative {
+				?ipc_m_data_write /* payload */ {
+					!device.write {
+						!device.ipc_m_data_write /* forward */
+					}
+				}
+			}
+		} +
+		
+		?stat {
+			?ipc_m_data_read /* struct data */
+		} +
+		
+		?close {
+			!device.ipc_m_phone_hungup
+		} +
+		
+		?mount +
+		?truncate +
+		?destroy +
+		?sync
+	)* ;
+	?ipc_m_phone_hungup
+)* ;
+!vfs.ipc_m_phone_hungup
Index: contrib/arch/uspace/srv/fs/devfs/devfs_server.bp
===================================================================
--- contrib/arch/uspace/srv/fs/devfs/devfs_server.bp	(revision ee5b35ae379e113674cdd8fd1e5e1ba75d7ef2b6)
+++ contrib/arch/uspace/srv/fs/devfs/devfs_server.bp	(revision 51d4040da629a823b7cc291e0c50eb3402dfb20d)
@@ -1,65 +1,3 @@
 [/uspace/lib/libc/fnc.devmap_get_phone] ;
 !ns.ipc_m_connect_me_to /* vfs */ ;
-[/uspace/lib/libfs/fnc.fs_register] ;
-(
-	?fs.ipc_m_connect_me_to ;
-	(
-		?fs.mounted {
-			?fs.ipc_m_data_write /* mount options */
-		} +
-		
-		?fs.lookup {
-			tentative {
-				[/uspace/lib/libc/fnc.devmap_device_get_handle] ;
-				tentative {
-					[/uspace/lib/libc/fnc.devmap_device_connect]
-				}
-			}
-		} +
-		
-		?fs.open_node {
-			tentative {
-				[/uspace/lib/libc/fnc.devmap_device_connect]
-			}
-		} +
-		
-		?fs.read {
-			tentative {
-				?fs.ipc_m_data_read /* payload */ {
-					!device.read {
-						!device.ipc_m_data_read /* forward */
-					}
-				} +
-				(
-					[/uspace/lib/libc/fnc.devmap_device_get_count] ;
-					[/uspace/lib/libc/fnc.devmap_device_get_devices]
-				)
-			}
-		} +
-		
-		?fs.write {
-			tentative {
-				?fs.ipc_m_data_write /* payload */ {
-					!device.write {
-						!device.ipc_m_data_write /* forward */
-					}
-				}
-			}
-		} +
-		
-		?fs.stat {
-			?fs.ipc_m_data_read /* struct data */
-		} +
-		
-		?fs.close {
-			!device.ipc_m_phone_hungup
-		} +
-		
-		?fs.mount +
-		?fs.truncate +
-		?fs.destroy +
-		?fs.sync
-	)* ;
-	?fs.ipc_m_phone_hungup
-)* ;
-!vfs.ipc_m_phone_hungup
+[/uspace/lib/libfs/fnc.fs_register]
