Index: console/console.c
===================================================================
--- console/console.c	(revision a116ef227199707b45480e77542bc0671352e8ed)
+++ console/console.c	(revision b1f51f05b56ec81542569d96098ccecf5b78a633)
@@ -42,5 +42,4 @@
 #include <sys/mman.h>
 
-#define CONSOLE_COUNT 12 
 #define MAX_KEYREQUESTS_BUFFERED 32
 
@@ -119,5 +118,5 @@
 
 			if (console == active_console) {
-				ipc_call_async_3(fb_info.phone, FB_PUTCHAR, ' ', scr->position_y, scr->position_x, NULL, NULL);
+				nsend_call_3(fb_info.phone, FB_PUTCHAR, ' ', scr->position_y, scr->position_x);
 			}
 	
@@ -127,5 +126,5 @@
 		default:	
 			if (console == active_console) {
-				ipc_call_async_3(fb_info.phone, FB_PUTCHAR, key, scr->position_y, scr->position_x, NULL, NULL);
+				nsend_call_3(fb_info.phone, FB_PUTCHAR, key, scr->position_y, scr->position_x);
 			}
 	
@@ -139,5 +138,6 @@
 		scr->position_y = scr->size_y - 1;
 		screenbuffer_clear_line(scr, scr->top_line++);
-		ipc_call_async(fb_info.phone, FB_SCROLL, 1, NULL, NULL);
+		if (console == active_console)
+			nsend_call(fb_info.phone, FB_SCROLL, 1);
 	}
 	
@@ -145,5 +145,5 @@
 	
 	if (console == active_console)	
-		ipc_call_async_2(fb_info.phone, FB_CURSOR_GOTO, scr->position_y, scr->position_x, NULL, NULL);
+		send_call_2(fb_info.phone, FB_CURSOR_GOTO, scr->position_y, scr->position_x);
 	
 }
@@ -193,5 +193,5 @@
 				conn = &connections[active_console];
 
-				ipc_call_async(fb_info.phone, FB_CURSOR_VISIBILITY, 0, NULL, NULL); 
+				nsend_call(fb_info.phone, FB_CURSOR_VISIBILITY, 0); 
 		
 				if (interbuffer) {
@@ -202,6 +202,5 @@
 					sync_send_2(fb_info.phone, FB_DRAW_TEXT_DATA, 0, 0, NULL, NULL);		
 				} else {
-
-					ipc_call_async_2(fb_info.phone, FB_CLEAR, 0, 0, NULL, NULL);
+					nsend_call(fb_info.phone, FB_CLEAR, 0);
 				
 					
@@ -210,12 +209,12 @@
 							d = get_field_at(&(conn->screenbuffer),i, j)->character;
 							if (d && d != ' ')
-								ipc_call_async_3(fb_info.phone, FB_PUTCHAR, d, j, i, NULL, NULL);
+								nsend_call_3(fb_info.phone, FB_PUTCHAR, d, j, i);
 						}
 
 				}
-				ipc_call_async_2(fb_info.phone, FB_CURSOR_GOTO, conn->screenbuffer.position_y, conn->screenbuffer.position_x, NULL, NULL); 
-				ipc_call_async_2(fb_info.phone, FB_SET_STYLE, conn->screenbuffer.style.fg_color, \
-						conn->screenbuffer.style.bg_color, NULL, NULL); 
-				ipc_call_async(fb_info.phone, FB_CURSOR_VISIBILITY, 1, NULL, NULL); 
+				nsend_call_2(fb_info.phone, FB_CURSOR_GOTO, conn->screenbuffer.position_y, conn->screenbuffer.position_x); 
+				nsend_call_2(fb_info.phone, FB_SET_STYLE, conn->screenbuffer.style.fg_color, \
+						conn->screenbuffer.style.bg_color); 
+				send_call(fb_info.phone, FB_CURSOR_VISIBILITY, 1); 
 
 				break;
@@ -241,5 +240,5 @@
 
 /** Default thread for new connections */
