Index: uspace/app/terminal/terminal.c
===================================================================
--- uspace/app/terminal/terminal.c	(revision 959ef5d479a4b1758cc714932e5dbc6aaf49e8fa)
+++ uspace/app/terminal/terminal.c	(revision bd1f9a6dd4e2689644c496b7e30101dc52596e49)
@@ -177,4 +177,5 @@
 {
 	gfx_rect_t rect;
+	gfx_rect_t nupdate;
 
 	rect.p0.x = x;
@@ -183,5 +184,6 @@
 	rect.p1.y = y + h;
 
-	(void) gfx_bitmap_render(term->bmp, &rect, NULL);
+	gfx_rect_envelope(&term->update, &rect, &nupdate);
+	term->update = nupdate;
 }
 
@@ -357,5 +359,12 @@
 		update = true;
 
-	(void) update; // XXX
+	if (update) {
+		(void) gfx_bitmap_render(term->bmp, &term->update, NULL);
+
+		term->update.p0.x = 0;
+		term->update.p0.y = 0;
+		term->update.p1.x = 0;
+		term->update.p1.y = 0;
+	}
 
 	fibril_mutex_unlock(&term->mtx);
@@ -802,4 +811,9 @@
 	term_repaint(term);
 
+	term->update.p0.x = 0;
+	term->update.p0.y = 0;
+	term->update.p1.x = 0;
+	term->update.p1.y = 0;
+
 	*rterm = term;
 	return EOK;
Index: uspace/app/terminal/terminal.h
===================================================================
--- uspace/app/terminal/terminal.h	(revision 959ef5d479a4b1758cc714932e5dbc6aaf49e8fa)
+++ uspace/app/terminal/terminal.h	(revision bd1f9a6dd4e2689644c496b7e30101dc52596e49)
@@ -43,4 +43,5 @@
 #include <gfx/bitmap.h>
 #include <gfx/context.h>
+#include <gfx/coord.h>
 #include <io/chargrid.h>
 #include <io/con_srv.h>
@@ -58,4 +59,5 @@
 	sysarg_t w;
 	sysarg_t h;
+	gfx_rect_t update;
 
 	fibril_mutex_t mtx;
