void printNumber(register int16_t n)
 {
-    uint16_t i;
+    uint16_t nu;
+    int16_t i;
     int16_t rem;
     uint8_t x[7];
 
-    /* TODO BUG: cannot handle minimum signed integer 0x8000 -> -32768 */
     if (n < 0) {
         uart_putchar('-');
-        n = -n;
+        nu = -n;
+    } else {
+        nu = n;
     }
 
     i = 0;
     do {
-        rem = n % 10;
+        rem = nu % 10;
         x[i] = (uint8_t)rem + (uint8_t)'0';
-        n = n / 10;
+        nu = nu / 10;
         i = i + 1;
-    } while((n != 0) && (i < 7));
+    } while((nu != 0) && (i < 7));
 
     do{
         i = i - 1;