     Serial.print(secondNote);
   }
 
+  //Not playing any notes? Stop and done.
   if (firstNote == -1 && secondNote == -1) {
     poly->release ( GINSING0 ); 
     poly->release ( GINSING1 ); 
     return;
   }
 
-  //Now - at least one note is getting played. Is it already being played?
-  //If so leave it alone. Otherwise assign it to one of the Ginsing notes.
-  int newNote0 = -1;
-  int newNote1 = -1;
-
-  //First note. Is it already being played? Keep it.
-  if (firstNote == ginsingNote0) {
-    newNote0 = firstNote;
-    firstNote = -1;
-  } else if (firstNote == ginsingNote1) {
-    newNote1 =  firstNote;
-    firstNote = -1;
-  }
-
-  //Is the second note being played already?
-  if (secondNote != -1) {
-    if (secondNote == ginsingNote0) {
-      newNote0 =  secondNote;
-      secondNote = -1;
-    } 
-    else if (secondNote == ginsingNote1) {
-      newNote1 =  secondNote;
-      secondNote = -1;
-    }
-  }
-
-  //So are there any NEW notes? Stick them somewhere.
-  if (firstNote != -1) {
-    if (newNote0 == -1) {
-      newNote0 = firstNote;
-    } 
-    else {
-      newNote1 = firstNote;
-    }
-  }
-
-  if (secondNote != -1) {
-    if (newNote0 == -1) {
-      newNote0 = secondNote;
-    } 
-    else {
-      newNote1 = secondNote;
-    }
-  }
-
-  //Awesome. Now play or release notes.
-  ginsingNote0 = newNote0;
-  ginsingNote1 = newNote1;
+  //Are we playing one note or two?
+  if (secondNote == -1) {
+	  //One note. Assign it and done. Just make sure that if 
+	  //someone is already playing, then that's the one that gets the
+	  //new note.
+	  if (ginsingNote1 == -1) {
+		  ginsingNote0 == firstNote;
+	  } else {
+		  ginsingNote1 = firstNote;
+	  }
+  } else {
+	  //Two notes. it's either a direct assignment or a switch.
+	  if (ginsingNote0 == firstNote || ginsingNote1 == secondNote) {
+		  //At least one matched. Make sure they both do.
+		  ginsingNote0 = firstNote;
+		  ginsingNote1 = secondNote; 
+	  } else {
+		  //The didn't match. Reverse them.
+		  ginsingNote1 = firstNote;
+		  ginsingNote0 = secondNote;
+	  }
+  }
+
 
   if (ginsingNote0 == -1) {
     poly->release ( GINSING0 ); 


}




int stepTheMotorAndGetLightReading(int directionToStep) {
  myMotor->step(stepSize, directionToStep, DOUBLE); 
  delay(delayBetweenSteps);   

   ginsingNotes[6] = (GSNote)(baseValue + 6);
}

//These two are the notes that Ginsing is currently playing.
int ginsingNote0 = -1;
int ginsingNote1 = -1;

//FirstNote and SecondNote are the notes we want to be playing.
void playNote(int firstNote, int secondNote) {

  if (debug) {
