Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/ViewLicenseAction.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/ViewLicenseAction.java	(revision 28114)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/ViewLicenseAction.java	(revision 28114)
@@ -0,0 +1,49 @@
+//    JOSM opendata plugin.
+//    Copyright (C) 2011-2012 Don-vip
+//
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+//
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+package org.openstreetmap.josm.plugins.opendata.core.actions;
+
+import java.awt.event.ActionEvent;
+import java.io.IOException;
+
+import javax.swing.Action;
+
+import org.openstreetmap.josm.actions.JosmAction;
+import org.openstreetmap.josm.plugins.opendata.core.OdConstants;
+import org.openstreetmap.josm.plugins.opendata.core.gui.ViewLicenseDialog;
+import org.openstreetmap.josm.plugins.opendata.core.licenses.License;
+import org.openstreetmap.josm.plugins.opendata.core.util.OdUtils;
+import org.openstreetmap.josm.tools.CheckParameterUtil;
+
+public class ViewLicenseAction extends JosmAction implements OdConstants {
+
+	private final License license;
+	
+	public ViewLicenseAction(License license, String title, String description) {
+		super(title, null, description, null, false);
+		CheckParameterUtil.ensureParameterNotNull(license, "license");
+		this.license = license;
+        putValue(Action.SMALL_ICON, OdUtils.getImageIcon(ICON_AGREEMENT_24));
+	}
+
+	@Override
+	public void actionPerformed(ActionEvent e) {
+		try {
+			new ViewLicenseDialog(license).showDialog();
+		} catch (IOException ex) {
+			ex.printStackTrace();
+		}
+	}
+}
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/AskLicenseAgreementDialog.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/AskLicenseAgreementDialog.java	(revision 28113)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/AskLicenseAgreementDialog.java	(revision 28114)
@@ -3,89 +3,18 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
 import java.io.IOException;
 
