public Map<Integer,Tile> cleanFloor()
    {
    	//add current tile to visited list
    	visitedTiles.add(currentTile);
    		
        // Add unvisited surrounding tiles to unvisited tiles
    	surroundingTilesToUnvisted();
    	
        // Add current and surrounding tiles to internal map
    	internalMap = new HashMap<Integer,Tile>();
    	internalMap = addTilesToInternalMap(internalMap);
    	
        //First tile was not being cleaned.  This is a temp fix. -Steven
        currentTile.setDirtAmount(0);
    	
        //while unvisitedTiles is not empty
    	while(!unvisitedTiles.isEmpty())
    	{
    		Tile nextTile = getNextTile(unvisitedTiles);

                List<Tile> traversed;
                if (battery.needToRecharge(currentTile, nextTile, new ArrayList<>(internalMap.values())) && !currentTile.isChargingStation())
                {
                    LoggingUtility.logDiscoveredCell("Going home to get more juice!!!");
                    traversed = move(homeTile);
                    battery.chargeBattery();
                    LoggingUtility.logRecharge();
                    List<Tile> backToCurrent = move(nextTile);
                    traversed.addAll(backToCurrent);
                }
                
                if (dirtMeter.emptyMeLightIsOn())
                {
                    LoggingUtility.logDiscoveredCell("Going home to get bag emptied!!!");
                    traversed = move(homeTile);
                    dirtMeter.emptyDirtBag();
                    LoggingUtility.logDiscoveredCell("Bag emptied!!!");
                    List<Tile> backToCurrent = move(nextTile);
                    traversed.addAll(backToCurrent);                    
                }

                    traversed = move(nextTile);
                    
                    while(currentTile.getDirtAmount()>0)
                    {
                        if (dirtMeter.emptyMeLightIsOn())
                            break;
                        dirtMeter.cleanOneDirtUnitFromTile(currentTile);
                        LoggingUtility.logDiscoveredCell("Current Dirt level at (" + currentTile.getX() + ", " + currentTile.getY() + ") is " + currentTile.getDirtAmount() );
                    }
                    if (currentTile.getDirtAmount()<=0)
                    {
                        unvisitedTiles.remove(currentTile);
                    }
                
    		// Add unvisited surrounding tiles to unvisitedTiles list
            visitedTiles.addAll(traversed);
    		surroundingTilesToUnvisted();
    		internalMap = addTilesToInternalMap(internalMap);
    	}
    	
    	// Now that's it done cleaning, return to the charging station
        LoggingUtility.logDiscoveredCell("Bag Capacity: " + dirtMeter.getCurrentDirtCapacity());
    	LoggingUtility.logReturn();
    	move(homeTile);
        // Once at the charging station re-charge.
    	battery.chargeBattery();
    	LoggingUtility.logRecharge();    	
    	
        return internalMap;
    }