public TileImage getImageForTooltip(Coordinate pPosition, int pZoom,
                                        String pTileSource) {
        TileSource tileSource = FreeMindMapController.changeTileSource(
                pTileSource, null);
        if (tileSource != null) {
            mTileSource = tileSource;
            mTileController.setTileSource(tileSource);
        }
        int tileSize = mTileSource.getTileSize();
        int exactx = OsmMercator.LonToX(pPosition.getLon(), pZoom);
        int exacty = OsmMercator.LatToY(pPosition.getLat(), pZoom);
        int x = exactx / tileSize;
        int y = exacty / tileSize;
        // determine other surrounding tiles that are close to the exact
        // point.
        int dx = exactx % tileSize;
        int dy = exacty % tileSize;
        // determine quadrant of cursor in tile:
        if (dx < tileSize / 2) {
            x -= 1;
            dx += tileSize;
        }
        if (dy < tileSize / 2) {
            y -= 1;
            dy += tileSize;
        }
        TileImage tileImage = new TileImage();
        tileImage.setTiles(2, x, y, pZoom, mTileController, logger, dx, dy);
        // wait for tiles:
        int timeout = 60;
        while (timeout-- > 0) {
            try {
                if (tileImage.isLoaded() || tileImage.hasErrors()) {
                    break;
                }
                Thread.sleep(100);
            } catch (Exception e) {
                Resources.getInstance().logException(e);
            }
        }
        return tileImage;
    }