-void client_connection(ipc_callid_t iid, ipc_call_t *icall)
+static void client_connection(ipc_callid_t iid, ipc_call_t *icall)
 {
 	ipc_callid_t callid;
@@ -273,5 +272,5 @@
 			/* Send message to fb */
 			if (consnum == active_console) {
-				ipc_call_async_2(fb_info.phone, FB_CLEAR, 0, 0, NULL, NULL); 
+				send_call(fb_info.phone, FB_CLEAR, 0); 
 			}
 			
@@ -331,6 +330,6 @@
 	
 	ipc_call_sync_2(fb_info.phone, FB_GET_CSIZE, 0, 0, &(fb_info.rows), &(fb_info.cols)); 
-	ipc_call_async_2(fb_info.phone, FB_SET_STYLE, DEFAULT_FOREGROUND_COLOR, DEFAULT_BACKGROUND_COLOR, NULL, NULL); 
-	ipc_call_sync(fb_info.phone, FB_CURSOR_VISIBILITY, 1, NULL); 
+	nsend_call_2(fb_info.phone, FB_SET_STYLE, DEFAULT_FOREGROUND_COLOR, DEFAULT_BACKGROUND_COLOR); 
+	nsend_call(fb_info.phone, FB_CURSOR_VISIBILITY, 1); 
 	
 	/* Init virtual consoles */
@@ -362,6 +361,7 @@
 	async_new_connection(phonehash, 0, NULL, keyboard_events);
 	
-	ipc_call_async_2(fb_info.phone, FB_CURSOR_GOTO, 0, 0, NULL, NULL); 
-
+	nsend_call_2(fb_info.phone, FB_CURSOR_GOTO, 0, 0); 
+
+	/* Register at NS */
 	if (ipc_connect_to_me(PHONE_NS, SERVICE_CONSOLE, 0, &phonehash) != 0) {
 		return -1;
Index: console/console.h
===================================================================
--- console/console.h	(revision a116ef227199707b45480e77542bc0671352e8ed)
+++ console/console.h	(revision b1f51f05b56ec81542569d96098ccecf5b78a633)
@@ -30,4 +30,6 @@
 #define __CONSOLE_H__
 
+#define CONSOLE_COUNT 12 
+
 #define CONSOLE_GETCHAR 1026
 #define CONSOLE_PUTCHAR 1027
Index: console/gcons.c
===================================================================
--- console/gcons.c	(revision b1f51f05b56ec81542569d96098ccecf5b78a633)
+++ console/gcons.c	(revision b1f51f05b56ec81542569d96098ccecf5b78a633)
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <ipc/fb.h>
+#include <ipc/ipc.h>
+
+#include "console.h"
+
+#define CONSOLE_TOP      50
+#define CONSOLE_MARGIN   10
+
+#define STATUS_SPACE    20
+#define STATUS_WIDTH    40
+#define STATUS_HEIGHT   30
+
+static int use_gcons = 0;
+static ipcarg_t xres,yres;
+
+static int console_vp;
+static int cstatus_vp[CONSOLE_COUNT];
+
+static int fbphone;
+
+static void vp_switch(int vp)
+{
+	ipc_call_sync_2(fbphone,FB_VIEWPORT_SWITCH, vp, 0, NULL, NULL);
+}
+
+static int vp_create(unsigned int x, unsigned int y, 
+		     unsigned int width, unsgined int height)
+{
+	return  ipc_call_sync_2(fbphone, (x << 16) | y, (width << 16) | height,
+				NULL, NULL);
+}
+
+static void fb_clear(void)
+{
+	ipc_call_sync_2(fbphone, FB_CLEAR, 0, 0, NULL, NULL);
+	
+}
+
+static void fb_set_style(int fgcolor, int bgcolor)
+{
+	ipc_call_sync_2(fbphone, );
+}
+
+void gcons_change_console(int consnum)
+{
+	if (!use_gcons)
+		return;
+
+	vp_switch(console_vp);
+}
+
+void gcons_notify_char(int consnum)
+{
+	if (!use_gcons)
+		return;
+
+	vp_switch(console_vp);
+}
+
+void gcons_redraw_console(int phone)
+{
+	if (!use_gcons)
+		return;
+	
+	vp_switch(0);
+	/* Set style...*/
+	fb_clear();
+	
+	vp_switch(console_vp);
+}
+
+/** Initialize nice graphical console environment */
+void gcons_init(int phone)
+{
+	int rc;
+	int i;
+
+	fbphone = phone;
+
+	rc = ipc_call_sync_2(phone, FB_GET_RESOLUTION, 0, 0, &xres, &yres);
+	if (rc)
+		return;
+	
+	if (xres < 800 || yres < 600)
+		return;
+
+	/* create console viewport */
+	console_vp = vp_create(CONSOLE_MARGIN, CONSOLE_TOP, xres-2*CONSOLE_MARGIN,
+			       yres-(CONSOLE_TOP+CONSOLE_MARGIN));
+	if (console_vp < 0)
+		return;
+	
+	/* Create status buttons */
+	for (i=0; i < CONSOLE_COUNT; i++) {
+		cstatus_vp[i] = vp_create(phone, CONSOLE_MARGIN+i*(STATUS_WIDTH+STATUS_SPACE),
+					  CONSOLE_MARGIN, STATUS_WIDTH, STATUS_HEIGHT);
+		if (cstatus_vp[i] < 0)
+			return;
+	}
+	
+	use_gcons = 1;
+	gcons_draw_console();
+}
Index: init/init.c
===================================================================
--- init/init.c	(revision a116ef227199707b45480e77542bc0671352e8ed)
+++ init/init.c	(revision b1f51f05b56ec81542569d96098ccecf5b78a633)
@@ -160,29 +160,4 @@
 	       IPC_GET_ARG1(*data), IPC_GET_ARG2(*data));
 }
