diff --git a/context.go b/context.go
index f699232..e45c237 100644
--- a/context.go
+++ b/context.go
@@ -1112,12 +1112,10 @@
 }
 
 func (c *Context) addDependency(module *moduleInfo, depName string) []error {
-	depsPos := module.propertyPos["deps"]
-
 	if depName == module.properties.Name {
 		return []error{&Error{
 			Err: fmt.Errorf("%q depends on itself", depName),
-			Pos: depsPos,
+			Pos: module.pos,
 		}}
 	}
 
@@ -1126,7 +1124,7 @@
 		return []error{&Error{
 			Err: fmt.Errorf("%q depends on undefined module %q",
 				module.properties.Name, depName),
-			Pos: depsPos,
+			Pos: module.pos,
 		}}
 	}
 
@@ -1145,7 +1143,7 @@
 		Err: fmt.Errorf("dependency %q of %q missing variant %q",
 			depInfo.modules[0].properties.Name, module.properties.Name,
 			c.prettyPrintVariant(module.dependencyVariant)),
-		Pos: depsPos,
+		Pos: module.pos,
 	}}
 }
 
@@ -1181,14 +1179,12 @@
 func (c *Context) addVariationDependency(module *moduleInfo, variations []Variation,
 	depName string, far bool) []error {
 
-	depsPos := module.propertyPos["deps"]
-
 	depInfo, ok := c.moduleGroups[depName]
 	if !ok {
 		return []error{&Error{
 			Err: fmt.Errorf("%q depends on undefined module %q",
 				module.properties.Name, depName),
-			Pos: depsPos,
+			Pos: module.pos,
 		}}
 	}
 
@@ -1216,7 +1212,7 @@
 			if module == m {
 				return []error{&Error{
 					Err: fmt.Errorf("%q depends on itself", depName),
-					Pos: depsPos,
+					Pos: module.pos,
 				}}
 			}
 			// AddVariationDependency allows adding a dependency on itself, but only if
@@ -1225,7 +1221,7 @@
 			if depInfo == module.group && beforeInModuleList(module, m, module.group.modules) {
 				return []error{&Error{
 					Err: fmt.Errorf("%q depends on later version of itself", depName),
-					Pos: depsPos,
+					Pos: module.pos,
 				}}
 			}
 			module.directDeps = append(module.directDeps, m)
@@ -1237,7 +1233,7 @@
 		Err: fmt.Errorf("dependency %q of %q missing variant %q",
 			depInfo.modules[0].properties.Name, module.properties.Name,
 			c.prettyPrintVariant(newVariant)),
-		Pos: depsPos,
+		Pos: module.pos,
 	}}
 }
 
@@ -1315,7 +1311,7 @@
 				Err: fmt.Errorf("    %q depends on %q",
 					curModule.properties.Name,
 					nextModule.properties.Name),
-				Pos: curModule.propertyPos["deps"],
+				Pos: curModule.pos,
 			})
 			curModule = nextModule
 		}
