Index: /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/AttributionSupport.java
===================================================================
--- /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/AttributionSupport.java	(revision 29243)
+++ /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/AttributionSupport.java	(revision 29244)
@@ -107,9 +107,18 @@
     }
 
+    public boolean handleAttributionCursor(Point p) {
+        if (attrTextBounds != null && attrTextBounds.contains(p)) {
+            return true;
+        } else if (attrImageBounds != null && attrImageBounds.contains(p)) {
+            return true;
+        } else if (attrToUBounds != null && attrToUBounds.contains(p)) {
+            return true;
+        }
+        return false;
+    }
+    
     public boolean handleAttribution(Point p, boolean click) {
         if (source == null || !source.requiresAttribution())
             return false;
-
-        /* TODO: Somehow indicate the link is clickable state to user */
 
         if (attrTextBounds != null && attrTextBounds.contains(p)) {
Index: /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/Demo.java
===================================================================
--- /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/Demo.java	(revision 29243)
+++ /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/Demo.java	(revision 29244)
@@ -4,8 +4,11 @@
 
 import java.awt.BorderLayout;
+import java.awt.Cursor;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
 import java.io.IOException;
 
@@ -162,4 +165,25 @@
         // map.setDisplayPositionByLatLon(49.807, 8.6, 11);
         // map.setTileGridVisible(true);
+        
+        map.addMouseListener(new MouseAdapter() {
+            @Override
+            public void mouseClicked(MouseEvent e) {
+                if (e.getButton() == MouseEvent.BUTTON1) {
+                    map.getAttribution().handleAttribution(e.getPoint(), true);
+                }
+            }
+        });
+        
+        map.addMouseMotionListener(new MouseAdapter() {
+            @Override
+            public void mouseMoved(MouseEvent e) {
+                boolean cursorHand = map.getAttribution().handleAttributionCursor(e.getPoint());
+                if (cursorHand) {
+                    map.setCursor(new Cursor(Cursor.HAND_CURSOR));
+                } else {
+                    map.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
+                }
+            }
+        });
     }
 
Index: /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java
===================================================================
--- /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java	(revision 29243)
+++ /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java	(revision 29244)
@@ -1022,4 +1022,8 @@
     }
 
+    public AttributionSupport getAttribution() {
+        return attribution;
+    }
+
     protected EventListenerList listenerList = new EventListenerList();
 