-import javax.swing.Icon;
-import javax.swing.JEditorPane;
-import javax.swing.JOptionPane;
-import javax.swing.JScrollPane;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.plugins.opendata.core.licenses.License;
 
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.gui.ExtendedDialog;
-import org.openstreetmap.josm.plugins.opendata.core.licenses.License;
-import org.openstreetmap.josm.tools.ImageProvider;
-
-public class AskLicenseAgreementDialog extends ExtendedDialog {
-
-	private final License license;
-	private final JEditorPane htmlPane;
-	private boolean summary;
+public class AskLicenseAgreementDialog extends ViewLicenseDialog {
 	
 	public AskLicenseAgreementDialog(License license) throws IOException {
-		super(Main.parent, tr("License Agreement"), new String[] {tr("Accept"), "", tr("Refuse")});
+		super(license, Main.parent, tr("License Agreement"), new String[] {tr("Accept"), "", tr("Refuse")});
 		
-		this.license = license;
-		this.htmlPane = new JEditorPane();
-		//htmlPane.setEditorKitForContentType(pdfEditorKit.getContentType(), pdfEditorKit);
-		htmlPane.setEditable(false);
-		if (license.getSummaryURL() != null) {
-			htmlPane.setPage(license.getSummaryURL());
-			summary = true;
-		} else {
-			htmlPane.setPage(license.getURL());
-			summary = false;
-		}
-		JScrollPane scrollPane = new JScrollPane(htmlPane);
-		scrollPane.setPreferredSize(new Dimension(800, 600));
-        
-        setButtonIcons(new Icon[] {
-                ImageProvider.get("ok"),
-                ImageProvider.get("agreement24"),
-                ImageProvider.get("cancel"),
-                });
         setToolTipTexts(new String[] {
                 tr("I understand and accept these terms and conditions"),
                 tr("View the full text of this license"),
                 tr("I refuse these terms and conditions. Cancel download.")});
-        if (license.getIcon() != null) {
-        	setIcon(license.getIcon());
-        } else {
-        	setIcon(JOptionPane.INFORMATION_MESSAGE);
-        }
-        setCancelButton(3);
-        setMinimumSize(new Dimension(300, 200));
-        setContent(scrollPane, false);
-	}
-
-	@Override
-	protected void buttonAction(int buttonIndex, ActionEvent evt) {
-		if (buttonIndex == 1) {
-			try {
-				if (summary) {
-					buttons.get(1).setText(tr("View summary"));
-					htmlPane.setPage(license.getURL());
-				} else {
-					buttons.get(1).setText(tr("View full text"));
-					htmlPane.setPage(license.getSummaryURL());
-				}
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-			summary = !summary;
-		} else {
-			super.buttonAction(buttonIndex, evt);
-		}
-	}
-
-	@Override
-	public void setupDialog() {
-		super.setupDialog();
-		buttons.get(1).setEnabled(license.getSummaryURL() != null && license.getURL() != null);
-		if (summary) {
-			buttons.get(1).setText(tr("View full text"));
-		} else {
-			buttons.get(1).setText(tr("View summary"));
-		}
 	}
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ViewLicenseDialog.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ViewLicenseDialog.java	(revision 28114)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ViewLicenseDialog.java	(revision 28114)
@@ -0,0 +1,95 @@
+package org.openstreetmap.josm.plugins.opendata.core.gui;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.io.IOException;
+
+import javax.swing.Icon;
+import javax.swing.JEditorPane;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.plugins.opendata.core.licenses.License;
+import org.openstreetmap.josm.tools.ImageProvider;
+
+public class ViewLicenseDialog extends ExtendedDialog {
+
+	private final License license;
+	private final JEditorPane htmlPane;
+	private boolean summary;
+	
+	public ViewLicenseDialog(License license) throws IOException {
+		this(license, Main.parent, tr("License"), new String[] {tr("OK"), "", tr("Cancel")});
+	}
+
+	public ViewLicenseDialog(License license, Component parent, String title, String[] buttonTexts) throws IOException {
+		super(parent, title, buttonTexts);
+		
+		this.license = license;
+		this.htmlPane = new JEditorPane();
+		htmlPane.setEditable(false);
+		if (license.getSummaryURL() != null) {
+			htmlPane.setPage(license.getSummaryURL());
+			summary = true;
+		} else {
+			htmlPane.setPage(license.getURL());
+			summary = false;
+		}
+		JScrollPane scrollPane = new JScrollPane(htmlPane);
+		scrollPane.setPreferredSize(new Dimension(800, 600));
+        
+        setButtonIcons(new Icon[] {
+                ImageProvider.get("ok"),
+                ImageProvider.get("agreement24"),
+                ImageProvider.get("cancel"),
+                });
+        setToolTipTexts(new String[] {
+                null,
+                tr("View the full text of this license"),
+                null});
+        if (license.getIcon() != null) {
+        	setIcon(license.getIcon());
+        } else {
+        	setIcon(JOptionPane.INFORMATION_MESSAGE);
+        }
+        setCancelButton(3);
+        setMinimumSize(new Dimension(300, 200));
+        setContent(scrollPane, false);
+	}
+
+	@Override
+	protected void buttonAction(int buttonIndex, ActionEvent evt) {
+		if (buttonIndex == 1) {
+			try {
+				if (summary) {
+					buttons.get(1).setText(tr("View summary"));
+					htmlPane.setPage(license.getURL());
+				} else {
+					buttons.get(1).setText(tr("View full text"));
+					htmlPane.setPage(license.getSummaryURL());
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			summary = !summary;
+		} else {
+			super.buttonAction(buttonIndex, evt);
+		}
+	}
+
+	@Override
+	public void setupDialog() {
+		super.setupDialog();
+		buttons.get(1).setEnabled(license.getSummaryURL() != null && license.getURL() != null);
+		if (summary) {
+			buttons.get(1).setText(tr("View full text"));
+		} else {
+			buttons.get(1).setText(tr("View summary"));
+		}
+	}
+}
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdDataLayer.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdDataLayer.java	(revision 28113)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdDataLayer.java	(revision 28114)
@@ -36,4 +36,5 @@
 import org.openstreetmap.josm.plugins.opendata.core.OdConstants;
 import org.openstreetmap.josm.plugins.opendata.core.actions.OpenLinkAction;
+import org.openstreetmap.josm.plugins.opendata.core.actions.ViewLicenseAction;
 import org.openstreetmap.josm.plugins.opendata.core.datasets.AbstractDataSetHandler;
 import org.openstreetmap.josm.plugins.opendata.core.io.OsmDownloader;
@@ -161,12 +162,11 @@
 				result.add(new OpenLinkAction(lic.getURL(), ICON_AGREEMENT_24, 
 						tr("View License"), tr("Launch browser to the license page of the selected data set")));
-			} else {
-				// TODO: view embedded licenses
 			}
 			if (lic.getSummaryURL() != null && lic.getSummaryURL().getProtocol().startsWith("http")) {
 				result.add(new OpenLinkAction(lic.getSummaryURL(), ICON_AGREEMENT_24, 
 						tr("View License (summary)"), tr("Launch browser to the summary license page of the selected data set")));
-			} else {
-				// TODO: view embedded licenses
+			}
+			if ((lic.getURL() != null && !lic.getURL().getProtocol().startsWith("http")) || (lic.getSummaryURL() != null && !lic.getSummaryURL().getProtocol().startsWith("http"))) {
+				result.add(new ViewLicenseAction(lic, tr("View License"), tr("View the license of the selected data set")));
 			}
 		}
