Added drag and drop, and made estimateLocation() not go out of bounds