Index: /trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java	(revision 4491)
+++ /trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java	(revision 4492)
@@ -76,6 +76,8 @@
     private List<String> serverProjections;
     private String attributionText;
+    private String attributionLinkURL;
     private String attributionImage;
-    private String attributionLinkURL;
+    private String attributionImageURL;
+    private String termsOfUseText;
     private String termsOfUseURL;
     private String countryCode = "";
@@ -91,4 +93,6 @@
         @pref String attribution_url;
         @pref String logo_image;
+        @pref String logo_url;
+        @pref String terms_of_use_text;
         @pref String terms_of_use_url;
         @pref String country_code = "";
@@ -112,4 +116,6 @@
             attribution_url = i.attributionLinkURL;
             logo_image = i.attributionImage;
+            logo_url = i.attributionImageURL;
+            terms_of_use_text = i.termsOfUseText;
             terms_of_use_url = i.termsOfUseURL;
             country_code = i.countryCode;
@@ -204,6 +210,8 @@
         }
         attributionText = e.attribution_text;
+        attributionLinkURL = e.attribution_url;
         attributionImage = e.logo_image;
-        attributionLinkURL = e.attribution_url;
+        attributionImageURL = e.logo_url;
+        termsOfUseText = e.terms_of_use_text;
         termsOfUseURL = e.terms_of_use_url;
         countryCode = e.country_code;
@@ -267,7 +275,9 @@
         this.eulaAcceptanceRequired = null;
         this.bounds = i.bounds;
+        this.attributionText = i.attributionText;
+        this.attributionLinkURL = i.attributionLinkURL;
         this.attributionImage = i.attributionImage;
-        this.attributionLinkURL = i.attributionLinkURL;
-        this.attributionText = i.attributionText;
+        this.attributionImageURL = i.attributionImageURL;
+        this.termsOfUseText = i.termsOfUseText;
         this.termsOfUseURL = i.termsOfUseURL;
         this.serverProjections = i.serverProjections;
@@ -327,4 +337,8 @@
     }
 