-static void test_async_ipc(void)
-{
-	ipc_call_t data;
-	int i;
-
-	printf("Sending ping\n");
-	ipc_call_async_2(PHONE_NS, NS_PING, 1, 0xbeefbee2,
-			 "Pong1", got_answer);
-	ipc_call_async_2(PHONE_NS, NS_PING, 2, 0xbeefbee4, 
-			 "Pong2", got_answer);
-	ipc_call_async_2(PHONE_NS, NS_PING, 3, 0xbeefbee4, 
-			 "Pong3", got_answer);
-	ipc_call_async_2(PHONE_NS, NS_PING, 4, 0xbeefbee4, 
-			 "Pong4", got_answer);
-	ipc_call_async_2(PHONE_NS, NS_PING, 5, 0xbeefbee4, 
-			 "Pong5", got_answer);
-	ipc_call_async_2(PHONE_NS, NS_PING, 6, 0xbeefbee4, 
-			 "Pong6", got_answer);
-	printf("Waiting forever...\n");
-	for (i=0; i<100;i++)
-		printf(".");
-	printf("\n");
-	ipc_wait_for_call(&data);
-	printf("Received call???\n");
-}
 
 
@@ -190,25 +165,4 @@
 {
 	printf("Pong\n");
-}
-static void test_advanced_ipc(void)
-{
-	int res;
-	ipcarg_t phonead;
-	ipc_callid_t callid;
-	ipc_call_t data;
-	int i;
-
-	printf("Asking 0 to connect to me...\n");
-	res = ipc_connect_to_me(0, 1, 2, &phonead);
-	printf("Result: %d - phonead: %llu\n", res, phonead);
-	for (i=0; i < 100; i++) {
-		printf("----------------\n");
-		ipc_call_async(PHONE_NS, NS_PING_SVC, 0, "prov",
-			       got_answer_2);
-		callid = ipc_wait_for_call(&data);
-		printf("Received ping\n");
-		ipc_answer_fast(callid, 0, 0, 0);
-	}
-//	callid = ipc_wait_for_call(&data, NULL);
 }
 
@@ -226,57 +180,4 @@
 	printf("Retval: %d - received: %X\n", res, result);
 	
-}
-
-static void test_hangup(void)
-{
-	int phoneid;
-	ipc_call_t data;
-	ipc_callid_t callid;
-	int i;
-
-	printf("Starting connect...\n");
-	phoneid = ipc_connect_me_to(PHONE_NS, 10, 20);
-	printf("Phoneid: %d, pinging\n", phoneid);
-	ipc_call_async_2(PHONE_NS, NS_PING, 1, 0xbeefbee2,
-			 "Pong1", got_answer);
-	printf("Hangin up\n");
-	ipc_hangup(phoneid);
-	printf("Connecting\n");
-	phoneid = ipc_connect_me_to(PHONE_NS, 10, 20);
-	printf("Newphid: %d\n", phoneid);
-	for (i=0; i < 1000; i++) {
-		if ((callid=ipc_trywait_for_call(&data)))
-			printf("callid: %d\n");
-	}
-	printf("New new phoneid: %d\n", ipc_connect_me_to(PHONE_NS, 10, 20));
-}
-
-static void test_slam(void)
-{
-	int i;
-	ipc_call_t data;
-	ipc_callid_t callid;
-
-	printf("ping");
-	ipc_call_async_2(PHONE_NS, NS_PING, 1, 0xbeefbee2,
-			 "Pong1", got_answer);
-	printf("slam");
-	ipc_call_async_2(PHONE_NS, NS_HANGUP, 1, 0xbeefbee2,
-			 "Hang", got_answer);
-	printf("ping2\n");
-	ipc_call_async_2(PHONE_NS, NS_PING, 1, 0xbeefbee2,
-			 "Ping2", got_answer);
-	
-	for (i=0; i < 1000; i++) {
-		if ((callid=ipc_trywait_for_call(&data)))
-			printf("callid: %d\n");
-	}
-	ipc_call_async_2(PHONE_NS, NS_PING, 1, 0xbeefbee2,
-			 "Pong1", got_answer);
-	printf("Closing file\n");
-	ipc_hangup(PHONE_NS);
-	ipc_call_async_2(PHONE_NS, NS_PING, 1, 0xbeefbee2,
-			 "Pong1", got_answer);
-	ipc_wait_for_call(&data);
 }
 
