public void shiftRotate(String face, int repeats) {
		
		Color[] color;
		int count = 0;
		
		for(int i=0;i<repeats;i++) { //Rotate 3 times
			color = new Color[9];
			
			for(int n=1;n<4;n++) { //Row
				for(int t=1;t<4;t++) { //Column
					color[((n-1)*3)+(t-1)] = rubiks.getColor(face + ":" + String.valueOf(n) + ":" + String.valueOf(t));
				}
			}
		
			for(int n=3;n>0;n--) { //Row
				for(int t=3;t>0;t--) { //Column
					rubiks.setColor(face + ":" + String.valueOf(n) + ":" + String.valueOf(t), color[(n+5)-((t-1)*3)]);
				}
			}
			
		}
		
		while(count < repeats && face.equals("F")) {
			color = new Color[12];
			
			//Get colors for frontface edges of subfaces
			for(int i=0;i<3;i++) {color[i]   = rubiks.getColor("R:"+String.valueOf(i+1)+":1");} //Right face
			for(int i=0;i<3;i++) {color[i+3] = rubiks.getColor("D:1:"+String.valueOf(i+1));}    //Down face
			for(int i=0;i<3;i++) {color[i+6] = rubiks.getColor("L:"+String.valueOf(i+1)+":3");} //Left face
			for(int i=0;i<3;i++) {color[i+9] = rubiks.getColor("U:3:"+String.valueOf(i+1));}    //Up face
			
			Color[] temp_color = new Color[12];
			for(int i=0;i<12;i++) {temp_color[i] = color[i];}
			
			for(int i=0;i<12;i++) {
				if(i<9) {color[i+3] = temp_color[i];}
				else    {color[i-9] = temp_color[i];}				
			}
			
			//Set rotated colors for frontface edges of subfaces
			for(int i=0;i<3;i++) {rubiks.setColor("R:"+String.valueOf(i+1)+":1", color[i]);}   //Right face
			for(int i=0;i<3;i++) {rubiks.setColor("D:1:"+String.valueOf(i+1), color[5-i]);}    //Down face
			for(int i=0;i<3;i++) {rubiks.setColor("L:"+String.valueOf(i+1)+":3", color[i+6]);} //Left face
			for(int i=0;i<3;i++) {rubiks.setColor("U:3:"+String.valueOf(i+1), color[11-i]);}    //Up face
			
			count++;
			if(user_move) {addMove(getCurrentLayout()[0]*6);}
				
		}
		
	}