+    public void setAttributionImageURL(String text) {
+        attributionImageURL = text;
+    }
+
     public String getAttributionLinkURL() {
         return attributionLinkURL;
@@ -333,4 +347,8 @@
     public void setAttributionLinkURL(String text) {
         attributionLinkURL = text;
+    }
+
+    public void setTermsOfUseText(String text) {
+        termsOfUseText = text;
     }
 
@@ -514,33 +532,47 @@
     {
         this.attributionImage = i.attributionImage;
+        this.attributionImageURL = i.attributionImageURL;
+        this.attributionText = i.attributionText;
         this.attributionLinkURL = i.attributionLinkURL;
-        this.attributionText = i.attributionText;
+        this.termsOfUseText = i.termsOfUseText;
         this.termsOfUseURL = i.termsOfUseURL;
     }
 
-    public void setAttribution(TMSTileSource s)
-    {
-        if(attributionLinkURL != null) {
-            if(attributionLinkURL.equals("osm"))
+    /**
+     * Applies the attribution from this object to a TMSTileSource.
+     */
+    public void setAttribution(TMSTileSource s) {
+        if (attributionText != null) {
+            if (attributionText.equals("osm")) {
+                s.setAttributionText(new Mapnik().getAttributionText(0, null, null));
+            } else {
+                s.setAttributionText(attributionText);
+            }
+        }
+        if (attributionLinkURL != null) {
+            if (attributionLinkURL.equals("osm")) {
                 s.setAttributionLinkURL(new Mapnik().getAttributionLinkURL());
-            else
+            } else {
                 s.setAttributionLinkURL(attributionLinkURL);
-        }
-        if(attributionText != null) {
-            if(attributionText.equals("osm"))
-                s.setAttributionText(new Mapnik().getAttributionText(0, null, null));
-            else
-                s.setAttributionText(attributionText);
-        }
-        if(attributionImage != null) {
+            }
+        }
+        if (attributionImage != null) {
             ImageIcon i = ImageProvider.getIfAvailable(null, attributionImage);
-            if(i != null)
+            if (i != null) {
                 s.setAttributionImage(i.getImage());
-        }
-        if(termsOfUseURL != null) {
-            if(termsOfUseURL.equals("osm"))
+            }
+        }
+        if (attributionImageURL != null) {
+            s.setAttributionImageURL(attributionImageURL);
+        }
+        if (termsOfUseText != null) {
+            s.setTermsOfUseText(termsOfUseText);
+        }
+        if (termsOfUseURL != null) {
+            if (termsOfUseURL.equals("osm")) {
                 s.setTermsOfUseURL(new Mapnik().getTermsOfUseURL());
-            else
+            } else {
                 s.setTermsOfUseURL(termsOfUseURL);
+            }
         }
     }
Index: /trunk/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java	(revision 4491)
+++ /trunk/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java	(revision 4492)
@@ -71,11 +71,15 @@
         @Override public String getTileUrl(int zoom, int tilex, int tiley) throws IOException { return source.getTileUrl(zoom, tilex, tiley); }
 
+        @Override public boolean requiresAttribution() { return source.requiresAttribution(); }
+
+        @Override public String getAttributionText(int zoom, Coordinate topLeft, Coordinate botRight) { return source.getAttributionText(zoom, topLeft, botRight); }
+
+        @Override public String getAttributionLinkURL() { return source.getAttributionLinkURL(); }
+
         @Override public Image getAttributionImage() { return source.getAttributionImage(); }
 
-        @Override public String getAttributionText(int zoom, Coordinate topLeft, Coordinate botRight) { return source.getAttributionText(zoom, topLeft, botRight); }
-
-        @Override public boolean requiresAttribution() { return source.requiresAttribution(); }
-
-        @Override public String getAttributionLinkURL() { return source.getAttributionLinkURL(); }
+        @Override public String getAttributionImageURL() { return source.getAttributionImageURL(); }
+
+        @Override public String getTermsOfUseText() { return source.getTermsOfUseText(); }
 
         @Override public String getTermsOfUseURL() { return source.getTermsOfUseURL(); }
Index: /trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java	(revision 4491)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java	(revision 4492)
@@ -1171,9 +1171,11 @@
         int otherZooms[] = { -1, 1, -2, 2, -3, -4, -5};
         for (int zoomOffset : otherZooms) {
-            if (!autoZoom)
+            if (!autoZoom) {
                 break;
+            }
             int newzoom = displayZoomLevel + zoomOffset;
-            if (newzoom < MIN_ZOOM)
+            if (newzoom < MIN_ZOOM) {
                 continue;
+            }
             if (missedTiles.size() <= 0) {
                 break;
@@ -1237,5 +1239,5 @@
             myDrawString(g, tr("Best zoom: {0}", Math.log(getScaleFactor(1))/Math.log(2)/2+1), 50, 185);
         }*/
-    }// end of paint method
+    }
 
     /**
Index: /trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java	(revision 4491)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java	(revision 4492)
@@ -302,5 +302,4 @@
     }
 
-
     /**
      *
@@ -312,5 +311,4 @@
         return new EastNorth((xIndex * imageSize) / info.getPixelPerDegree(), (yIndex * imageSize) / info.getPixelPerDegree());
     }
-
 
     protected void downloadAndPaintVisible(Graphics g, final MapView mv, boolean real){
Index: /trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java	(revision 4491)
+++ /trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java	(revision 4492)
@@ -253,7 +253,7 @@
                         entry.setAttributionImage(accumulator.toString());
                     } else if (qName.equals("logo-url")) {
-                        // TODO: it should be possible to specify the link for the logo
+                        entry.setAttributionImageURL(accumulator.toString());
                     } else if (qName.equals("terms-of-use-text")) {
-                        // TODO: it should be possible to configure the terms of use display text
+                        entry.setTermsOfUseText(accumulator.toString());
                     } else if (qName.equals("terms-of-use-url")) {
                         entry.setTermsOfUseURL(accumulator.toString());
