Index: trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 13213)
+++ trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 13214)
@@ -73,4 +73,5 @@
 import org.openstreetmap.gui.jmapviewer.tilesources.AbstractTMSTileSource;
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.ExpertToggleAction;
 import org.openstreetmap.josm.actions.ImageryAdjustAction;
 import org.openstreetmap.josm.actions.RenameLayerAction;
@@ -93,4 +94,5 @@
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.NavigatableComponent.ZoomChangeListener;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
 import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
@@ -117,4 +119,5 @@
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.HttpClient;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.MemoryManager;
@@ -499,4 +502,40 @@
     }
 
+    private void sendOsmTileRequest(String request) {
+        Tile clickedTile = clickedTileHolder.getTile();
+        if (clickedTile != null) {
+            try {
+                new Notification(HttpClient.create(new URL(clickedTile.getUrl() + '/' + request))
+                        .connect().fetchContent()).show();
+            } catch (IOException ex) {
+                Logging.error(ex);
+            }
+        }
+    }
+
+    private final class GetOsmTileStatusAction extends AbstractAction {
+        private GetOsmTileStatusAction() {
+            super(tr("Get tile status"));
+            setEnabled(clickedTileHolder.getTile() != null);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            sendOsmTileRequest("status");
+        }
+    }
+
+    private final class MarkOsmTileDirtyAction extends AbstractAction {
+        private MarkOsmTileDirtyAction() {
+            super(tr("Force tile rendering"));
+            setEnabled(clickedTileHolder.getTile() != null);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            sendOsmTileRequest("dirty");
+        }
+    }
+
     /**
      * Simple class to keep clickedTile within hookUpMapView
@@ -577,4 +616,8 @@
             add(new JMenuItem(new LoadTileAction()));
             add(new JMenuItem(new ShowTileInfoAction()));
+            if (ExpertToggleAction.isExpert() && tileSource.getBaseUrl().contains(".tile.openstreetmap.org/")) {
+                add(new JMenuItem(new GetOsmTileStatusAction()));
+                add(new JMenuItem(new MarkOsmTileDirtyAction()));
+            }
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java	(revision 13213)
+++ trunk/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java	(revision 13214)
@@ -40,4 +40,5 @@
 import org.openstreetmap.josm.gui.layer.imagery.ImageryFilterSettings;
 import org.openstreetmap.josm.gui.layer.imagery.TileSourceDisplaySettings;
+import org.openstreetmap.josm.gui.widgets.UrlLabel;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProcessor;
@@ -176,5 +177,8 @@
     }
 
-    protected JTextField createTextField(String text) {
+    protected JComponent createTextField(String text) {
+        if (text != null && text.matches("https?://.*")) {
+            return new UrlLabel(text);
+        }
         JTextField ret = new JTextField(text);
         ret.setEditable(false);
