Index: /neercs/trunk/src/main.c
===================================================================
--- /neercs/trunk/src/main.c	(revision 3499)
+++ /neercs/trunk/src/main.c	(revision 3500)
@@ -209,7 +209,11 @@
                 fcntl(screen_list->socket[SOCK_CLIENT], F_SETFL, O_NONBLOCK);
             }
-            else if(!strncmp("REFRESH", buf, 7))
-            {
-                int dt;
+            else if(!strncmp("REFRESH ", buf, 8))
+            {
+                int dt, x, y;
+                /* FIXME check the length before calling atoi*/
+                x = atoi(buf+8);
+                y = atoi(buf+19);
+                caca_gotoxy(screen_list->cv, x, y);
                 caca_refresh_display(screen_list->dp);
                 dt = caca_get_display_time(screen_list->dp);
Index: /neercs/trunk/src/server.c
===================================================================
--- /neercs/trunk/src/server.c	(revision 3499)
+++ /neercs/trunk/src/server.c	(revision 3500)
@@ -111,5 +111,5 @@
         size_t bytes;
         void *buf;
-        char buf2[30];
+        char buf2[32];
         int x, y, w, h, i;
 
@@ -137,6 +137,6 @@
             debug("Requesting refresh for %d", bytes);
             towrite = bytes;
-            sprintf(buf2, "UPDATE %10d %10d ", x, y);
-            ret = write(screen_list->socket[SOCK_CLIENT], buf2, 29);
+            sprintf(buf2, "UPDATE %10d %10d", x, y);
+            ret = write(screen_list->socket[SOCK_CLIENT], buf2, strlen(buf2)+1);
             if(ret < 29 && errno != EAGAIN)
             {
@@ -164,5 +164,6 @@
             free(buf);
         }
-        write(screen_list->socket[SOCK_CLIENT], "REFRESH", 7);
+        sprintf(buf2, "REFRESH %10d %10d", caca_get_cursor_x(screen_list->cv), caca_get_cursor_y(screen_list->cv));
+        write(screen_list->socket[SOCK_CLIENT], buf2, strlen(buf2)+1);
 #if defined HAVE_CACA_DIRTY_RECTANGLES
         caca_clear_dirty_rect_list(screen_list->cv);
