   return true;
 }
 
+boolean exec_target(char * tok) {
+  // Read team number
+  char * arg = strtok_r(NULL, " ", &tok);
+  if (arg == NULL) {  
+    Serial.print(e_team_required);
+    return false;
+  }
+  int team = atoi(arg);
+  if (team > 2) {
+    Serial.print(e_team_nums);
+    return false;
+  }
+
+  // Read territory number
+  arg = strtok_r(NULL, " ", &tok);
+  if (arg == NULL) {  
+    Serial.print(e_territory_required);
+    return false;
+  }
+  int territory = atoi(arg);
+  if (territory > 3) {
+    Serial.print(e_territory_nums);
+    return false;
+  }
+  
+  // Find the offset for the team's LED matrix
+  byte start_led = team * TARGET_DIGIT_LEDS;
+  for (int i = 0; i < TARGET_DIGIT_LEDS; i++) {
+    byte * digit;
+    switch (territory) {
+      case 0:
+        digit = digit_1;
+        break;
+      case 1:
+        digit = digit_2;
+        break;
+      case 2:
+        digit = digit_3;
+        break;
+      case 3:
+        digit = digit_4;
+        break;
+      default:
+        return false;
+    }
+    target_strip.setPixelColor(start_led + i, digit[i] ? team_colors[team] : 0);
+  }
+  target_strip.show();
+  return true;
+}
+
 void flash(Adafruit_NeoPixel & strip, uint32_t color, byte times, unsigned long delay_ms) {
   uint32_t old_colors[SCORE_STRIP_LEDS];
   for (byte i = 0; i < SCORE_STRIP_LEDS; i++) {

    score_strips[i] = new Adafruit_NeoPixel(SCORE_STRIP_LEDS, score_pins[i], NEO_GRB + NEO_KHZ800);    
    score_strips[i]->begin();
  }
  flash(*score_strips[0], Adafruit_NeoPixel::Color(0, 0, 0), 10, 20);
}

void loop() {

static const char * e_led_required = "led # required\n";
static const char * e_count_required = "count required\n";
static const char * e_ms_required = "ms required\n";
static const char * e_territory_required = "territory required\n";
static const char * e_territory_nums = "territory is 0,1,2,3\n";

boolean exec_flash(char * tok) {
  // Read strip number
