diff --git a/Documentation/pycardium/display.rst b/Documentation/pycardium/display.rst
index 08bd0274c80f6d28a6d834a06ca59f1b70ce1a7a..ab2ee8aed618200acbc059b7b3ab5de1a8d1d143 100644
--- a/Documentation/pycardium/display.rst
+++ b/Documentation/pycardium/display.rst
@@ -1,5 +1,21 @@
 ``display`` - Display
 =====================
 
+The display module let's you draw on the card10's display.
+Pixels are addressed from top left to bottom right with a range of x: 0 to 159 and y: 0 to 79.
+
+.. code-block:: text
+
+   0,0
+      +---------------------+
+      |                     |
+      |                     |
+      |                     |
+      |                     |
+      +---------------------+
+                           159,79
+
+Drawing operations are clipped, pixels outside of the screen will be ignored.
+
 .. automodule:: display
    :members:
diff --git a/epicardium/epicardium.h b/epicardium/epicardium.h
index 63dca86829849069780800f5d3f531fd69e9e3e5..13358966d499dcd430f3ff6dcca4df9165e48311 100644
--- a/epicardium/epicardium.h
+++ b/epicardium/epicardium.h
@@ -1327,8 +1327,8 @@ API(API_DISP_UPDATE, int epic_disp_update());
 /**
  * Prints a string into the display framebuffer
  *
- * :param posx: x position to print to. 0 <= x <= 160
- * :param posy: y position to print to. 0 <= y <= 80
+ * :param posx: x position to print to.
+ * :param posy: y position to print to.
  * :param pString: string to print
  * :param fg: foreground color in rgb565
  * :param bg: background color in rgb565
@@ -1338,8 +1338,8 @@ API(API_DISP_UPDATE, int epic_disp_update());
  */
 API(API_DISP_PRINT,
     int epic_disp_print(
-	    uint16_t posx,
-	    uint16_t posy,
+	    int16_t posx,
+	    int16_t posy,
 	    const char *pString,
 	    uint16_t fg,
 	    uint16_t bg)
@@ -1360,8 +1360,8 @@ enum disp_font_name {
  * Prints a string into the display framebuffer with font type selectable
  *
  * :param fontName: number of font, use FontName enum
- * :param posx: x position to print to. 0 <= x <= 160
- * :param posy: y position to print to. 0 <= y <= 80
+ * :param posx: x position to print to.
+ * :param posy: y position to print to.
  * :param pString: string to print
  * :param fg: foreground color in rgb565
  * :param bg: background color in rgb565, no background is drawn if bg==fg
@@ -1371,8 +1371,8 @@ enum disp_font_name {
  */
 API(API_DISP_PRINT_ADV, int epic_disp_print_adv(
 	uint8_t font,
-	uint16_t posx,
-	uint16_t posy,
+	int16_t posx,
+	int16_t posy,
 	const char *pString,
 	uint16_t fg,
 	uint16_t bg
@@ -1391,24 +1391,24 @@ API(API_DISP_CLEAR, int epic_disp_clear(uint16_t color));
 /**
  * Draws a pixel on the display
  *
- * :param x: x position; 0 <= x <= 160
- * :param y: y position; 0 <= y <= 80
+ * :param x: x position;
+ * :param y: y position;
  * :param color: pixel color in rgb565
  * :return: ``0`` on success or a negative value in case of an error:
  *
  *    - ``-EBUSY``: Display was already locked from another task.
  */
 API(API_DISP_PIXEL, int epic_disp_pixel(
-	uint16_t x, uint16_t y, uint16_t color
+	int16_t x, int16_t y, uint16_t color
 ));
 
 /**
  * Draws a line on the display
  *
- * :param xstart: x starting position; 0 <= x <= 160
- * :param ystart: y starting position; 0 <= y <= 80
- * :param xend: x ending position; 0 <= x <= 160
- * :param yend: y ending position; 0 <= y <= 80
+ * :param xstart: x starting position
+ * :param ystart: y starting position
+ * :param xend: x ending position
+ * :param yend: y ending position
  * :param color: line color in rgb565
  * :param linestyle: 0 for solid, 1 for dottet (almost no visual difference)
  * :param pixelsize: thickness of the line; 1 <= pixelsize <= 8
@@ -1417,10 +1417,10 @@ API(API_DISP_PIXEL, int epic_disp_pixel(
  *    - ``-EBUSY``: Display was already locked from another task.
  */
 API(API_DISP_LINE, int epic_disp_line(
-	uint16_t xstart,
-	uint16_t ystart,
-	uint16_t xend,
-	uint16_t yend,
+	int16_t xstart,
+	int16_t ystart,
+	int16_t xend,
+	int16_t yend,
 	uint16_t color,
 	enum disp_linestyle linestyle,
 	uint16_t pixelsize
@@ -1429,10 +1429,10 @@ API(API_DISP_LINE, int epic_disp_line(
 /**
  * Draws a rectangle on the display
  *
- * :param xstart: x coordinate of top left corner; 0 <= x <= 160
- * :param ystart: y coordinate of top left corner; 0 <= y <= 80
- * :param xend: x coordinate of bottom right corner; 0 <= x <= 160
- * :param yend: y coordinate of bottom right corner; 0 <= y <= 80
+ * :param xstart: x coordinate of top left corner
+ * :param ystart: y coordinate of top left corner
+ * :param xend: x coordinate of bottom right corner
+ * :param yend: y coordinate of bottom right corner
  * :param color: line color in rgb565
  * :param fillstyle: 0 for empty, 1 for filled
  * :param pixelsize: thickness of the rectangle outline; 1 <= pixelsize <= 8
@@ -1441,10 +1441,10 @@ API(API_DISP_LINE, int epic_disp_line(
  *    - ``-EBUSY``: Display was already locked from another task.
  */
 API(API_DISP_RECT, int epic_disp_rect(
-	uint16_t xstart,
-	uint16_t ystart,
-	uint16_t xend,
-	uint16_t yend,
+	int16_t xstart,
+	int16_t ystart,
+	int16_t xend,
+	int16_t yend,
 	uint16_t color,
 	enum disp_fillstyle fillstyle,
 	uint16_t pixelsize
@@ -1464,8 +1464,8 @@ API(API_DISP_RECT, int epic_disp_rect(
  *    - ``-EBUSY``: Display was already locked from another task.
  */
 API(API_DISP_CIRC, int epic_disp_circ(
-	uint16_t x,
-	uint16_t y,
+	int16_t x,
+	int16_t y,
 	uint16_t rad,
 	uint16_t color,
 	enum disp_fillstyle fillstyle,
diff --git a/epicardium/modules/display.c b/epicardium/modules/display.c
index fe89fc324b41f7f9f944b0de4ce087558ac5a45e..c3a84812fcb3f105a8e1ccf4c710c64854d63269 100644
--- a/epicardium/modules/display.c
+++ b/epicardium/modules/display.c
@@ -22,8 +22,8 @@ static int check_lock()
 }
 
 int epic_disp_print(
-	uint16_t posx,
-	uint16_t posy,
+	int16_t posx,
+	int16_t posy,
 	const char *pString,
 	uint16_t fg,
 	uint16_t bg
@@ -39,8 +39,8 @@ static const sFONT *font_map[] = {
 
 int epic_disp_print_adv(
 	uint8_t font,
-	uint16_t posx,
-	uint16_t posy,
+	int16_t posx,
+	int16_t posy,
 	const char *pString,
 	uint16_t fg,
 	uint16_t bg
@@ -76,7 +76,7 @@ int epic_disp_clear(uint16_t color)
 	}
 }
 
-int epic_disp_pixel(uint16_t x, uint16_t y, uint16_t color)
+int epic_disp_pixel(int16_t x, int16_t y, uint16_t color)
 {
 	int cl = check_lock();
 	if (cl < 0) {
@@ -88,10 +88,10 @@ int epic_disp_pixel(uint16_t x, uint16_t y, uint16_t color)
 }
 
 int epic_disp_line(
-	uint16_t xstart,
-	uint16_t ystart,
-	uint16_t xend,
-	uint16_t yend,
+	int16_t xstart,
+	int16_t ystart,
+	int16_t xend,
+	int16_t yend,
 	uint16_t color,
 	enum disp_linestyle linestyle,
 	uint16_t pixelsize
@@ -115,10 +115,10 @@ int epic_disp_line(
 }
 
 int epic_disp_rect(
-	uint16_t xstart,
-	uint16_t ystart,
-	uint16_t xend,
-	uint16_t yend,
+	int16_t xstart,
+	int16_t ystart,
+	int16_t xend,
+	int16_t yend,
 	uint16_t color,
 	enum disp_fillstyle fillstyle,
 	uint16_t pixelsize
@@ -154,8 +154,8 @@ int epic_disp_rect(
 }
 
 int epic_disp_circ(
-	uint16_t x,
-	uint16_t y,
+	int16_t x,
+	int16_t y,
 	uint16_t rad,
 	uint16_t color,
 	enum disp_fillstyle fillstyle,
diff --git a/lib/gfx/gfx.c b/lib/gfx/gfx.c
index 8e6c6115ce28b399f85fe3d8f33737553a2d4de4..c076a8343e39b8fef7d2f29beb825f06ba17d007 100644
--- a/lib/gfx/gfx.c
+++ b/lib/gfx/gfx.c
@@ -95,9 +95,6 @@ void gfx_puts(
 			x = 0;
 			y += font->Height;
 		}
-		// if the line is outside the display we return
-		if (y >= r->height)
-			return;
 
 		// now print the character
 		gfx_putchar(font, r, x, y, *str, fg, bg);
diff --git a/pycardium/modules/py/display.py b/pycardium/modules/py/display.py
index d7854aa3aefb9ebeda1db30598a1505a3884ff7d..da5169908325c03b58620524a85cea1bb702d42e 100644
--- a/pycardium/modules/py/display.py
+++ b/pycardium/modules/py/display.py
@@ -75,8 +75,8 @@ class Display:
         :param text: Text to print
         :param fg: Foreground color (expects RGB triple)
         :param bg: Background color (expects RGB triple) or None for transparent background
-        :param posx: X-Position of the first character, 0 <= posx <= 159
-        :param posy: Y-Position of the first character, 0 <= posy <= 79
+        :param posx: X-Position of the first character
+        :param posy: Y-Position of the first character
         :param font: 0 <= font <= 4 (currently) selects a font
 
         Avaiable Fonts:
@@ -110,8 +110,8 @@ class Display:
         """
         Draws a pixel on the display
 
-        :param x: X coordinate, 0<= x <= 159
-        :param y: Y coordinate, 0<= y <= 79
+        :param x: X coordinate
+        :param y: Y coordinate
         :param col: color of the pixel (expects RGB tripple)
         """
 
@@ -134,10 +134,10 @@ class Display:
         """
         Draws a line on the display.
 
-        :param xs: X start coordinate, 0 <= xs <= 159
-        :param ys: Y start coordinate, 0 <= ys <= 79
-        :param xe: X end coordinate, 0 <= xe <= 159
-        :param ye: Y end coordinate, 0 <= ye <= 79
+        :param xs: X start coordinate
+        :param ys: Y start coordinate
+        :param xe: X end coordinate
+        :param ye: Y end coordinate
         :param col: color of the line (expects RGB triple)
         :param dotted: whether the line should be dotted or not
            (questionable implementation: draws every other pixel white, draws
@@ -154,10 +154,10 @@ class Display:
         """
         Draws a rectangle on the display.
 
-        :param xs: X start coordinate, 0 <= xs <= 159
-        :param ys: Y start coordinate, 0 <= ys <= 79
-        :param xe: X end coordinate, 0 <= xe <= 159
-        :param ye: Y end coordinate, 0 <= ye <= 79
+        :param xs: X start coordinate
+        :param ys: Y start coordinate
+        :param xe: X end coordinate
+        :param ye: Y end coordinate
         :param col: color of the outline and fill (expects RGB triple)
         :param filled: whether the rectangle should be filled or not
         :param size: size of the individual pixels, ranges from 1 to 8
@@ -172,8 +172,8 @@ class Display:
         """
         Draws a circle on the display.
 
-        :param x: center x coordinate, 0 <= x <= 159
-        :param y: center y coordinate, 0 <= y <= 79
+        :param x: center x coordinate
+        :param y: center y coordinate
         :param rad: radius
         :param col: color of the outline and fill (expects RGB triple)
         :param filled: whether the rectangle should be filled or not
diff --git a/pycardium/modules/sys_display.c b/pycardium/modules/sys_display.c
index 4f92ab92dcc2cfc8cede58018c8778fe9e345918..d038495445aec31d4b2c5cab285d0d5738f73d22 100644
--- a/pycardium/modules/sys_display.c
+++ b/pycardium/modules/sys_display.c
@@ -39,11 +39,11 @@ static mp_obj_t mp_display_print(size_t n_args, const mp_obj_t *args)
 		mp_raise_TypeError("input text must be a string");
 	}
 	GET_STR_DATA_LEN(args[0], print, print_len);
-	uint32_t posx = mp_obj_get_int(args[1]);
-	uint32_t posy = mp_obj_get_int(args[2]);
-	uint32_t fg   = get_color(args[3]);
-	uint32_t bg   = get_color(args[4]);
-	int res = epic_disp_print(posx, posy, (const char *)print, fg, bg);
+	int32_t posx = mp_obj_get_int(args[1]);
+	int32_t posy = mp_obj_get_int(args[2]);
+	uint32_t fg  = get_color(args[3]);
+	uint32_t bg  = get_color(args[4]);
+	int res      = epic_disp_print(posx, posy, (const char *)print, fg, bg);
 	if (res < 0) {
 		mp_raise_OSError(-res);
 	}
@@ -60,8 +60,8 @@ static mp_obj_t mp_display_print_adv(size_t n_args, const mp_obj_t *args)
 		mp_raise_TypeError("input text must be a string");
 	}
 	GET_STR_DATA_LEN(args[0], print, print_len);
-	uint32_t posx    = mp_obj_get_int(args[1]);
-	uint32_t posy    = mp_obj_get_int(args[2]);
+	int32_t posx     = mp_obj_get_int(args[1]);
+	int32_t posy     = mp_obj_get_int(args[2]);
 	uint32_t fg      = get_color(args[3]);
 	uint32_t bg      = get_color(args[4]);
 	uint8_t fontName = mp_obj_get_int(args[5]);
@@ -80,8 +80,8 @@ static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(
 /* draw pixel on the display */
 static mp_obj_t mp_display_pixel(size_t n_args, const mp_obj_t *args)
 {
-	uint16_t x   = mp_obj_get_int(args[0]);
-	uint16_t y   = mp_obj_get_int(args[1]);
+	int16_t x    = mp_obj_get_int(args[0]);
+	int16_t y    = mp_obj_get_int(args[1]);
 	uint16_t col = get_color(args[2]);
 
 	//TODO: Move sanity checks to epicardium
@@ -121,10 +121,10 @@ static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(
 /* draw line on the display */
 static mp_obj_t mp_display_line(size_t n_args, const mp_obj_t *args)
 {
-	uint16_t xs  = mp_obj_get_int(args[0]);
-	uint16_t ys  = mp_obj_get_int(args[1]);
-	uint16_t xe  = mp_obj_get_int(args[2]);
-	uint16_t ye  = mp_obj_get_int(args[3]);
+	int16_t xs   = mp_obj_get_int(args[0]);
+	int16_t ys   = mp_obj_get_int(args[1]);
+	int16_t xe   = mp_obj_get_int(args[2]);
+	int16_t ye   = mp_obj_get_int(args[3]);
 	uint16_t col = get_color(args[4]);
 	uint16_t ls  = mp_obj_get_int(args[5]);
 	uint16_t ps  = mp_obj_get_int(args[6]);
@@ -155,10 +155,10 @@ static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(
 /* draw rectangle on the display */
 static mp_obj_t mp_display_rect(size_t n_args, const mp_obj_t *args)
 {
-	uint16_t xs  = mp_obj_get_int(args[0]);
-	uint16_t ys  = mp_obj_get_int(args[1]);
-	uint16_t xe  = mp_obj_get_int(args[2]);
-	uint16_t ye  = mp_obj_get_int(args[3]);
+	int16_t xs   = mp_obj_get_int(args[0]);
+	int16_t ys   = mp_obj_get_int(args[1]);
+	int16_t xe   = mp_obj_get_int(args[2]);
+	int16_t ye   = mp_obj_get_int(args[3]);
 	uint16_t col = get_color(args[4]);
 	uint16_t fs  = mp_obj_get_int(args[5]);
 	uint16_t ps  = mp_obj_get_int(args[6]);
@@ -189,8 +189,8 @@ static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(
 /* draw rectangle on the display */
 static mp_obj_t mp_display_circ(size_t n_args, const mp_obj_t *args)
 {
-	uint16_t x   = mp_obj_get_int(args[0]);
-	uint16_t y   = mp_obj_get_int(args[1]);
+	int16_t x    = mp_obj_get_int(args[0]);
+	int16_t y    = mp_obj_get_int(args[1]);
 	uint16_t rad = mp_obj_get_int(args[2]);
 	uint16_t col = get_color(args[3]);
 	uint16_t fs  = mp_obj_get_int(args[4]);