     if (shift) {
       strip.ShiftAllPixels();
     }
-    char tag[3] = {48+x, 48+y, 0};
-    if (ids[x][y] > 0) {
-      screen.clearId(ids[x][y]);
+    
+    if (false) { //ids[x][y] > 0) {
+      screen.change(ids[x][y], visibleColor(colors[x][y].color));
+    } else {
+      char tag[3] = {48+x, 48+y, 0};
+      ids[x][y] = screen.fillRectangle(cwidth * x + (cwidth/2 - cellwidth/2), rheight * y + (rheight/2 - cellheight/2),
+        cellwidth, cellheight, visibleColor(colors[x][y].color), String(tag), true);
     }
-    
-    ids[x][y] = screen.fillRectangle(cwidth * x + (cwidth/2 - cellwidth/2), rheight * y + (rheight/2 - cellheight/2),
-      cellwidth, cellheight, visibleColor(colors[x][y].color), String(tag));
 }
 
 void drawGrid() 

      y = tag[1]-48;
  }
  
  if (shieldEvent->actionHash == pressedHash) {
    pressedX = x;
    pressedY = y;
  }
  
  if (shieldEvent->actionHash == releasedHash) {
    releasedX = x;
    releasedY = y;
    if (pressedX <= releasedX && pressedY <= releasedY && (pressedX+pressedY < releasedX+releasedY)) {
      for (int ix=pressedX; ix<=releasedX; ix++) {
        for (int iy=pressedY; iy<=releasedY; iy++) {
          setColor(ix,iy,selectedColor,false);
        }
      }
      
      strip.ShiftAllPixels();
    }
  }
  
  if (shieldEvent->actionHash == tappedHash) {
    if (tag[1] == 0 && tag[0] < 48+(colorCount+1) && tag[0] >= 48) {
      //color
      if (tag[0] == 48+(colorCount)) {


void setup()
{
  for (int x=0; x<gridcolumns; x++) {
    for (int y=0; y<gridrows; y++) {
      ids[x][y] = 0;
    }
  }
  
  shield.setOnRefresh(refresh);
  screen.setOnEvent(screenEvent);

