diff --git a/source/dub/packagemanager.d b/source/dub/packagemanager.d
index 7ceedca..e8cd65b 100644
--- a/source/dub/packagemanager.d
+++ b/source/dub/packagemanager.d
@@ -189,7 +189,10 @@
 	 *	 A `Package` if one was found, `null` if none exists.
 	 */
 	private Package lookup (string name, Version vers) {
-		if (auto pkg = this.m_internal.lookup(name, vers))
+		if (!this.m_initialized)
+			this.refresh();
+
+		if (auto pkg = this.m_internal.lookup(name, vers, this))
 			return pkg;
 
 		foreach (ref location; this.m_repositories)
@@ -493,7 +496,7 @@
 
 		Managed packages can be upgraded and removed.
 	*/
-	bool isManagedPackage(Package pack)
+	bool isManagedPackage(const(Package) pack)
 	const {
 		auto ppath = pack.basePackage.path;
 		return isManagedPath(ppath);
@@ -1356,13 +1359,15 @@
 	 * Returns:
 	 *	 A `Package` if one was found, `null` if none exists.
 	 */
-	private inout(Package) lookup(string name, Version ver) inout {
+	private inout(Package) lookup(string name, Version ver, PackageManager mgr) inout {
 		foreach (pkg; this.localPackages)
-			if (pkg.name == name && pkg.version_.matches(ver, VersionMatchMode.strict))
+			if (pkg.name == name && pkg.version_.matches(ver, VersionMatchMode.standard))
 				return pkg;
-		foreach (pkg; this.fromPath)
-			if (pkg.name == name && pkg.version_.matches(ver, VersionMatchMode.strict))
+		foreach (pkg; this.fromPath) {
+			auto pvm = mgr.isManagedPackage(pkg) ? VersionMatchMode.strict : VersionMatchMode.standard;
+			if (pkg.name == name && pkg.version_.matches(ver, pvm))
 				return pkg;
+		}
 		return null;
 	}
 
@@ -1383,7 +1388,7 @@
 	 */
 	private Package load (string name, Version vers, PackageManager mgr)
 	{
-		if (auto pkg = this.lookup(name, vers))
+		if (auto pkg = this.lookup(name, vers, mgr))
 			return pkg;
 
 		string versStr = vers.toString();