protected Object[] handleRemove(Object[] cells) {
		Set removedRoots = new HashSet();
		if (cells != null && cells.length > 0) {
			Set rootsSet = new HashSet(roots);
			for (int i = 0; i < cells.length; i++){
				if (getParent(cells[i]) == null && rootsSet.contains(cells[i])) {
					removedRoots.add(cells[i]);
				}
			}
			if (removedRoots.size() > 0) {
				// If any roots have been removed, reform the roots
				// lists appropriately, keeping the order the same
				int newRootsSize = roots.size() - removedRoots.size();
				if (newRootsSize < 8) {
					newRootsSize = 8;
			}
				List newRoots = new ArrayList(newRootsSize);
				Iterator iter = roots.iterator();
				while (iter.hasNext()) {
					Object cell = iter.next();
					if (!removedRoots.contains(cell)) {
						newRoots.add(cell);
		}
				}
				roots = newRoots;
			}
		}
		return removedRoots.toArray();
	}