diff --git a/main.cpp b/main.cpp
index baac511..95bc042 100644
--- a/main.cpp
+++ b/main.cpp
@@ -189,8 +189,7 @@
 void insert(const HalManifest* manifest, Table* table, const RowMutator& mutate) {
     if (manifest == nullptr) return;
     manifest->forEachInstance([&](const auto& manifestInstance) {
-        std::string key = toFQNameString(manifestInstance.package(), manifestInstance.version(),
-                                         manifestInstance.interface(), manifestInstance.instance());
+        std::string key = manifestInstance.description();
         mutate(&(*table)[key]);
         return true;
     });
@@ -200,12 +199,11 @@
     if (matrix == nullptr) return;
     matrix->forEachInstance([&](const auto& matrixInstance) {
         for (auto minorVer = matrixInstance.versionRange().minMinor;
-             minorVer <= matrixInstance.versionRange().maxMinor; ++minorVer) {
-            std::string key = toFQNameString(
-                matrixInstance.package(), Version{matrixInstance.versionRange().majorVer, minorVer},
-                matrixInstance.interface(),
-                matrixInstance.isRegex() ? matrixInstance.regexPattern()
-                                         : matrixInstance.exactInstance());
+             minorVer >= matrixInstance.versionRange().minMinor &&
+             minorVer <= matrixInstance.versionRange().maxMinor;
+             ++minorVer) {
+            Version version{matrixInstance.versionRange().majorVer, minorVer};
+            std::string key = matrixInstance.description(version);
             auto it = table->find(key);
             if (it == table->end()) {
                 mutate(&(*table)[key]);
