public void zoomIn(Point pivot) {
        if (getZoom() >= getTileServer().getMaxZoom())
            return;
        Dimension oldValue = new Dimension(mapSize.width, mapSize.height);
        int dx = pivot.x - PREFERRED_WIDTH / 2;
        int dy = pivot.y - PREFERRED_WIDTH / 2;
        Point mapPosition = getMapPosition();
        setZoom(getZoom() + 1);
        updateMapPositionWithoutFire(mapPosition.x * 2 + dx + PREFERRED_WIDTH / 2, 
        							mapPosition.y * 2 + dy + PREFERRED_HEIGHT / 2); //zooms in so that the cursor stays were it was (points to the same location)
        firePropertyChange(Global.ZOOM_IN_EVENT, oldValue, mapSize);
        repaint();
    }