Pushbutton Keyboard.write continuously running.

Okay, So upon adding the extra buttons, and another few hours of debugging I've run into another problem. I've recorded a video to help explain what's going on now. All buttons are wired up the same way with the exception of the Toggle Switch and red button. I really don't mind how that one works. I'd prefer the use of the toggle switch anyway, So ignore that one. The problem is with the second button.

The order the physical buttons are in the code, from top to bottom is pinButton2 - pinButton3 - pinButton1

pinButton3 doesn't do anything. Here's the video.

And here's my current code. It's messy, but for the most part it works.

/*

 */
 
#include <Keyboard.h>
#include <Esplora.h>
const byte pinButton1 = 0;
const byte ledPin1 = 8;
const byte pinButton2 = 7;
const byte ledPin2 = 16;
const byte pinButton3 = 15;
const byte ledPin3 = 14;
byte state1 = LOW;
byte state2 = LOW;
byte state3 = LOW;
byte reading1;
byte reading2;
byte reading3;
byte previous1 = LOW;
byte previous2 = LOW;
byte previous3 = LOW;
unsigned long time = 0; // important to use unsigned long not just long or you'll have a problem in 25 days or so
unsigned long debounce = 25;

void setup() {
  // Setting up the LEDs, Buttons and Keyboard.
  pinMode(ledPin1, OUTPUT);
  pinMode(pinButton1, INPUT_PULLUP);
  pinMode(ledPin2, OUTPUT);
  pinMode(pinButton2, INPUT_PULLUP);
  pinMode(ledPin3, OUTPUT);
  pinMode(pinButton3, INPUT_PULLUP);
  Keyboard.begin();
}

void loop()
{
  reading1 = digitalRead(pinButton1);
  if (reading1 == HIGH && previous1 == LOW && millis() - time > debounce) {
    Keyboard.write('u');
    digitalWrite(ledPin1, state1 = !state1); // a bit dirty coding :)
    time = millis();
  }
{
  previous1 = reading1;
  {
  reading2 = digitalRead(pinButton2);
  if (reading2 == HIGH && previous2 == LOW && millis() - time > debounce) {
    Keyboard.write('a');
    digitalWrite(ledPin2, state2 = !state2); // a bit dirty coding :)
    time = millis();
  }
  }
  {
  previous2 = reading2;
{
  reading3 = digitalRead(pinButton3);
  if (reading3 == HIGH && previous3 == LOW && millis() - time > debounce) {
    Keyboard.write('l');
    digitalWrite(ledPin3, state3 = !state3); // a bit dirty coding :)
    time = millis();
  }
  previous3 = reading3;
}
  }
}
}

Again, Probably a super simple fix, but it's going right over my head..