Index: contrib/arch/HelenOS.adl
===================================================================
--- contrib/arch/HelenOS.adl	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ contrib/arch/HelenOS.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -6,23 +6,38 @@
 	inst ns ns;
 	
-	/* RAM disk */
-	inst rd rd;
+	/* Loader (clonable service) */
+	inst loader loader;
 	
-	/* Klog */
+	/* Block device */
+	inst bd bd;
+	
+	/* VFS server */
+	inst vfs vfs;
+	
+	/* Console */
+	inst console console;
+	
+	/* Kernel log */
 	inst klog klog;
 	
-	/* VFS */
-	inst vfs vfs;
+	[/uspace/lib/libc/bind%ns]
+	[/uspace/lib/libc/bind%loader]
+	[/uspace/lib/libc/bind%bd]
+	[/uspace/lib/libc/bind%vfs]
+	[/uspace/lib/libc/bind%console]
+	[/uspace/lib/libc/bind%klog]
 	
-	[/uspace/lib/libc/bind%ns]
+	bind loader:ns to ns:ns;
 	
-	[/uspace/lib/libc/bind%rd]
-	bind rd:ns to ns:ns;
-	bind rd:dm_driver to devmap:dm_driver;
+	bind bd:ns to ns:ns;
+	bind bd:devmap_driver to devmap:devmap_driver;
 	
-	[/uspace/lib/libc/bind%klog]
+	bind vfs:ns to ns:ns;
+	bind vfs:bd to bd:bd;
+	bind vfs:devmap_client to devmap:devmap_client;
+	bind vfs:device to console:console;
+	
+	bind console:ns to ns:ns;
+	
 	bind klog:ns to ns:ns;
-	
-	[/uspace/lib/libc/bind%vfs]
-	bind vfs:ns to ns:ns;
 };
Index: contrib/arch/kernel/kernel.adl
===================================================================
--- contrib/arch/kernel/kernel.adl	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ contrib/arch/kernel/kernel.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -7,5 +7,5 @@
 		unative_t sys_klog(int fd, const void *buf, size_t size);
 	protocol:
-		?sys_klog*
+		?sys_klog
 };
 
@@ -17,5 +17,6 @@
 		uintptr_t sys_debug_disable_console(void);
 	protocol:
-		(?sys_debug_enable_console + ?sys_debug_disable_console)*
+		?sys_debug_enable_console +
+		?sys_debug_disable_console
 };
 
@@ -24,5 +25,5 @@
 		unative_t sys_tls_set(unative_t addr);
 	protocol:
-		?sys_tls_set*
+		?sys_tls_set
 };
 
@@ -37,5 +38,9 @@
 		unative_t sys_thread_get_id(thread_id_t *uspace_thread_id);
 	protocol:
-		(?sys_thread_create + ?sys_thread_get_id)* ; ?sys_thread_exit
+		(
+			?sys_thread_create +
+			?sys_thread_get_id
+		)* ;
+		?sys_thread_exit
 };
 
@@ -47,5 +52,6 @@
 		unative_t sys_task_get_id(task_id_t *uspace_task_id);
 	protocol:
-		(?sys_task_set_name + ?sys_task_get_id)*
+		?sys_task_set_name +
+		?sys_task_get_id
 };
 
@@ -54,5 +60,5 @@
 		unative_t sys_program_spawn_loader(char *uspace_name, size_t name_len);
 	protocol:
-		?sys_program_spawn_loader*
+		?sys_program_spawn_loader
 };
 
@@ -64,5 +70,6 @@
 		unative_t sys_futex_wakeup(uintptr_t uaddr);
 	protocol:
-		(?sys_futex_sleep_timeout + ?sys_futex_wakeup)*
+		?sys_futex_sleep_timeout +
+		?sys_futex_wakeup
 };
 
@@ -71,5 +78,5 @@
 		unative_t sys_smc_coherence(uintptr_t va, size_t size);
 	protocol:
-		?sys_smc_coherence*
+		?sys_smc_coherence
 };
 
@@ -87,5 +94,8 @@
 		unative_t sys_as_area_destroy(uintptr_t address);
 	protocol:
-		(?sys_as_area_create + ?sys_as_area_resize + ?sys_as_area_change_flags + ?sys_as_area_destroy)*
+		?sys_as_area_create +
+		?sys_as_area_resize +
+		?sys_as_area_change_flags +
+		?sys_as_area_destroy
 };
 
@@ -124,5 +134,15 @@
 		unative_t sys_ipc_poke(void);
 	protocol:
-		(?sys_ipc_call_sync_fast + ?sys_ipc_call_sync_slow + ?sys_ipc_call_async_fast + ?sys_ipc_call_async_slow + ?sys_ipc_forward_fast + ?sys_ipc_forward_slow + ?sys_ipc_answer_fast + ?sys_ipc_answer_slow + ?sys_ipc_hangup + ?sys_ipc_wait_for_call + ?sys_ipc_poke)*
+		?sys_ipc_call_sync_fast +
+		?sys_ipc_call_sync_slow +
+		?sys_ipc_call_async_fast +
+		?sys_ipc_call_async_slow +
+		?sys_ipc_forward_fast +
+		?sys_ipc_forward_slow +
+		?sys_ipc_answer_fast +
+		?sys_ipc_answer_slow +
+		?sys_ipc_hangup +
+		?sys_ipc_wait_for_call +
+		?sys_ipc_poke
 };
 
@@ -131,5 +151,5 @@
 		unative_t sys_event_subscribe(unative_t evno, unative_t method);
 	protocol:
-		?sys_event_subscribe*
+		?sys_event_subscribe
 };
 
@@ -141,5 +161,6 @@
 		unative_t sys_cap_revoke(sysarg64_t *uspace_taskid_arg, cap_t caps);
 	protocol:
-		(?sys_cap_grant + ?sys_cap_rewoke)*
+		?sys_cap_grant +
+		?sys_cap_rewoke
 };
 
@@ -163,5 +184,10 @@
 		unative_t sys_ipc_unregister_irq(inr_t inr, devno_t devno);
 	protocol:
-		(?sys_enable_iospace + ?sys_physmem_map + ?sys_device_assign_devno + ?sys_preempt_control + ?sys_ipc_register_irq + ?sys_ipc_unregister_irq)*
+		?sys_enable_iospace +
+		?sys_physmem_map +
+		?sys_device_assign_devno +
+		?sys_preempt_control +
+		?sys_ipc_register_irq +
+		?sys_ipc_unregister_irq
 };
 