Index: kbd/generic/kbd.c
===================================================================
--- kbd/generic/kbd.c	(revision a116ef227199707b45480e77542bc0671352e8ed)
+++ kbd/generic/kbd.c	(revision b1f51f05b56ec81542569d96098ccecf5b78a633)
@@ -101,5 +101,5 @@
 							break;
 						}
-						ipc_call_async(phoneid, KBD_PUSHCHAR, arg1, NULL, NULL);
+						send_call(phoneid, KBD_PUSHCHAR, arg1);
 					}
 
Index: libc/generic/async.c
===================================================================
--- libc/generic/async.c	(revision a116ef227199707b45480e77542bc0671352e8ed)
+++ libc/generic/async.c	(revision b1f51f05b56ec81542569d96098ccecf5b78a633)
@@ -607,5 +607,5 @@
 	msg->wdata.active = 1; /* We may sleep in next method, but it
 				* will use it's own mechanism */
-	ipc_call_async_2(phoneid,method,arg1,arg2,msg,reply_received);
+	ipc_call_async_2(phoneid,method,arg1,arg2,msg,reply_received,1);
 
 	return (aid_t) msg;
Index: libc/generic/io/stream.c
===================================================================
--- libc/generic/io/stream.c	(revision a116ef227199707b45480e77542bc0671352e8ed)
+++ libc/generic/io/stream.c	(revision b1f51f05b56ec81542569d96098ccecf5b78a633)
@@ -78,5 +78,5 @@
 
 	for (i = 0; i < count; i++)
-		ipc_call_async_2(console_phone, CONSOLE_PUTCHAR, ((const char *)buf)[i], 0, NULL, NULL);
+		send_call(console_phone, CONSOLE_PUTCHAR, ((const char *)buf)[i]);
 	
 	return count;
Index: libc/generic/ipc.c
===================================================================
--- libc/generic/ipc.c	(revision a116ef227199707b45480e77542bc0671352e8ed)
+++ libc/generic/ipc.c	(revision b1f51f05b56ec81542569d96098ccecf5b78a633)
@@ -134,5 +134,6 @@
 
 /** Epilogue of ipc_async_send functions */
-static inline void ipc_finish_async(ipc_callid_t callid, int phoneid, async_call_t *call)
+static inline void ipc_finish_async(ipc_callid_t callid, int phoneid, 
+				    async_call_t *call, int can_preempt)
 {
 	if (callid == IPC_CALLRET_FATAL) {
@@ -149,11 +150,16 @@
 
 		call->u.msg.phoneid = phoneid;
-
-		call->ptid = psthread_get_id();
+		
 		futex_down(&async_futex);
 		list_append(&call->list, &queued_calls);
 
-		psthread_schedule_next_adv(PS_TO_MANAGER);
-		/* Async futex unlocked by previous call */
+		if (can_preempt) {
+			call->ptid = psthread_get_id();
+			psthread_schedule_next_adv(PS_TO_MANAGER);
+			/* Async futex unlocked by previous call */
+		} else {
+			call->ptid = 0;
+			futex_up(&async_futex);
+		}
 		return;
 	}
@@ -172,5 +178,5 @@
 void ipc_call_async_2(int phoneid, ipcarg_t method, ipcarg_t arg1,
 		      ipcarg_t arg2, void *private,
-		      ipc_async_callback_t callback)
+		      ipc_async_callback_t callback, int can_preempt)
 {
 	async_call_t *call;
@@ -191,5 +197,5 @@
 		IPC_SET_ARG2(call->u.msg.data, arg2);
 	}
-	ipc_finish_async(callid, phoneid, call);
+	ipc_finish_async(callid, phoneid, call, can_preempt);
 }
 
@@ -201,5 +207,5 @@
 void ipc_call_async_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
 		      ipcarg_t arg2, ipcarg_t arg3, void *private,
-		      ipc_async_callback_t callback)
+		      ipc_async_callback_t callback, int can_preempt)
 {
 	async_call_t *call;
@@ -219,5 +225,5 @@
 	callid = _ipc_call_async(phoneid, &call->u.msg.data);
 
-	ipc_finish_async(callid, phoneid, call);
+	ipc_finish_async(callid, phoneid, call, can_preempt);
 }
 
