refactored EVERYTHING to use Point2D.Double