diff --git a/vulncheck/binary.go b/vulncheck/binary.go
index 273a3fd..4c5013be 100644
--- a/vulncheck/binary.go
+++ b/vulncheck/binary.go
@@ -103,19 +103,9 @@
 
 func convertModules(mods []*packages.Module) []*Module {
 	vmods := make([]*Module, len(mods))
-	// TODO(github.com/golang/go/issues/50030): should we share unique
-	// modules? Not needed now as module info is not returned by Binary.
+	convertMod := newModuleConverter()
 	for i, mod := range mods {
-		vmods[i] = &Module{
-			Path:    mod.Path,
-			Version: mod.Version,
-		}
-		if mod.Replace != nil {
-			vmods[i].Replace = &Module{
-				Path:    mod.Replace.Path,
-				Version: mod.Replace.Version,
-			}
-		}
+		vmods[i] = convertMod(mod)
 	}
 	return vmods
 }
diff --git a/vulncheck/vulncheck.go b/vulncheck/vulncheck.go
index ab6ad8b..5d927f4 100644
--- a/vulncheck/vulncheck.go
+++ b/vulncheck/vulncheck.go
@@ -51,25 +51,7 @@
 // Convert converts a slice of packages.Package to
 // a slice of corresponding vulncheck.Package.
 func Convert(pkgs []*packages.Package) []*Package {
-	ms := make(map[*packages.Module]*Module)
-	var mod func(*packages.Module) *Module
-	mod = func(m *packages.Module) *Module {
-		if m == nil {
-			return nil
-		}
-		if vm, ok := ms[m]; ok {
-			return vm
-		}
-		vm := &Module{
-			Path:    m.Path,
-			Version: m.Version,
-			Dir:     m.Dir,
-			Replace: mod(m.Replace),
-		}
-		ms[m] = vm
-		return vm
-	}
-
+	convertMod := newModuleConverter()
 	ps := make(map[*packages.Package]*Package)
 	var pkg func(*packages.Package) *Package
 	pkg = func(p *packages.Package) *Package {
@@ -84,7 +66,7 @@
 			Fset:      p.Fset,
 			Syntax:    p.Syntax,
 			TypesInfo: p.TypesInfo,
-			Module:    mod(p.Module),
+			Module:    convertMod(p.Module),
 		}
 		ps[p] = vp
 
@@ -381,3 +363,25 @@
 	}
 	return symbolVulns
 }
+
+func newModuleConverter() func(m *packages.Module) *Module {
+	pmap := map[*packages.Module]*Module{}
+	var convert func(m *packages.Module) *Module
+	convert = func(m *packages.Module) *Module {
+		if m == nil {
+			return nil
+		}
+		if vm, ok := pmap[m]; ok {
+			return vm
+		}
+		vm := &Module{
+			Path:    m.Path,
+			Version: m.Version,
+			Dir:     m.Dir,
+			Replace: convert(m.Replace),
+		}
+		pmap[m] = vm
+		return vm
+	}
+	return convert
+}
