docs: private HashMap<DensityGrid, CharacteristicVector> recluster (GridCluster gc)
  	{
  		HashMap<DensityGrid, CharacteristicVector> glNew = new HashMap<DensityGrid, CharacteristicVector>();
  		Iterator<Map.Entry<DensityGrid,Boolean>> gcIter = gc.getGrids().entrySet().iterator();
  		newClusterList = new ArrayList<GridCluster>();
  		//System.out.println("Recluster called for cluster "+gc.getClusterLabel());
  		
  		// Assign every dense grid in gc to its own cluster, assign all other grids to NO_CLASS
  		while (gcIter.hasNext())
  		{
  			Map.Entry<DensityGrid,Boolean> grid = gcIter.next();
  			DensityGrid dg = grid.getKey();
  			CharacteristicVector cvOfG = this.grid_list.get(dg);
  
  			if(cvOfG.getAttribute() == DENSE)
  			{
  				int gridClass = newClusterList.size();
  				cvOfG.setLabel(gridClass);
  				GridCluster newClus = new GridCluster ((CFCluster)dg, new ArrayList<CFCluster>(), gridClass);
  				newClus.addGrid(dg);
  				newClusterList.add(newClus);
  			}
  			else
  				cvOfG.setLabel(NO_CLASS);
  
  			glNew.put(dg, cvOfG);	
  		}
  		
  		boolean changesMade;
  		
  		// While changes can be made...
  		do
  		{
  			changesMade = false;
  			HashMap<DensityGrid, CharacteristicVector> glAdjusted = adjustNewLabels(glNew);
  			
  			if(!glAdjusted.isEmpty())
  			{
  				glNew.putAll(glAdjusted);
  				changesMade = true;
  			}
  		}while(changesMade);
  		
  		// Update the cluster list with the newly formed clusters
  		gc.getGrids().clear();
  		this.cluster_list.set(gc.getClusterLabel(), gc);
  		this.cluster_list.addAll(newClusterList);
  		
  		return glNew;
  	}