   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;
+}

void setup() {
  // Initialize serial communication at 9600 bits per second
  Serial.begin(9600);
  
  // Setup Pins
  pinMode(LED_BUTTON, OUTPUT);
  pinMode(LED_ON_BOARD, OUTPUT);
  
  pinMode(PUSH_BUTTON, INPUT_PULLUP);
  pinMode(KILL_SWITCH, INPUT_PULLUP);
  pinMode(SAFE_SWITCH, INPUT_PULLUP); 
  

  analogWrite(LED_ON_BOARD, brightness);
  
  // System is enabled, process as normal
  if (systemEnabled()) { 
    // If we were disabled move to OFF
    if (runState == DISABLED) {
      runState = OFF;
      printState(runState);
      playEnabledChime(); 
    }
    
    // Read in the button state to see if it has been pressed
    int buttonState = digitalRead(PUSH_BUTTON);
    if (buttonState != previousButtonState) {
      // Transition on released state for most states
      if (buttonState != PUSH_BTN_PRESS) { // Released
        Serial.println("Released");
        switch (runState){
          case DISABLED: // Disabled -> Off
