diff --git a/classes/common.php b/classes/common.php
index 5710f46..963efe5 100644
--- a/classes/common.php
+++ b/classes/common.php
@@ -616,37 +616,64 @@
 
    $max = 5;
    while ($max-- > 0) {
-    $ca = current($va);
-    $cb = current($vb);
+	    $ca = current($va);
+	    $cb = current($vb);
 
-    // FALSE means that we've run out of terms. If both numbers
-    // run out of terms, then they're the same. It's unlikely
-    // that either of the following two lines will ever evaluate
-    // to true since the getVersion() method should always answer
-    // a three-part version number. But, we'll leave it just in
-    // case something changes later.
-    if ($ca === FALSE && ($cb === FALSE)) {
-     return 0;
-    } elseif ($ca === FALSE) {
-      return -1;
-    } elseif ($cb === FALSE) {
-       return 1;
-    } else {
-     // Compare as integers rather than strings.
-     $ca = (int) $ca;
-     $cb = (int) $cb;
+	    // FALSE means that we've run out of terms. If we're out of terms,
+	    // assume that the value is zero. This allows us to, for example,
+	    // meaningfully and correctly compare '3.0' and '3.0.0'.
+	    if ($ca === FALSE) $ca = 0;
+		if ($cb === FALSE) $cb = 0;
 
-     if ($ca > $cb) {
-      return 1;
-     } elseif ($cb > $ca) {
-       return -1;
-     }
+		// Compare as integers rather than strings.
+		$ca = (int) $ca;
+		$cb = (int) $cb;
 
-     next($va);
-     next($vb);
-    }
+		if ($ca > $cb) {
+			return 1;
+		} elseif ($cb > $ca) {
+			return -1;
+		}
+
+		next($va);
+		next($vb);
    }
 
    return 0;
 }
+
+/**
+ * This function answers the id of the Eclipse project that produces the bits
+ * with the provided ClearlyDefined coordinates.
+ *
+ * FIXME This function doesn't belong here.
+ */
+function getEclipseProjectFor($id) {
+	// FIXME We should draw on a data source of some kind rather than hardcoding.
+	$map = array(
+			'*/*/org.glassfish.grizzly/grizzly-npn*/2.0.0+' => 'ee4j.grizzly',
+			'*/*/org.glassfish.grizzly/grizzly-thrift/1.3.15+' => 'ee4j.grizzly',
+			'*/*/org.glassfish.grizzly/grizzly-memcached/1.3.19+' => 'ee4j.grizzly',
+			'*/*/org.glassfish.grizzly/*/2.4.4+' => 'ee4j.grizzly',
+			'*/*/org.glassfish.hk2*/*/2.6+' => 'ee4j.glassfish',
+			'*/*/org.glassfish.mq/*/5.1.3+' => 'ee4j.openmq',
+			'*/*/org.glassfish.tyrus*/*/1.15+' => 'ee4j.tyrus'
+	);
+
+	$parts = explode('/', $id);
+	foreach($map as $pattern => $project) {
+		$bits = explode('/', $pattern);
+		if (count($bits) < 5) continue;
+		if (!fnmatch($bits[0], $parts[0])) continue;
+		if (!fnmatch($bits[1], $parts[1])) continue;
+		if (!fnmatch($bits[2], $parts[2])) continue;
+		if (!fnmatch($bits[3], $parts[3])) continue;
+		if ($bits[4] == '*') return $project;
+		if (preg_match('/^(?<version>.*)\+$/', $bits[4], $matches)) {
+			if (compareSemanticVersion($matches['version'], $parts[4]) <= 0) return $project;
+		} elseif (compareSemanticVersion($bits[4], $parts[4]) == 0) return $project;
+	}
+
+	return null;
+}
 ?>
\ No newline at end of file
diff --git a/services/license_check.php b/services/license_check.php
index 93eaadf..68232a4 100755
--- a/services/license_check.php
+++ b/services/license_check.php
@@ -49,6 +49,9 @@
  * TODO Parameters for default type and provider.
  */
 
+require_once dirname(__FILE__) . '/../classes/common.php';
+require_once dirname(__FILE__) . '/../classes/License.class.inc';
+
 /**
  * Try to massage the content identifier into ClearlyDefined coordinates. That is,
  * for example, recognize Maven coordinates of the form <em>groupid:artifactid:version</em>, and
@@ -159,6 +162,23 @@
 
 function matchAgainstEclipseProjects(&$results) {
 	foreach(array_keys($results['unmatched']) as $id) {
+		// Attempt to determine the Eclipse Project id from the
+		// ClearlyDefined coordinates. If we can identify the project
+		// then we can provide more information back.
+		if ($projectId = getEclipseProjectFor($id)) {
+			$license = License::getLicense($projectId);
+			unset($results['unmatched'][$id]);
+			$results['approved'][$id] = array(
+					'id' => $id,
+					'license' => $license == null ? '' : $license->getSPDXCode(),
+					'status' => 'approved',
+					'sourceUrl' => '',
+					'definitionUrl' => '',
+					'authority' => $projectId,
+					'confidence' => 100
+			);
+		}
+
 		if ($parts = preg_split('/\//', $id)) {
 			if (matchesEclipseNamespace($parts[2], $parts[3])) {
 				unset($results['unmatched'][$id]);
