Index: uspace/app/vdemo/vdemo.c
===================================================================
--- uspace/app/vdemo/vdemo.c	(revision 290a0f0bca64b949d48d6b8a5d58988fc13ad577)
+++ uspace/app/vdemo/vdemo.c	(revision fa98b26a748eee56958a2e58ecc772de5507a6be)
@@ -110,5 +110,5 @@
 {
 	if (argc >= 2) {
-		window_t *main_window = window_open(argv[1], true, true, "vdemo");
+		window_t *main_window = window_open(argv[1], true, true, "vdemo", 0, 0);
 		if (!main_window) {
 			printf("Cannot open main window.\n");
Index: uspace/app/vlaunch/vlaunch.c
===================================================================
--- uspace/app/vlaunch/vlaunch.c	(revision 290a0f0bca64b949d48d6b8a5d58988fc13ad577)
+++ uspace/app/vlaunch/vlaunch.c	(revision fa98b26a748eee56958a2e58ecc772de5507a6be)
@@ -98,5 +98,5 @@
 	
 	winreg = argv[1];
-	window_t *main_window = window_open(argv[1], true, true, "vlaunch");
+	window_t *main_window = window_open(argv[1], true, true, "vlaunch", 0, 0);
 	if (!main_window) {
 		printf("Cannot open main window.\n");
Index: uspace/app/vterm/vterm.c
===================================================================
--- uspace/app/vterm/vterm.c	(revision 290a0f0bca64b949d48d6b8a5d58988fc13ad577)
+++ uspace/app/vterm/vterm.c	(revision fa98b26a748eee56958a2e58ecc772de5507a6be)
@@ -49,5 +49,5 @@
 	}
 	
-	window_t *main_window = window_open(argv[1], true, true, "vterm");
+	window_t *main_window = window_open(argv[1], true, true, "vterm", 0, 0);
 	if (!main_window) {
 		printf("%s: Cannot open main window.\n", NAME);
Index: uspace/lib/c/generic/io/window.c
===================================================================
--- uspace/lib/c/generic/io/window.c	(revision 290a0f0bca64b949d48d6b8a5d58988fc13ad577)
+++ uspace/lib/c/generic/io/window.c	(revision fa98b26a748eee56958a2e58ecc772de5507a6be)
@@ -40,8 +40,9 @@
 #include <stdio.h>
 
-int win_register(async_sess_t *sess, service_id_t *in, service_id_t *out)
+int win_register(async_sess_t *sess, service_id_t *in, service_id_t *out, 
+    sysarg_t x_offset, sysarg_t y_offset)
 {
 	async_exch_t *exch = async_exchange_begin(sess);
-	int ret = async_req_0_2(exch, WINDOW_REGISTER, in, out);
+	int ret = async_req_2_2(exch, WINDOW_REGISTER, x_offset, y_offset, in, out);
 	async_exchange_end(exch);
 
Index: uspace/lib/c/include/io/window.h
===================================================================
--- uspace/lib/c/include/io/window.h	(revision 290a0f0bca64b949d48d6b8a5d58988fc13ad577)
+++ uspace/lib/c/include/io/window.h	(revision fa98b26a748eee56958a2e58ecc772de5507a6be)
@@ -102,5 +102,5 @@
 } window_grab_flags_t;
 
-extern int win_register(async_sess_t *, service_id_t *, service_id_t *);
+extern int win_register(async_sess_t *, service_id_t *, service_id_t *, sysarg_t, sysarg_t);
 
 extern int win_get_event(async_sess_t *, window_event_t *);
Index: uspace/lib/gui/window.c
===================================================================
--- uspace/lib/gui/window.c	(revision 290a0f0bca64b949d48d6b8a5d58988fc13ad577)
+++ uspace/lib/gui/window.c	(revision fa98b26a748eee56958a2e58ecc772de5507a6be)
@@ -534,5 +534,6 @@
 }
 
-window_t *window_open(char *winreg, bool is_main, bool is_decorated, const char *caption)
+window_t *window_open(char *winreg, bool is_main, bool is_decorated, 
+    const char *caption, sysarg_t x_offset, sysarg_t y_offset)
 {
 	int rc;
@@ -578,5 +579,5 @@
 	service_id_t out_dsid;
 	
-	rc = win_register(reg_sess, &in_dsid, &out_dsid);
+	rc = win_register(reg_sess, &in_dsid, &out_dsid, x_offset, y_offset);
 	async_hangup(reg_sess);
 	if (rc != EOK) {
Index: uspace/lib/gui/window.h
===================================================================
--- uspace/lib/gui/window.h	(revision 290a0f0bca64b949d48d6b8a5d58988fc13ad577)
+++ uspace/lib/gui/window.h	(revision fa98b26a748eee56958a2e58ecc772de5507a6be)
@@ -66,5 +66,5 @@
  * If the window is declared as main, its closure causes termination of the
  * whole application. Note that opened window does not have any surface yet. */
-extern window_t *window_open(char *, bool, bool, const char *);
+extern window_t *window_open(char *, bool, bool, const char *, sysarg_t, sysarg_t);
 
 /**
Index: uspace/srv/hid/compositor/compositor.c
===================================================================
--- uspace/srv/hid/compositor/compositor.c	(revision 290a0f0bca64b949d48d6b8a5d58988fc13ad577)
+++ uspace/srv/hid/compositor/compositor.c	(revision fa98b26a748eee56958a2e58ecc772de5507a6be)
@@ -207,5 +207,5 @@
 }
 
-static window_t *window_create()
+static window_t *window_create(sysarg_t x_offset, sysarg_t y_offset)
 {
 	window_t *win = (window_t *) malloc(sizeof(window_t));
@@ -217,7 +217,8 @@
 	prodcons_initialize(&win->queue);
 	transform_identity(&win->transform);
-	transform_translate(&win->transform, coord_origin, coord_origin);
-	win->dx = coord_origin;
-	win->dy = coord_origin;
+	transform_translate(&win->transform, 
+	    coord_origin + x_offset, coord_origin + y_offset);
+	win->dx = coord_origin + x_offset;
+	win->dy = coord_origin + y_offset;
 	win->fx = 1;
 	win->fy = 1;
@@ -744,5 +745,5 @@
 			fibril_mutex_lock(&window_list_mtx);
 
-			window_t *win = window_create();
+			window_t *win = window_create(IPC_GET_ARG1(call), IPC_GET_ARG2(call));
 			if (!win) {
 				async_answer_2(callid, ENOMEM, 0, 0);
@@ -1921,5 +1922,5 @@
 		fibril_mutex_lock(&window_list_mtx);
 
-		window_t *red_win = window_create();
+		window_t *red_win = window_create(0, 0);
 		red_win->surface = surface_create(250, 150, NULL, 0);
 		pixel_t red_pix = PIXEL(255, 240, 0, 0);
@@ -1931,5 +1932,5 @@
 		list_prepend(&red_win->link, &window_list);
 
-		window_t *blue_win = window_create();
+		window_t *blue_win = window_create(0, 0);
 		blue_win->surface = surface_create(200, 100, NULL, 0);
 		pixel_t blue_pix = PIXEL(255, 0, 0, 240);
@@ -1941,9 +1942,9 @@
 		list_prepend(&blue_win->link, &window_list);
 
-		window_t *helenos_win = window_create();
+		window_t *helenos_win = window_create(0, 0);
 		helenos_win->surface = decode_tga((void *) helenos_tga, helenos_tga_size, 0);
 		list_prepend(&helenos_win->link, &window_list);
 
-		window_t *nameic_win = window_create();
+		window_t *nameic_win = window_create(0, 0);
 		nameic_win->surface = decode_tga((void *) nameic_tga, nameic_tga_size, 0);
 		list_prepend(&nameic_win->link, &window_list);
