public void addMove(int int_move) {
		
		boolean  new_move     = true;
		String[] string_moves = {"F"   , "F2"    , "F'"  , "F'2"   , /*NOT USED DIRECTLY*/ "F"   , "F2"    ,
								 "R"   , "R2"    , "R'"  , "R'2"   , /*NOT USED DIRECTLY*/ "R"   , "R2"    ,
								 "B"   , "B2"    , "B'"  , "B'2"   , /*NOT USED DIRECTLY*/ "B"   , "B2"    ,
								 "L"   , "L2"    , "L'"  , "L'2"   , /*NOT USED DIRECTLY*/ "L"   , "L2"    ,
								 "U"   , "U2"    , "U'"  , "U'2"   , /*NOT USED DIRECTLY*/ "U"   , "U2"    ,
								 "D"   , "D2"    , "D'"  , "D'2"   , /*NOT USED DIRECTLY*/ "D"   , "D2"    ,
								 "U D'", "U2 D'2", "U' D", "U'2 D2", /*NOT USED DIRECTLY*/ "U D'", "U2 D'2",
								 "L R'", "L2 R'2", "L' R", "L'2 R2", /*NOT USED DIRECTLY*/ "L R'", "L2 R'2"
								};
		
		//Check if the user undid moves and then made a new move
		if(locate_prev_move < moves.size()-1) {new_move = false;}
		try {if(!moves_box.getColor(moves.size()-1).equals(Color.WHITE)) {new_move = false;}}
		catch(NullPointerException | IndexOutOfBoundsException e) {}
		
		if(new_move) {
			
			//Check if the move is new, inverted or a repeat
			if(int_move != same_move[0] && (int_move+2 != same_move[0] && int_move-2 != same_move[0])) { //New move
				moves.add(int_move);
				locate_prev_move++;
				same_move[0] = int_move;
				same_move[1] = 0;
			}
			
			else if(int_move != same_move[0]) { //Inverted
				if(same_move[1] == 0) { //Original move was not repeated so remove it altogether
					moves.remove(moves.size()-1);
					locate_prev_move--;
					try {same_move[0] = moves.get(moves.size()-1);}
					catch(IndexOutOfBoundsException e) {same_move[0] = -1;}
					same_move[1] = 0;
				} else { //Original move was repeated so remove the repeat just
					moves.set(moves.size()-1, moves.get(moves.size()-1)-1);
				}
			}
			
			else { //Same move
				moves.set(moves.size()-1, moves.get(moves.size()-1)+1);
				switch(same_move[1]) {
				case 0: same_move[1]++; break;
				case 1: same_move[1]++; break;
				case 2:
					moves.remove(moves.size()-1);
					locate_prev_move--;
					try {same_move[0] = moves.get(moves.size()-1);}
					catch(IndexOutOfBoundsException e) {same_move[0] = -1;}
					same_move[1] = 0;
					break;
				default: break;
				}
			}
			
			for(int i=moves.size()-1;i>locate_prev_move;i++) {
				moves.remove(i);
			}
			
			String[] string = new String[moves.size()];
			Color [] color  = new Color [moves.size()];
			Font     font   = new Font("Arial", Font.BOLD, 12);
			
			for(int i=0;i<moves.size();i++) {
				 string[i] = string_moves[moves.get(i)] + " ";
				 color [i] = Color.WHITE;
			}
			
			moves_box.setText(string, color, font);	
			repaint(379, 25, 229, 67);
			
		} else { //The user undid a move and has now repeated that move
			
			if(int_move == moves.get(locate_prev_move+1)) { //Check if the move made is the same as the previously undid move
				locate_prev_move++;
				
				String[] string = new String[moves.size()];
				Color [] color  = new Color [moves.size()];
				Font     font   = new Font("Arial", Font.BOLD, 12);
				
				for(int i=0;i<locate_prev_move+1;i++) { //For moves that have been made
					 string[i] = string_moves[moves.get(i)] + " ";
					 color [i] = Color.WHITE;
				}
				
				for(int i=locate_prev_move+1;i<moves.size();i++) { //For moves that have been undid
					 string[i] = string_moves[moves.get(i)] + " ";
					 color [i] = Color.GRAY.darker();
				}
				
				moves_box.setText(string, color, font);	
				repaint(379, 25, 229, 67);
			}
			
			else if(int_move == moves.get(locate_prev_move+1)+1) { //Check if move made is the same but the prev undid move was made twice
				if(!moves_box.getColor(locate_prev_move+1).equals(Color.WHITE)) { //Check if no part of the double move has been re-made
					String[] string = new String[moves.size()+1];
					Color [] color  = new Color [moves.size()+1];
					Font     font   = new Font("Arial", Font.BOLD, 12);
					
					for(int i=0;i<locate_prev_move+1;i++) { //For moves that have been made
						 string[i] = string_moves[moves.get(i)] + " ";
						 color [i] = Color.WHITE;
					}
					
					string[locate_prev_move+1] = string_moves[moves.get(locate_prev_move+1)].substring(0, string_moves[moves.get(locate_prev_move+1)].length()-1);
					color [locate_prev_move+1] = Color.WHITE;
					
					string[locate_prev_move+2] = "2";
					color [locate_prev_move+2] = Color.GRAY.darker();
					
					for(int i=locate_prev_move+3;i<moves.size()+1;i++) { //For moves that have been undid
						 string[i] = string_moves[moves.get(i)] + " ";
						 color [i] = Color.GRAY.darker();
					}
					
					moves_box.setText(string, color, font);	
					repaint(379, 25, 229, 67);
				
				} else { //The first part of the double move has already been made
					locate_prev_move++;
					
					String[] string = new String[moves.size()];
					Color [] color  = new Color [moves.size()];
					Font     font   = new Font("Arial", Font.BOLD, 12);
					
					for(int i=0;i<locate_prev_move+1;i++) { //For moves that have been made
						 string[i] = string_moves[moves.get(i)] + " ";
						 color [i] = Color.WHITE;
					}
					
					for(int i=locate_prev_move+1;i<moves.size();i++) { //For moves that have been undid
						 string[i] = string_moves[moves.get(i)] + " ";
						 color [i] = Color.GRAY.darker();
					}
					
					moves_box.setText(string, color, font);	
					repaint(379, 25, 229, 67);
				}
			}
			
			else { //The new move is not the same as the previously made move nor is it part of a double move
				for(int i=moves.size()-1;i>locate_prev_move;i--) {
					moves.remove(i);
				}
				
				same_move[0] = -1;
				same_move[1] = -1;
				addMove(int_move);
			}
			
		}
		
	}