public void condense()
	{
		Iterator<GraphPoint> iter = points.iterator();
        List<GraphPoint> pointsToRemove = new ArrayList<GraphPoint>();

		while(iter.hasNext())
		{
			GraphPoint p = iter.next();
			if(!hasNeighbourOfOtherClass(p))
			{
                pointsToRemove.add(p);
			}
		}

        Iterator<GraphPoint> allPointsIt = points.iterator();
        Iterator<GraphPoint> removeIt = pointsToRemove.iterator();
        while (removeIt.hasNext())
        {
            GraphPoint pointToRemove = removeIt.next();
            GraphPoint lastPoint = allPointsIt.next();

            // Loop through the points until we encounter a point that needs to be removed
            while (lastPoint != pointToRemove)
            {
                lastPoint = allPointsIt.next();
            }

            // Remove the edges between the point and its neighbours
            List<GraphPoint> neighbours = lastPoint.getEdges();
            Iterator<GraphPoint> neighbourIterator = neighbours.iterator();
			while(neighbourIterator.hasNext())
				neighbourIterator.next().removeEdge(lastPoint);

            // Remove the point
            allPointsIt.remove();
        }

        removeEdges();
        createEdges();
	}