public void performMouseClick(Point thePoint)
	{
		prevMouseClick.setLocation(mouseClick.getLocation());
		mouseClick.setLocation(thePoint);
		
		Point prevCell = new Point();
		prevCell.setLocation(Math.floor((float)translate(prevMouseClick).x / cellWidth), Math.floor((float)translate(prevMouseClick).y / cellHeight));
		Point currCell = new Point();
		currCell.setLocation(Math.floor((float)translate(mouseClick).x / cellWidth), Math.floor((float)translate(mouseClick).y / cellHeight));
		Point currNumSelectCell = new Point();
		currNumSelectCell.setLocation(Math.floor(((float)translate(mouseClick).x + (cellWidth / 2) - (int)(numSelectCellWidth * 1.5)) / numSelectCellWidth), Math.floor(((float)translate(mouseClick).y + (cellHeight / 2) - (int)(numSelectCellHeight * 1.5)) / numSelectCellHeight));
		Point convPrevCell = SudokuLibrary.convertFromXYToSC(prevCell);
		Point convCurrCell = SudokuLibrary.convertFromXYToSC(currCell);
		
		Point numSelectOffset = new Point();
		numSelectOffset.setLocation(((prevCell.getX() + 0.5) * cellWidth - (float)(numSelectSuperCellWidth * 0.5)), ((prevCell.getY() + 0.5) * cellHeight - (float)(numSelectSuperCellHeight * 0.5)));
		
		
		if (!numSelectActivated &&
				SudokuLibrary.isPointInRect(mouseClick, new Rectangle(xGridOffset, yGridOffset, gridWidth, gridHeight)))
		{
			// if not activated, activate
			if (!cells[convCurrCell.x][convCurrCell.y].isLocked())
			{
				numSelectCellSelected.setLocation(translate(mouseClick).x / cellWidth, translate(mouseClick).y / cellHeight);
				numSelectActivated = true;
			}
	        this.updateUI();
		}
		else if (numSelectActivated &&
				SudokuLibrary.isPointInRect(prevMouseClick, new Rectangle(xGridOffset, yGridOffset, gridWidth, gridHeight)) &&
				SudokuLibrary.isPointInRect(translate(mouseClick), new Rectangle(numSelectOffset.x, numSelectOffset.y, numSelectSuperCellWidth, numSelectSuperCellHeight)))
		{
			// if activated and cursor is around where the old cursor was clicked, change value of cell
			Point numSelectCell = new Point((translate(mouseClick).x - numSelectOffset.x) / numSelectCellWidth, (translate(mouseClick).y - numSelectOffset.y) / numSelectCellHeight);
			cells[convPrevCell.x][convPrevCell.y].setData(numSelectControlData[(numSelectCell.y * SudokuFrontEnd.noCellColumns) + numSelectCell.x]);
        	numSelectActivated = false;
        	numberEnteredEvent.setChanged();
        	numberEnteredEvent.notifyObservers(prevCell);
            this.updateUI();
		}
		else if (numSelectActivated &&
				!SudokuLibrary.isPointInRect(mouseClick, new Rectangle(translate(numSelectOffset).x, translate(numSelectOffset).y, numSelectSuperCellWidth, numSelectSuperCellHeight)))
		{
			// if activated and cursor is not near old click position, remove overlay
			if (SudokuLibrary.isPointInRect(prevCell, new Rectangle(0, 0, 9, 9)))
			{
				cells[convPrevCell.x][convPrevCell.y].setData(0);
	        	numberEnteredEvent.setChanged();
	        	numberEnteredEvent.notifyObservers(prevCell);
			}
			numSelectActivated = false;
	        this.updateUI();
		}
	}