public void shiftDown(int col) {
		
		Color[]  color = new Color[12];
		String[] face  = {"F", "D", "B", "U"};
		String grid_space;
		
		for(int i=0;i<12;i++) {
			int face_no = (int) Math.floor(((double)i + Math.floor(((double)i)/4))+1)/4;
			int row     = i - face_no*3 + 1;
			
			if(face_no == 2) {grid_space = face[face_no] + ":" + String.valueOf(row) + ":" + String.valueOf(4-col);}
			else             {grid_space = face[face_no] + ":" + String.valueOf(row) + ":" + String.valueOf(col);}
			
			color[i] = rubiks.getColor(grid_space);
		}
		
		for(int i=0;i<12;i++) {
			int face_no = (int) Math.floor(((double)i + Math.floor(((double)i)/4))+1)/4;
			int row     = i - face_no*3 + 1;
			
			if(face_no == 2) {grid_space = face[face_no] + ":" + String.valueOf(row) + ":" + String.valueOf(4-col);}
			else             {grid_space = face[face_no] + ":" + String.valueOf(row) + ":" + String.valueOf(col);}
			
			if(i<3) {rubiks.setColor(grid_space, color[i+9]);}
			else    {rubiks.setColor(grid_space, color[i-3]);}
		}
		
		if(col == 1) {
			shiftRotate("L", 1);
			if(user_move) {addMove(18);}
		}
		
		if(col == 2) {
			tofront.add(2);
			String[] faces  = {"F", "R", "B", "L", "U", "D"};
			int[]    layout = getCurrentLayout();
			for(int i=0;i<6;i++) {
				rubiks.setText(faces[i]+":2:2", faces[layout[i]]);
			}
			
			if(user_move) {addMove(44);}
		}
		
		if(col == 3) {
			shiftRotate("R", 3);
			if(user_move) {addMove(8);}
		}
		
		shiftFlip(col, "U");
		
	}