@@ -173,5 +199,6 @@
 		unative_t sys_sysinfo_value(unatice_t ptr, unative_t len);
 	protocol:
-		(?sys_sysinfo_valid + ?sys_sysinfo_value)*
+		?sys_sysinfo_valid +
+		?sys_sysinfo_value
 };
 
@@ -180,5 +207,5 @@
 		unative_t sys_ipc_connect_kbox(sysarg64_t *uspace_taskid_arg);
 	protocol:
-		?sys_ipc_connect_kbox*
+		?sys_ipc_connect_kbox
 };
 
Index: contrib/arch/uspace/app/klog/klog.adl
===================================================================
--- contrib/arch/uspace/app/klog/klog.adl	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ contrib/arch/uspace/app/klog/klog.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -2,5 +2,5 @@
 	requires:
 		naming_service ns;
-		[/uspace/lib/libc/requires]
+		[/uspace/lib/libc/requires%]
 	protocol:
 		[/uspace/lib/libc/protocol] +
Index: contrib/arch/uspace/lib/libc/bind
===================================================================
--- contrib/arch/uspace/lib/libc/bind	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ contrib/arch/uspace/lib/libc/bind	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -1,3 +1,3 @@
-/* Bindings to kernel interfaces */
+/* Bind %% to kernel interfaces */
 bind %%:kernel_klog to kernel:kernel_klog;
 bind %%:kernel_console to kernel:kernel_console;