@@ -277,5 +283,6 @@
 
 		futex_up(&async_futex);
-		psthread_add_ready(call->ptid);
+		if (call->ptid)
+			psthread_add_ready(call->ptid);
 		
 		if (callid == IPC_CALLRET_FATAL) {
@@ -431,42 +438,25 @@
 }
 
-
-/** Open shared memory connection over specified phoneid
- *
- * 
- * Allocate as_area, notify the other side about our intention
- * to open the connection
- *
- * @return Connection id identifying this connection
- */
-//int ipc_dgr_open(int pohoneid, size_t bufsize)
-//{
-	/* Find new file descriptor in local descriptor table */
-	/* Create AS_area, initialize structures */
-	/* Send AS to other side, handle error states */
-
-//}
-/*
-void ipc_dgr_close(int cid)
-{
-}
-
-void * ipc_dgr_alloc(int cid, size_t size)
-{
-}
-
-void ipc_dgr_free(int cid, void *area)
-{
-
-}
-
-int ipc_dgr_send(int cid, void *area)
-{
-}
-
-
-int ipc_dgr_send_data(int cid, void *data, size_t size)
-{
-}
-
-*/
+/* Primitive functions for simple communication */
+void send_call_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
+		 ipcarg_t arg2, ipcarg_t arg3)
+{
+	ipc_call_async_3(phoneid, method, arg1, arg2, arg3, NULL, NULL, 1);
+}
+
+void send_call_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2)
+{
+	ipc_call_async_2(phoneid, method, arg1, arg2, NULL, NULL, 1);
+}
+
+void nsend_call_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
+		  ipcarg_t arg2, ipcarg_t arg3)
+{
+	ipc_call_async_3(phoneid, method, arg1, arg2, arg3, NULL, NULL, 0);
+}
+
+void nsend_call_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2)
+{
+	ipc_call_async_2(phoneid, method, arg1, arg2, NULL, NULL, 0);
+}
+
Index: libc/generic/mmap.c
===================================================================
--- libc/generic/mmap.c	(revision a116ef227199707b45480e77542bc0671352e8ed)
+++ libc/generic/mmap.c	(revision b1f51f05b56ec81542569d96098ccecf5b78a633)
@@ -41,6 +41,6 @@
 //	if (! ((flags & MAP_SHARED) ^ (flags & MAP_PRIVATE)))
 //		return NULL;
-//	if (! (flags & MAP_ANONYMOUS))
-//		return NULL;
+	if (! (flags & MAP_ANONYMOUS))
+		return NULL;
 
 	return as_area_create(start, length, prot);
Index: libc/include/ipc/ipc.h
===================================================================
--- libc/include/ipc/ipc.h	(revision a116ef227199707b45480e77542bc0671352e8ed)
+++ libc/include/ipc/ipc.h	(revision b1f51f05b56ec81542569d96098ccecf5b78a633)
@@ -67,11 +67,12 @@
 extern ipcarg_t ipc_answer(ipc_callid_t callid, ipc_call_t *call);
 
-#define ipc_call_async(phoneid,method,arg1,private, callback) (ipc_call_async_2(phoneid, method, arg1, 0, private, callback))
+#define ipc_call_async(phoneid,method,arg1,private, callback,can_preempt) (ipc_call_async_2(phoneid, method, arg1, 0, private, callback, can_preempt))
 extern void ipc_call_async_2(int phoneid, ipcarg_t method, ipcarg_t arg1,
 		      ipcarg_t arg2, void *private,
-		      ipc_async_callback_t callback);
+		      ipc_async_callback_t callback, int can_preempt);
 extern void ipc_call_async_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
 			     ipcarg_t arg2, ipcarg_t arg3, void *private,
-			     ipc_async_callback_t callback);
+			     ipc_async_callback_t callback, int can_preempt);
+
 extern int ipc_connect_to_me(int phoneid, int arg1, int arg2, ipcarg_t *phone);
 extern int ipc_connect_me_to(int phoneid, int arg1, int arg2);
@@ -81,3 +82,15 @@
 extern int ipc_forward_fast(ipc_callid_t callid, int phoneid, int method, ipcarg_t arg1);
 
+
+/* Primitve functions for IPC communication */
+void send_call_3(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2, 
+		 ipcarg_t arg3);
+void send_call_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2);
+#define send_call(ph,m,a1) send_call_2(ph,m,a1,0)
+/* These functions never preempt */
+void nsend_call_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
+		  ipcarg_t arg2, ipcarg_t arg3);
+void nsend_call_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2);
+#define nsend_call(ph,m,a1) nsend_call_2(ph,m,a1,0)
+
 #endif
