diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/LicenseServlet.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/LicenseServlet.java
index dafb565..b69195e 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/LicenseServlet.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/LicenseServlet.java
@@ -32,6 +32,8 @@
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.felix.utils.manifest.Clause;
+import org.apache.felix.utils.manifest.Parser;
 import org.apache.felix.webconsole.DefaultVariableResolver;
 import org.apache.felix.webconsole.SimpleWebConsolePlugin;
 import org.apache.felix.webconsole.WebConsoleUtil;
@@ -118,6 +120,7 @@
                 Bundle bundle = bundles[i];
 
                 JSONObject files = findResource(bundle, LICENSE_FILES);
+                addLicensesFromHeader(bundle, files);
                 if (files.length() > 0)
                 { // has resources
                     JSONObject data = new JSONObject();
@@ -141,6 +144,45 @@
         return path.substring( path.lastIndexOf( '/' ) + 1 );
     }
 
+    private static final JSONObject addLicensesFromHeader(Bundle bundle, JSONObject files)
+        throws JSONException
+    {
+        String target = (String) bundle.getHeaders("").get("Bundle-License");
+        if (target != null)
+        {
+            Clause[] licenses = Parser.parseHeader(target);
+            for (int i = 0; licenses != null && i < licenses.length; i++)
+            {
+                final String name = licenses[i].getName();
+                if (!"<<EXTERNAL>>".equals(name))
+                {
+                    final String link = licenses[i].getAttribute("link");
+                    final String path;
+                    final String url;
+                    if (link == null)
+                    {
+                        path = name;
+                        url = getName(name);
+                    }
+                    else
+                    {
+                        path = link;
+                        url = name;
+                    }
+
+                    // skip entry URL is bundle resources, but doesn't exists
+                    if (path.indexOf("://") == -1 && null == bundle.getEntry(path))
+                        continue;
+
+                    JSONObject entry = new JSONObject();
+                    entry.put("path", path);
+                    entry.put("url", url);
+                    files.append("__res__", entry);
+                }
+            }
+        }
+        return files;
+    }
 
     private static final JSONObject findResource( Bundle bundle, String[] patterns ) throws IOException, JSONException
     {
diff --git a/webconsole/src/main/resources/res/ui/license.css b/webconsole/src/main/resources/res/ui/license.css
index 98f7c7d..bf65987 100644
--- a/webconsole/src/main/resources/res/ui/license.css
+++ b/webconsole/src/main/resources/res/ui/license.css
@@ -37,3 +37,8 @@
 	width: 100%;
 	padding: 1em;
 }
+#licenseDetails iframe {
+	width: 100%;
+	height: 35em;
+	border: none;
+}
diff --git a/webconsole/src/main/resources/res/ui/license.js b/webconsole/src/main/resources/res/ui/license.js
index ca3744f..8fc2891 100644
--- a/webconsole/src/main/resources/res/ui/license.js
+++ b/webconsole/src/main/resources/res/ui/license.js
@@ -59,6 +59,7 @@
                     link += descr.jar + "!/"; // inner jar attribute
                 }
                 link += descr.path;
+				if (descr.path.indexOf('http:') == 0 || descr.path.indexOf('ftp:') == 0) link = descr.path;
 
 				buttons += '<a href="' + link + '">' + descr.url + '</a> ';
 
@@ -79,7 +80,7 @@
     }
     
     if (firstPage) {
-        $.get(firstPage, insertLicenseData);
+		openLicenseLink(firstPage);
     } else {
         licenseDetails.html("");
     }
@@ -88,11 +89,19 @@
 	$("#licenseLeft #" +bundleIndex).addClass('ui-state-default ui-corner-all');
 
     $('#licenseButtons a').click(function() {
-        $.get(this.href, insertLicenseData);
-       return false;
+		openLicenseLink(this.href);
+		return false;
     });
 }
 
+function openLicenseLink(uri) {
+	if (uri.indexOf(window.location.href) == 0 || uri.indexOf(pluginRoot) == 0) { // local URI
+        $.get(uri, insertLicenseData);
+	} else {
+		licenseDetails.html( '<iframe frameborder="0" src="' + uri+ '"></iframe>' );
+	}
+}
+
 
 $(document).ready(function() {
 	// init elements cache