Index: contrib/arch/uspace/lib/libc/subsume
===================================================================
--- contrib/arch/uspace/lib/libc/subsume	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/lib/libc/subsume	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,16 @@
+/* Subsume %% to kernel interfaces */
+subsume %%:kernel_klog to kernel_klog;
+subsume %%:kernel_console to kernel_console;
+subsume %%:kernel_tls to kernel_tls;
+subsume %%:kernel_thread to kernel_thread;
+subsume %%:kernel_task to kernel_task;
+subsume %%:kernel_program to kernel_program;
+subsume %%:kernel_futex to kernel_futex;
+subsume %%:kernel_smc to kernel_smc;
+subsume %%:kernel_as to kernel_as;
+subsume %%:kernel_ipc to kernel_sys;
+subsume %%:kernel_event to kernel_event;
+subsume %%:kernel_cap to kernel_cap;
+subsume %%:kernel_ddi to kernel_ddi;
+subsume %%:kernel_sysinfo to kernel_sysinfo;
+subsume %%:kernel_debug to kernel_debug;
Index: contrib/arch/uspace/srv/bd/bd.adl
===================================================================
--- contrib/arch/uspace/srv/bd/bd.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/bd/bd.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,32 @@
+interface bd extends service {
+		/* Establish connection */
+		ipcarg_t ipc_m_connect_me_to(void);
+		
+		/* Share out data buffer */
+		ipcarg_t ipc_m_share_out(in ipcarg_t as_area_base, in ipcarg_t as_area_size, in ipcarg_t flags, out ipcarg_t dst_as_area_base);
+		
+		/* Get block size */
+		ipcarg_t get_block_size(out ipcarg_t block_size);
+		
+		/* Read blocks via shared data buffer */
+		ipcarg_t read_blocks(in ipcarg_t index_lower, in ipcarg_t index_upper, in ipcarg_t count);
+		
+		/* Write blocks via shared data buffer */
+		ipcarg_t write_blocks(in ipcarg_t index_lower, in ipcarg_t index_upper, in ipcarg_t count);
+		
+		/* Close connection */
+		ipcarg_t ipc_m_phone_hungup(void);
+	protocol:
+		[bd.bp]
+};
+
+architecture bd {
+	inst rd rd;
+	
+	[/uspace/lib/libc/subsume%rd]
+	
+	delegate bd to rd:bd;
+	
+	subsume rd:ns to ns;
+	subsume rd:devmap to devmap;
+};
Index: contrib/arch/uspace/srv/bd/bd.bp
===================================================================
--- contrib/arch/uspace/srv/bd/bd.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/bd/bd.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,8 @@
+?ipc_m_connect_me_to ;
+?ipc_m_share_out ;
+(
+	?get_block_size +
+	?read_blocks +
+	?write_blocks
+)* ;
+?ipc_m_phone_hungup
Index: contrib/arch/uspace/srv/bd/block_device.adl
===================================================================
--- contrib/arch/uspace/srv/bd/block_device.adl	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ 	(revision )
@@ -1,21 +1,0 @@
-interface block_device extends service {
-		/* Establish connection */
-		ipcarg_t ipc_m_connect_me_to(void);
-		
-		/* Share out data buffer */
-		ipcarg_t ipc_m_share_out(in ipcarg_t as_area_base, in ipcarg_t as_area_size, in ipcarg_t flags, out ipcarg_t dst_as_area_base);
-		
-		/* Get block size */
-		ipcarg_t get_block_size(out ipcarg_t block_size);
-		
-		/* Read blocks via shared data buffer */
-		ipcarg_t read_blocks(in ipcarg_t index_lower, in ipcarg_t index_upper, in ipcarg_t count);
-		
-		/* Write blocks via shared data buffer */
-		ipcarg_t write_blocks(in ipcarg_t index_lower, in ipcarg_t index_upper, in ipcarg_t count);
-		
-		/* Close connection */
-		ipcarg_t ipc_m_phone_hungup(void);
-	protocol:
-		[block_device.bp]
-};
Index: contrib/arch/uspace/srv/bd/block_device.bp
===================================================================
--- contrib/arch/uspace/srv/bd/block_device.bp	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ 	(revision )
@@ -1,8 +1,0 @@
-?ipc_m_connect_me_to ;
-?ipc_m_share_out ;
-(
-	?get_block_size +
-	?read_blocks +
-	?write_blocks
-)* ;
-?ipc_m_phone_hungup
Index: contrib/arch/uspace/srv/bd/rd/rd.adl
===================================================================
--- contrib/arch/uspace/srv/bd/rd/rd.adl	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ contrib/arch/uspace/srv/bd/rd/rd.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -1,9 +1,9 @@
 frame rd {
 	provides:
-		block_device bd;
+		bd bd;
 	requires:
 		[/uspace/lib/libc/requires%]
-		naming_service ns;
-		device_mapper_driver dm_driver;
+		ns ns;
+		devmap_driver devmap_driver;
 	protocol:
 		[/uspace/lib/libc/protocol] +
Index: contrib/arch/uspace/srv/devmap/device_mapper_client.bp
===================================================================
--- contrib/arch/uspace/srv/devmap/device_mapper_client.bp	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ 	(revision )
@@ -1,21 +1,0 @@
-?ipc_m_connect_me_to ;
-
-!service.ipc_m_connect_me_to /* forward */
-+
-(
-	(
-		?device_get_handle {
-			?ipc_m_data_write /* device name */
-		} +
-		
-		?device_get_name +
-		?device_null_create +
-		?device_null_destroy +
-		?device_get_count +
-		
-		?device_get_devices {
-			?ipc_m_data_read /* buffer */
-		}
-	)*
-) ;
-?ipc_m_phone_hungup
Index: contrib/arch/uspace/srv/devmap/device_mapper_driver.bp
===================================================================
--- contrib/arch/uspace/srv/devmap/device_mapper_driver.bp	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ 	(revision )
@@ -1,22 +1,0 @@
-?ipc_m_connect_me_to ;
-?driver_register {
-	tentative {
-		?ipc_m_data_write /* driver name */
-	}
-} ;
-(
-	?device_register {
-		tentative {
-			?ipc_m_data_write /* device name */
-		}
-	} +
-	
-	?device_get_handle {
-		?ipc_m_data_write /* device name */
-	} +
-	
-	?device_get_name +
-	?device_unregister +
-	?driver_unregister
-)* ;
-?ipc_m_phone_hungup
Index: contrib/arch/uspace/srv/devmap/devmap.adl
===================================================================
--- contrib/arch/uspace/srv/devmap/devmap.adl	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ contrib/arch/uspace/srv/devmap/devmap.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -1,3 +1,3 @@
-interface device_mapper_driver {
+interface devmap_driver {
 		/* Establish connection (iface is DEVMAP_DRIVER) */
 		ipcarg_t ipc_m_connect_me_to(in ipcarg_t iface);
@@ -24,8 +24,8 @@
 		ipcarg_t ipc_m_phone_hungup(void);
 	protocol:
-		[device_mapper_driver.bp]
+		[devmap_driver.bp]
 };
 
-interface device_mapper_client {
+interface devmap_client {
 		/* Establish connection (iface is DEVMAP_CLIENT) or forward to device (iface is DEVMAP_CONNECT_TO_DEVICE) */
 		ipcarg_t ipc_m_connect_me_to(in ipcarg_t iface, in ipcarg_t handle);
@@ -52,5 +52,5 @@
 		ipcarg_t ipc_m_phone_hungup(void);
 	protocol:
-		[device_mapper_client.bp]
+		[devmap_client.bp]
 	
 };
@@ -58,9 +58,9 @@
 frame devmap {
 	provides:
-		device_mapper_driver dm_driver;
-		device_mapper_client dm_client;
+		devmap_driver devmap_driver;
+		devmap_client devmap_client;
 	requires:
 		[/uspace/lib/libc/requires%]
 	protocol:
-		[devmap.bp]
+		[devmap_server.bp]
 };
Index: contrib/arch/uspace/srv/devmap/devmap.bp
===================================================================
--- contrib/arch/uspace/srv/devmap/devmap.bp	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ 	(revision )
@@ -1,1 +1,0 @@
-!ns.ipc_m_connect_to_me
Index: contrib/arch/uspace/srv/devmap/devmap_client.bp
===================================================================
--- contrib/arch/uspace/srv/devmap/devmap_client.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/devmap/devmap_client.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,21 @@
+?ipc_m_connect_me_to ;
+
+!service.ipc_m_connect_me_to /* forward */
++
+(
+	(
+		?device_get_handle {
+			?ipc_m_data_write /* device name */
+		} +
+		
+		?device_get_name +
+		?device_null_create +
+		?device_null_destroy +
+		?device_get_count +
+		
+		?device_get_devices {
+			?ipc_m_data_read /* buffer */
+		}
+	)*
+) ;
+?ipc_m_phone_hungup
Index: contrib/arch/uspace/srv/devmap/devmap_driver.bp
===================================================================
--- contrib/arch/uspace/srv/devmap/devmap_driver.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/devmap/devmap_driver.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,22 @@
+?ipc_m_connect_me_to ;
+?driver_register {
+	tentative {
+		?ipc_m_data_write /* driver name */
+	}
+} ;
+(
+	?device_register {
+		tentative {
+			?ipc_m_data_write /* device name */
+		}
+	} +
+	
+	?device_get_handle {
+		?ipc_m_data_write /* device name */
+	} +
+	
+	?device_get_name +
+	?device_unregister +
+	?driver_unregister
+)* ;
+?ipc_m_phone_hungup
Index: contrib/arch/uspace/srv/devmap/devmap_server.bp
===================================================================
--- contrib/arch/uspace/srv/devmap/devmap_server.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/devmap/devmap_server.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,1 @@
+!ns.ipc_m_connect_to_me /* devmap */
Index: contrib/arch/uspace/srv/fs/devfs/devfs.adl
===================================================================
--- contrib/arch/uspace/srv/fs/devfs/devfs.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/fs/devfs/devfs.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,13 @@
+frame devfs {
+	provides:
+		fs fs
+	requires:
+		[/uspace/lib/libc/requires%]
+		vfs vfs;
+		ns ns;
+		devmap_client devmap_client;
+		service device;
+	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 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ 	(revision )
@@ -1,66 +1,0 @@
-[/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.VFS_OUT_MOUNTED {
-			?fs.IPC_M_DATA_WRITE /* mount options */
-		} +
-		
-		?fs.VFS_OUT_MOUNT +
-		
-		?fs.VFS_OUT_LOOKUP {
-			(
-				[/uspace/lib/libc/fnc.devmap_device_get_handle] ;
-				[/uspace/lib/libc/fnc.devmap_device_connect]
-			) +
-			NULL
-		} +
-		
-		?fs.VFS_OUT_READ {
-			?fs.IPC_M_DATA_READ /* payload */ {
-				(
-					!dev.VFS_OUT_READ ;
-					!dev.IPC_M_DATA_READ /* forwarded */
-				) +
-				(
-					[/uspace/lib/libc/fnc.devmap_device_get_count] ;
-					[/uspace/lib/libc/fnc.devmap_device_get_devices]
-				)
-			}
-		} +
-		
-		?fs.VFS_OUT_WRITE {
-			?fs.IPC_M_DATA_WRITE /* payload */ {
-				(
-					!dev.VFS_OUT_WRITE ;
-					!dev.IPC_M_DATA_WRITE /* forwarded */
-				)
-			} +
-			NULL
-		} +
-		
-		?fs.VFS_OUT_TRUNCATE +
-		
-		?fs.VFS_OUT_CLOSE {
-			!dev.IPC_M_PHONE_HUNGUP
-		} +
-		
-		?fs.VFS_OUT_DESTROY +
-		
-		?fs.VFS_OUT_OPEN_NODE {
-			[/uspace/lib/libc/fnc.devmap_device_connect] +
-			NULL
-		} +
-		
-		?fs.VFS_OUT_STAT {
-			?IPC_M_DATA_READ /* struct stat */
-		} +
-		
-		?fs.VFS_OUT_SYNC
-		
-	)* ;
-	?fs.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 ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/fs/devfs/devfs_server.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,65 @@
+[/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
Index: contrib/arch/uspace/srv/fs/fat/fat.adl
===================================================================
--- contrib/arch/uspace/srv/fs/fat/fat.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/fs/fat/fat.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,12 @@
+frame fat {
+	provides:
+		fs fs
+	requires:
+		[/uspace/lib/libc/requires%]
+		vfs vfs;
+		ns ns;
+		bd bd;
+	protocol:
+		[/uspace/lib/libc/protocol] +
+		[fat_server.bp]
+};
Index: contrib/arch/uspace/srv/fs/fat/fat.bp
===================================================================
--- contrib/arch/uspace/srv/fs/fat/fat.bp	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ 	(revision )
@@ -1,45 +1,0 @@
-!ns.IPC_M_CONNECT_ME_TO /* vfs */ ;
-[/uspace/lib/libfs/fnc.fs_register] ;
-(
-	?fs.IPC_M_CONNECT_ME_TO ;
-	(
-		?fs.VFS_OUT_MOUNTED {
-			?fs.IPC_M_DATA_WRITE /* mount options */
-		} +
-		
-		?fs.VFS_OUT_MOUNT {
-			[/uspace/lib/libfs/fnc.libfs_mount]
-		} +
-		
-		?fs.VFS_OUT_LOOKUP {
-			[/uspace/lib/libfs/fnc.libfs_lookup]
-		} +
-		
-		?fs.VFS_OUT_READ {
-			?fs.IPC_M_DATA_READ /* payload */
-		} +
-		
-		?fs.VFS_OUT_WRITE {
-			?fs.IPC_M_DATA_WRITE /* payload */
-		} +
-		
-		?fs.VFS_OUT_TRUNCATE +
-		
-		?fs.VFS_OUT_CLOSE +
-		
-		?fs.VFS_OUT_DESTROY +
-		
-		?fs.VFS_OUT_OPEN_NODE {
-			[/uspace/lib/libfs/fnc.libfs_open_node]
-		} +
-		
-		?fs.VFS_OUT_STAT {
-			[/uspace/lib/libfs/fnc.libfs_stat]
-		} +
-		
-		?fs.VFS_OUT_SYNC
-		
-	)* ;
-	?fs.IPC_M_PHONE_HUNGUP
-)* ;
-!vfs.IPC_M_PHONE_HUNGUP
Index: contrib/arch/uspace/srv/fs/fat/fat_server.bp
===================================================================
--- contrib/arch/uspace/srv/fs/fat/fat_server.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/fs/fat/fat_server.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,45 @@
+!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.mount {
+			[/uspace/lib/libfs/fnc.libfs_mount]
+		} +
+		
+		?fs.lookup {
+			[/uspace/lib/libfs/fnc.libfs_lookup]
+		} +
+		
+		?fs.open_node {
+			[/uspace/lib/libfs/fnc.libfs_open_node]
+		} +
+		
+		?fs.read {
+			tentative {
+				?fs.ipc_m_data_read /* payload */
+			}
+		} +
+		
+		?fs.write {
+			tentative {
+				?fs.ipc_m_data_write /* payload */
+			}
+		} +
+		
+		?fs.stat {
+			[/uspace/lib/libfs/fnc.libfs_stat]
+		} +
+		
+		?fs.truncate +
+		?fs.close +
+		?fs.destroy +
+		?fs.sync
+	)* ;
+	?fs.ipc_m_phone_hungup
+)* ;
+!vfs.ipc_m_phone_hungup
Index: contrib/arch/uspace/srv/fs/tmpfs/tmpfs.adl
===================================================================
--- contrib/arch/uspace/srv/fs/tmpfs/tmpfs.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/fs/tmpfs/tmpfs.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,12 @@
+frame tmpfs {
+	provides:
+		fs fs
+	requires:
+		[/uspace/lib/libc/requires%]
+		vfs vfs;
+		ns ns;
+		bd bd;
+	protocol:
+		[/uspace/lib/libc/protocol] +
+		[tmpfs_server.bp]
+};
Index: contrib/arch/uspace/srv/fs/tmpfs/tmpfs.bp
===================================================================
--- contrib/arch/uspace/srv/fs/tmpfs/tmpfs.bp	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ 	(revision )
@@ -1,45 +1,0 @@
-!ns.IPC_M_CONNECT_ME_TO /* vfs */ ;
-[/uspace/lib/libfs/fnc.fs_register] ;
-(
-	?fs.IPC_M_CONNECT_ME_TO ;
-	(
-		?fs.VFS_OUT_MOUNTED {
-			?fs.IPC_M_DATA_WRITE /* mount options */
-		} +
-		
-		?fs.VFS_OUT_MOUNT {
-			[/uspace/lib/libfs/fnc.libfs_mount]
-		} +
-		
-		?fs.VFS_OUT_LOOKUP {
-			[/uspace/lib/libfs/fnc.libfs_lookup]
-		} +
-		
-		?fs.VFS_OUT_READ {
-			?fs.IPC_M_DATA_READ /* payload */
-		} +
-		
-		?fs.VFS_OUT_WRITE {
-			?fs.IPC_M_DATA_WRITE /* payload */
-		} +
-		
-		?fs.VFS_OUT_TRUNCATE +
-		
-		?fs.VFS_OUT_CLOSE +
-		
-		?fs.VFS_OUT_DESTROY +
-		
-		?fs.VFS_OUT_OPEN_NODE {
-			[/uspace/lib/libfs/fnc.libfs_open_node]
-		} +
-		
-		?fs.VFS_OUT_STAT {
-			[/uspace/lib/libfs/fnc.libfs_stat]
-		} +
-		
-		?fs.VFS_OUT_SYNC
-		
-	)* ;
-	?fs.IPC_M_PHONE_HUNGUP
-)* ;
-!vfs.IPC_M_PHONE_HUNGUP
Index: contrib/arch/uspace/srv/fs/tmpfs/tmpfs_server.bp
===================================================================
--- contrib/arch/uspace/srv/fs/tmpfs/tmpfs_server.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/fs/tmpfs/tmpfs_server.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,45 @@
+!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.mount {
+			[/uspace/lib/libfs/fnc.libfs_mount]
+		} +
+		
+		?fs.lookup {
+			[/uspace/lib/libfs/fnc.libfs_lookup]
+		} +
+		
+		?fs.open_node {
+			[/uspace/lib/libfs/fnc.libfs_open_node]
+		} +
+		
+		?fs.read {
+			tentative {
+				?fs.ipc_m_data_read /* payload */
+			}
+		} +
+		
+		?fs.write {
+			tentative {
+				?fs.ipc_m_data_write /* payload */
+			}
+		} +
+		
+		?fs.stat {
+			[/uspace/lib/libfs/fnc.libfs_stat]
+		} +
+		
+		?fs.truncate +
+		?fs.close +
+		?fs.destroy +
+		?fs.sync
+	)* ;
+	?fs.ipc_m_phone_hungup
+)* ;
+!vfs.ipc_m_phone_hungup
Index: contrib/arch/uspace/srv/kbd/event.bp
===================================================================
--- contrib/arch/uspace/srv/kbd/event.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/kbd/event.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,1 @@
+?event
Index: contrib/arch/uspace/srv/kbd/kbd.adl
===================================================================
--- contrib/arch/uspace/srv/kbd/kbd.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/kbd/kbd.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,37 @@
+interface kbd extends service {
+		/* Establish connection */
+		ipcarg_t ipc_m_connect_me_to(void);
+		
+		/* Callback connection */
+		ipcarg_t ipc_m_connect_to_me(void);
+		
+		/* Yield hardware */
+		ipcarg_t yield(void);
+		
+		/* Reclaim hardware */
+		ipcarg_t reclaim(void);
+		
+		/* Close connection */
+		ipcarg_t ipc_m_phone_hungup(void);
+	protocol:
+		[kbd.bp]
+};
+
+interface event {
+		/* Send keyboard event */
+		ipcarg_t event(in ipcarg_t type, in ipcarg_t key, in ipcarg_t mods, in ipcarg_t char);
+	protocol:
+		[event.bp]
+};
+
+frame kbd {
+	provides:
+		kbd kbd;
+	requires:
+		[/uspace/lib/libc/requires%]
+		event event;
+		ns ns;
+	protocol:
+		[/uspace/lib/libc/protocol] +
+		[kbd_server.bp]
+};
Index: contrib/arch/uspace/srv/kbd/kbd.bp
===================================================================
--- contrib/arch/uspace/srv/kbd/kbd.bp	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ contrib/arch/uspace/srv/kbd/kbd.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -1,20 +1,7 @@
+?ipc_m_connect_me_to ;
 (
-	!ns.IPC_M_CONNECT_ME_TO /* cir */ +
-	NULL
-) ;
-!ns.IPC_M_CONNECT_TO_ME ;
-(
-	?kbd.IPC_M_CONNECT_ME_TO ;
-	(
-		(
-			?kbd.KBD_YIELD +
-			?kbd.KBD_RECLAIM +
-		) |
-		!console.KBD_EVENT
-	)* ;
-	?kbd.IPC_M_PHONE_HUNGUP
+	?ipc_m_connect_to_me +
+	?yield +
+	?reclam
 )* ;
-(
-	!cir.IPC_M_PHONE_HUNGUP +
-	NULL
-)
+?ipc_m_phone_hungup
Index: contrib/arch/uspace/srv/kbd/kbd_server.bp
===================================================================
--- contrib/arch/uspace/srv/kbd/kbd_server.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/kbd/kbd_server.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,4 @@
+tentative {
+	!ns.ipc_m_connect_me_to /* cir */
+} ;
+!ns.ipc_m_connect_to_me /* kbd */
Index: contrib/arch/uspace/srv/loader/loader.adl
===================================================================
--- contrib/arch/uspace/srv/loader/loader.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/loader/loader.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,38 @@
+interface loader extends service {
+		/* Establish connection */
+		ipcarg_t ipc_m_connect_me_to(void);
+		
+		/* Set task pathname */
+		ipcarg_t set_pathname(in_copy string pathname);
+		
+		/* Set task arguments */
+		ipcarg_t set_args(in_copy stream args);
+		
+		/* Set task initial files */
+		ipcarg_t set_files(in_copy stream files);
+		
+		/* Get task ID */
+		ipcarg_t get_taskid(out_copy stream id);
+		
+		/* Load binary */
+		ipcarg_t load(void);
+		
+		/* Run binary */
+		ipcarg_t run(void);
+		
+		/* Close connection */
+		ipcarg_t ipc_m_phone_hungup(void);
+	protocol:
+		[loader.bp]
+};
+
+frame loader {
+	provides:
+		loader loader;
+	requires:
+		[/uspace/lib/libc/requires%]
+		ns ns;
+	protocol:
+		[/uspace/lib/libc/protocol] +
+		[loader_server.bp]
+};
Index: contrib/arch/uspace/srv/loader/loader.bp
===================================================================
--- contrib/arch/uspace/srv/loader/loader.bp	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ contrib/arch/uspace/srv/loader/loader.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -1,25 +1,23 @@
-!ns.NS_ID_INTRO ;
-!ns.IPC_M_CONNECT_TO_ME ;
 (
-	?loader.LOADER_GET_TASKID {
-		?loader.IPC_M_DATA_READ /* task id */
+	?get_taskid {
+		?ipc_m_data_read /* task ID */
 	} +
 	
-	?loader.LOADER_SET_PATHNAME {
-		?loader.IPC_M_DATA_WRITE /* path */
+	?set_pathname {
+		?ipc_m_data_write /* pathname */
 	} +
 	
-	?loader.LOADER_SET_ARGS {
-		?loader.IPC_M_DATA_WRITE /* arguments */
+	?set_args {
+		?ipc_m_data_write /* arguments */
 	} +
 	
-	?loader.LOADER_SET_FILES {
-		?loader.IPC_M_DATA_WRITE /* files */
+	?set_files {
+		?ipc_m_data_write /* files */
 	} +
 	
-	?loader.LOADER_LOAD
+	?load
 )* ;
 (
-	?loader.LOADER_RUN +
-	?loader.IPC_M_PHONE_HUNGUP
+	?run +
+	?ipc_m_phone_hungup
 )
Index: contrib/arch/uspace/srv/loader/loader_server.bp
===================================================================
--- contrib/arch/uspace/srv/loader/loader_server.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/loader/loader_server.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,2 @@
+!ns.id_intro ;
+!ns.ipc_m_connect_to_me /* loader */
Index: contrib/arch/uspace/srv/ns/naming_service.bp
===================================================================
--- contrib/arch/uspace/srv/ns/naming_service.bp	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ 	(revision )
@@ -1,23 +1,0 @@
-/* Every task has an implicit connection to the Naming Service,
-   thus there is no explicit ?ipc_m_connect_me_to */
-
-(
-	?ipc_m_connect_to_me {
-		tentative {
-			!loader.ipc_m_connect_to_me /* forward */
-		}
-	} +
-	
-	?ipc_m_connect_me_to {
-		tentative {
-			!service.ipc_m_connect_me_to /* forward */
-		}
-	} +
-	
-	?ipc_m_share_in +
-	?ping +
-	?task_wait +
-	?id_intro +
-	?retval
-)* ;
-?ipc_m_phone_hungup
Index: contrib/arch/uspace/srv/ns/ns.adl
===================================================================
--- contrib/arch/uspace/srv/ns/ns.adl	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ contrib/arch/uspace/srv/ns/ns.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -1,3 +1,3 @@
-interface naming_service {
+interface ns {
 		/* Register a clonable service or a generic service */
 		ipcarg_t ipc_m_connect_to_me(in ipcarg_t service);
@@ -24,10 +24,10 @@
 		ipcarg_t ipc_m_phone_hungup(void);
 	protocol:
-		[naming_service.bp]
+		[ns.bp]
 };
 
 frame ns {
 	provides:
-		naming_service ns;
+		ns ns;
 	requires:
 		[/uspace/lib/libc/requires]
Index: contrib/arch/uspace/srv/ns/ns.bp
===================================================================
--- contrib/arch/uspace/srv/ns/ns.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/ns/ns.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,23 @@
+/* Every task has an implicit connection to the Naming Service,
+   thus there is no explicit ?ipc_m_connect_me_to */
+
+(
+	?ipc_m_connect_to_me {
+		tentative {
+			!loader.ipc_m_connect_to_me /* forward */
+		}
+	} +
+	
+	?ipc_m_connect_me_to {
+		tentative {
+			!service.ipc_m_connect_me_to /* forward */
+		}
+	} +
+	
+	?ipc_m_share_in +
+	?ping +
+	?task_wait +
+	?id_intro +
+	?retval
+)* ;
+?ipc_m_phone_hungup
Index: contrib/arch/uspace/srv/pci/pci.adl
===================================================================
--- contrib/arch/uspace/srv/pci/pci.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/pci/pci.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,20 @@
+interface pci extends service {
+		/* Establish connection */
+		ipcarg_t ipc_m_connect_me_to(void);
+		
+		/* Close connection */
+		ipcarg_t ipc_m_phone_hungup(void);
+	protocol:
+		[pci.bp]
+};
+
+frame pci {
+	provides:
+		pci pci;
+	requires:
+		[/uspace/lib/libc/requires%]
+		ns ns;
+	protocol:
+		[/uspace/lib/libc/protocol] +
+		[pci_server.bp]
+};
Index: contrib/arch/uspace/srv/pci/pci.bp
===================================================================
--- contrib/arch/uspace/srv/pci/pci.bp	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ contrib/arch/uspace/srv/pci/pci.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -1,5 +1,2 @@
-!ns.IPC_M_CONNECT_TO_ME ;
-(
-	?pci.IPC_M_CONNECT_ME_TO ;
-	?pci.IPC_M_PHONE_HUNGUP
-)*
+?ipc_m_connect_me_to ;
+?ipc_m_phone_hungup
Index: contrib/arch/uspace/srv/pci/pci_server.bp
===================================================================
--- contrib/arch/uspace/srv/pci/pci_server.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/pci/pci_server.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,1 @@
+!ns.ipc_m_connect_to_me /* pci */
Index: contrib/arch/uspace/srv/vfs/vfs.adl
===================================================================
--- contrib/arch/uspace/srv/vfs/vfs.adl	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ contrib/arch/uspace/srv/vfs/vfs.adl	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -1,3 +1,3 @@
-interface vfs {
+interface vfs extends service {
 		/* Establish connection */
 		ipcarg_t ipc_m_connect_me_to(void);
@@ -51,15 +51,87 @@
 		ipcarg_t ipc_m_phone_hungup(void);
 	protocol:
-		[virtual_fs.bp]
+		[vfs.bp]
 };
 
-frame vfs {
+interface fs extends service {
+		/* Establish connection */
+		ipcarg_t ipc_m_connect_me_to(void);
+		
+		/* Notify filesystem that it was mounted */
+		ipcarg_t mounted(in ipcarg_t dev_handle, in_copy string opts);
+		
+		/* Mount filesystem */
+		ipcarg_t mount(in ipcarg_t device, in ipcarg_t flags, in_copy string point, in_copy string opts, ...);
+		
+		/* Open file by node */
+		ipcarg_t open_node(in ipcarg_t lflag, in ipcarg_t oflag, in ipcarg_t mode, ...);
+		
+		/* Lookup file */
+		ipcarg_t lookup(in ipcarg_t lflag, in ipcarg_t oflag, in ipcarg_t mode, ...);
+		
+		/* Read data from file */
+		ipcarg_t read(in ipcarg_t dev_handle, in ipcarg_t fs_index, in ipcarg_t offset, out_copy stream data);
+		
+		/* Write data to file */
+		ipcarg_t write(in ipcarg_t dev_handle, in ipcarg_t fs_index, in ipcarg_t offset, out_copy stream data);
+		
+		/* Truncate file */
+		ipcarg_t truncate(in ipcarg_t dev_handle, in ipcarg_t fs_index, in ipcarg_t size);
+		
+		/* Get directory entry metadata */
+		ipcarg_t stat(in ipcarg_t dev_handle, in ipcarg_t fs_index, out_copy stream stat);
+		
+		/* Flush file buffers */
+		ipcarg_t sync(in ipcarg_t dev_handle, in ipcarg_t fs_index);
+		
+		/* Notify on file close */
+		ipcarg_t close(in ipcarg_t dev_handle, in ipcarg_t fs_index);
+		
+		/* Close connection */
+		ipcarg_t ipc_m_phone_hungup(void);
+};
+
+frame vfs_manager {
 	provides:
 		vfs vfs;
 	requires:
 		[/uspace/lib/libc/requires%]
-		naming_service ns;
+		fs fs;
+		ns ns;
 	protocol:
 		[/uspace/lib/libc/protocol] +
-		[vfs.bp]
+		[vfs_server.bp]
 };
+
+architecture vfs {
+	inst vfs_manager vfs;
+	inst tmpfs tmpfs;
+	inst fat fat;
+	inst devfs devfs;
+	
+	bind vfs:fs to tmpfs:fs;
+	bind vfs:fs to fat:fs;
+	bind vfs:fs to devfs:fs;
+	
+	bind tmpfs:vfs to vfs:vfs;
+	bind fat:vfs to vfs:vfs;
+	bind devfs:vfs to vfs:vfs;
+	
+	delegate vfs to vfs:vfs;
+	
+	[/uspace/lib/libc/subsume%vfs]
+	[/uspace/lib/libc/subsume%tmpfs]
+	[/uspace/lib/libc/subsume%fat]
+	[/uspace/lib/libc/subsume%devfs]
+	
+	subsume vfs:ns to ns;
+	subsume tmpfs:ns to ns;
+	subsume fat:ns to ns;
+	subsume devfs:ns to ns;
+	
+	subsume tmpfs:bd to bd;
+	subsume fat:bd to bd;
+	
+	subsume devfs:devmap_client to devmap_client;
+	subsume devfs:device to device;
+};
Index: contrib/arch/uspace/srv/vfs/vfs.bp
===================================================================
--- contrib/arch/uspace/srv/vfs/vfs.bp	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ contrib/arch/uspace/srv/vfs/vfs.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -1,1 +1,179 @@
-!ns.ipc_m_connect_to_me
+?ipc_m_connect_me_to ;
+(
+	?register {
+		?ipc_m_data_write /* fs name */ ;
+		tentative {
+			/* callback connection */
+			?ipc_m_connect_to_me ;
+			?ipc_m_share_in
+		}
+	} +
+	
+	?mount {
+		?ipc_m_data_write /* mount point */ ;
+		tentative {
+			?ipc_m_data_write /* mount options */ ;
+			tentative {
+				?ipc_m_data_write /* fs name */ ;
+				tentative {
+					?ipc_m_ping ;
+					tentative {
+						(
+							/* root fs */
+							!fs.mounted ;
+							!fs.ipc_m_data_write /* mount options */
+						) +
+						(
+							/* non-root fs */
+							tentative {
+								[fnc.vfs_lookup_internal] ;
+								tentative {
+									[fnc.vfs_grab_phone] ;
+									[fnc.vfs_grab_phone] ;
+									!fs.mount ;
+									!fs.ipc_m_connection_clone ;
+									[fnc.vfs_release_phone] ;
+									tentative {
+										!fs.vfs_m_data_write /* mount options */
+									}
+									[fnc.vfs_release_phone] ;
+								}
+							}
+						)
+					}
+				}
+			}
+		}
+	} +
+	
+	?open {
+		tentative {
+			?ipc_m_data_write /* path */ ;
+			tentative {
+				[fnc.vfs_lookup_internal] ;
+				tentative {
+					[fnc.vfs_grab_phone] ;
+					!fs.truncate ;
+					[fnc.vfs_release_phone]
+				}
+			}
+		}
+	} +
+	
+	?open_node {
+		[fnc.vfs_open_node_internal] ;
+		tentative {
+			[fnc.vfs_grab_phone] ;
+			!fs.truncate ;
+			[fnc.vfs_release_phone]
+		}
+	} +
+	
+	?close {
+		tentative {
+			[fnc.vfs_grab_phone] ;
+			!fs.close ;
+			[fnc.vfs_release_phone]
+		}
+	} +
+	
+	?read {
+		tentative {
+			?ipc_m_data_read {
+				[fnc.vfs_grab_phone] ;
+				!fs.read ;
+				!fs.ipc_m_data_read /* forward payload */ ;
+				[fnc.vfs_release_phone]
+			}
+		}
+	} +
+	
+	?write {
+		tentative {
+			?ipc_m_data_write {
+				[fnc.vfs_grab_phone] ;
+				!fs.write ;
+				!fs.ipc_m_data_write /* forward payload */ ;
+				[fnc.vfs_release_phone]
+			}
+		}
+	} +
+	
+	?truncate {
+		tentative {
+			[fnc.vfs_grab_phone] ;
+			!fs.truncate ;
+			[fnc.vfs_release_phone]
+		}
+	} +
+	
+	?fstat {
+		tentative {
+			?ipc_m_data_read /* struct stat */ {
+				[fnc.vfs_grab_phone] ;
+				!fs.stat ;
+				!fs.ipc_m_data_read /* forward struct stat */ ;
+				[fnc.vfs_release_phone]
+			}
+		}
+	} +
+	
+	?stat {
+		?ipc_m_data_write /* path */ ;
+		tentative {
+			?ipc_m_data_read /* struct stat */ {
+				[fnc.vfs_lookup_internal] ;
+				tentative {
+					!fs.stat ;
+					!fs.ipc_m_data_read /* forward struct stat */
+				}
+			}
+		}
+	} +
+	
+	?mkdir {
+		?ipc_m_data_write /* path */ ;
+		tentative {
+			[fnc.vfs_lookup_internal]
+		}
+	} +
+	
+	?unlink {
+		?ipc_m_data_write /* path */ ;
+		tentative {
+			[fnc.vfs_lookup_internal]
+		}
+	} +
+	
+	?rename {
+		?ipc_m_data_write /* old path */ ;
+		tentative {
+			?ipc_m_data_write /* new path */ ;
+			tentative {
+				[fnc.vfs_lookup_internal] /* lookup old path */ ;
+				tentative {
+					[fnc.vfs_lookup_internal] /* lookup parent of new path */ ;
+					tentative {
+						[fnc.vfs_lookup_internal] /* destroy old link for the new path */ ;
+						tentative {
+							[fnc.vfs_lookup_internal] /* create new link for the new path */ ;
+							tentative {
+								[fnc.vfs_lookup_internal] /* destroy link for the old path */
+							}
+						}
+					}
+				}
+			}
+		}
+	} +
+	
+	?sync {
+		tentative {
+			!fs.sync
+		}
+	} +
+	
+	?seek
+	
+)* ;
+?ipc_m_phne_hungup
Index: contrib/arch/uspace/srv/vfs/vfs_server.bp
===================================================================
--- contrib/arch/uspace/srv/vfs/vfs_server.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
+++ contrib/arch/uspace/srv/vfs/vfs_server.bp	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -0,0 +1,1 @@
+!ns.ipc_m_connect_to_me /* vfs */
Index: contrib/arch/uspace/srv/vfs/virtual_fs.bp
===================================================================
--- contrib/arch/uspace/srv/vfs/virtual_fs.bp	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ 	(revision )
@@ -1,179 +1,0 @@
-?ipc_m_connect_me_to ;
-(
-	?register {
-		?ipc_m_data_write /* fs name */ ;
-		tentative {
-			/* callback connection */
-			?ipc_m_connect_to_me ;
-			?ipc_m_share_in
-		}
-	} +
-	
-	?mount {
-		?ipc_m_data_write /* mount point */ ;
-		tentative {
-			?ipc_m_data_write /* mount options */ ;
-			tentative {
-				?ipc_m_data_write /* fs name */ ;
-				tentative {
-					?ipc_m_ping ;
-					tentative {
-						(
-							/* root fs */
-							!fs.mounted ;
-							!fs.ipc_m_data_write /* mount options */
-						) +
-						(
-							/* non-root fs */
-							tentative {
-								[fnc.vfs_lookup_internal] ;
-								tentative {
-									[fnc.vfs_grab_phone] ;
-									[fnc.vfs_grab_phone] ;
-									!fs.mount ;
-									!fs.ipc_m_connection_clone ;
-									[fnc.vfs_release_phone] ;
-									tentative {
-										!fs.vfs_m_data_write /* mount options */
-									}
-									[fnc.vfs_release_phone] ;
-								}
-							}
-						)
-					}
-				}
-			}
-		}
-	} +
-	
-	?open {
-		tentative {
-			?ipc_m_data_write /* path */ ;
-			tentative {
-				[fnc.vfs_lookup_internal] ;
-				tentative {
-					[fnc.vfs_grab_phone] ;
-					!fs.truncate ;
-					[fnc.vfs_release_phone]
-				}
-			}
-		}
-	} +
-	
-	?open_node {
-		[fnc.vfs_open_node_internal] ;
-		tentative {
-			[fnc.vfs_grab_phone] ;
-			!fs.truncate ;
-			[fnc.vfs_release_phone]
-		}
-	} +
-	
-	?close {
-		tentative {
-			[fnc.vfs_grab_phone] ;
-			!fs.close ;
-			[fnc.vfs_release_phone]
-		}
-	} +
-	
-	?read {
-		tentative {
-			?ipc_m_data_read {
-				[fnc.vfs_grab_phone] ;
-				!fs.read ;
-				!fs.ipc_m_data_read /* forward payload */ ;
-				[fnc.vfs_release_phone]
-			}
-		}
-	} +
-	
-	?write {
-		tentative {
-			?ipc_m_data_write {
-				[fnc.vfs_grab_phone] ;
-				!fs.write ;
-				!fs.ipc_m_data_write /* forward payload */ ;
-				[fnc.vfs_release_phone]
-			}
-		}
-	} +
-	
-	?truncate {
-		tentative {
-			[fnc.vfs_grab_phone] ;
-			!fs.truncate ;
-			[fnc.vfs_release_phone]
-		}
-	} +
-	
-	?fstat {
-		tentative {
-			?ipc_m_data_read /* struct stat */ {
-				[fnc.vfs_grab_phone] ;
-				!fs.stat ;
-				!fs.ipc_m_data_read /* forward struct stat */ ;
-				[fnc.vfs_release_phone]
-			}
-		}
-	} +
-	
-	?stat {
-		?ipc_m_data_write /* path */ ;
-		tentative {
-			?ipc_m_data_read /* struct stat */ {
-				[fnc.vfs_lookup_internal] ;
-				tentative {
-					!fs.stat ;
-					!fs.ipc_m_data_read /* forward struct stat */
-				}
-			}
-		}
-	} +
-	
-	?mkdir {
-		?ipc_m_data_write /* path */ ;
-		tentative {
-			[fnc.vfs_lookup_internal]
-		}
-	} +
-	
-	?unlink {
-		?ipc_m_data_write /* path */ ;
-		tentative {
-			[fnc.vfs_lookup_internal]
-		}
-	} +
-	
-	?rename {
-		?ipc_m_data_write /* old path */ ;
-		tentative {
-			?ipc_m_data_write /* new path */ ;
-			tentative {
-				[fnc.vfs_lookup_internal] /* lookup old path */ ;
-				tentative {
-					[fnc.vfs_lookup_internal] /* lookup parent of new path */ ;
-					tentative {
-						[fnc.vfs_lookup_internal] /* destroy old link for the new path */ ;
-						tentative {
-							[fnc.vfs_lookup_internal] /* create new link for the new path */ ;
-							tentative {
-								[fnc.vfs_lookup_internal] /* destroy link for the old path */
-							}
-						}
-					}
-				}
-			}
-		}
-	} +
-	
-	?sync {
-		tentative {
-			!fs.sync
-		}
-	} +
-	
-	?seek
-	
-)* ;
-?ipc_m_phne_hungup
Index: contrib/highlight/bp.syntax
===================================================================
--- contrib/highlight/bp.syntax	(revision 1993f9a68ff3c23290d79db8b57db81b201848c4)
+++ contrib/highlight/bp.syntax	(revision ea5f46d1766b374ee3bb1b470e3f08c441077c0b)
@@ -4,6 +4,4 @@
 context default
 	keyword whole NULL yellow
-	keyword whole try yellow
-	keyword whole catch yellow
 	keyword whole tentative yellow
 	
