   Serial.println("System State: " + strState);
 }
 
+/**
+ * Play Disabled Chime
+ * 
+ * @return none
+ */
+void playDisabledChime() {
+  tone(SPEAKER, 2000, 250);
+  delay(250);
+  tone(SPEAKER, 4000, 250);
+}
+
+/**
+ * Play Enabled Chime
+ * 
+ * @return none
+ */
+void playEnabledChime() {
+  tone(SPEAKER, 4000, 250);
+  delay(250);
+  tone(SPEAKER, 2000, 250);  
+}
+
+/**
+ * Checks to see if the system is enabled which will allow the vehicle 
+ * to be started
+ * 
+ * @return bool true if system is enabled, false if disabled
+ */
+bool systemEnabled() {
+#if NFC_KILL_SWITCH
+  bool enabled = false;  
+  bool success = false;
+  byte uid[] = { 0, 0, 0, 0, 0, 0, 0 };  // Buffer to store the returned UID
+  byte uidLength;                        // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
+
+  // If the system has already been enabled from NFC and started keep it enabled
+  // until the car is turned OFF
+  if (runState != DISABLED && runState != OFF) {
+    return true;
+  }
+
+  success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 25);  
+  //Serial.print("UID Value: ");
+  //nfc.PrintHex(uid, uidLength);
+  //Serial.println("");
+  bool found = false;
+  for (byte i = 0; i < (sizeof(NFC_UIDS) / sizeof(NFC_UIDS[0])); i++) {
+    //Serial.print("Compare to known UID: ");
+    //nfc.PrintHex(NFC_UIDS[i], sizeof(NFC_UIDS[i]));
+    if (checkUid(NFC_UIDS[i], uid, sizeof(NFC_UIDS[i]))) {
+      //Serial.println("UID Match");
+      found = true;
+      break;
+    }
+  }
+  return found;
+#else
+  return digitalRead(KILL_SWITCH) == HIGH; // HIGH = System Enabled LOW = Disabled (grounded)
+#endif
+}
+
+/**
+ * Compares known UID to UID to see if they match
+ * 
+ * @return bool true if UID is a match, false if not
+ */
+bool checkUid(byte knownUid[], byte uid[], byte uidLength) {
+  for (byte i = 0; i < uidLength; i++) {
+    if (knownUid[i] != uid[i]) {
+      return false;
+    }
+  }
+  return true;
+}

  switch (runState){
    case DISABLED: 
    case OFF:
      digitalWrite(RELAY_ACC, HIGH);
      digitalWrite(RELAY_IGN, HIGH);
      digitalWrite(RELAY_START, HIGH);
      break;
    case ACC:
      digitalWrite(RELAY_ACC, LOW);
      digitalWrite(RELAY_IGN, HIGH);
      digitalWrite(RELAY_START, HIGH);
      break;
    case START:
      digitalWrite(RELAY_ACC, HIGH);
      digitalWrite(RELAY_IGN, LOW);
      digitalWrite(RELAY_START, LOW);
      break;
    case RUN:
      digitalWrite(RELAY_ACC, HIGH);
      digitalWrite(RELAY_IGN, LOW);
      digitalWrite(RELAY_START, HIGH);
      break;
  }
}

        pressTime = millis();
        Serial.println("Pressed");
      } 
    } else if (buttonState == PUSH_BTN_PRESS) { // Pressed
      // Special case for START
      // When we release the push button in the ACC state we want to transition to
      // START if held longer than HOLD_MS and the SAFE_SWITCH is open
      if (runState == ACC) {
        bool safe = digitalRead(SAFE_SWITCH) != SAFE_SWITCH_ENB; // ENB = Unsafe to start
        if (safe) {
          if(millis() - pressTime > HOLD_MS) {
            runState = START;
            printState(runState);
            setRelayState();
          }
        } else {
          Serial.println("WARNING: Unsafe to Start");
        }
