diff --git a/src/osmo_gsm_tester/core/log.py b/src/osmo_gsm_tester/core/log.py
index b8182f5..2b8db62 100644
--- a/src/osmo_gsm_tester/core/log.py
+++ b/src/osmo_gsm_tester/core/log.py
@@ -222,7 +222,7 @@
             if origin is None:
                 name = '-'
             elif isinstance(origin, Origin):
-                name = origin.name()
+                name = origin.src()
                 # only log ancestry when there is more than one
                 if origin._parent is not None:
                     deeper_origins = origin.ancestry_str()
@@ -447,6 +447,12 @@
     def name(self):
         return self._name or self.__class__.__name__
 
+    def src(self):
+        '''subclasses may override this to provide more detailed source
+        information with the name, for a backtrace. For example, a line number
+        in a test script.'''
+        return self.name()
+
     __str__ = name
     __repr__ = name
 
@@ -476,7 +482,7 @@
         return origins
 
     def ancestry_str(self):
-        return '↪'.join([o.name() for o in self.ancestry()])
+        return '↪'.join([o.src() for o in self.ancestry()])
 
     def highest_ancestor(self):
         if self._parent:
diff --git a/src/osmo_gsm_tester/core/test.py b/src/osmo_gsm_tester/core/test.py
index fd3ac04..896eb4c 100644
--- a/src/osmo_gsm_tester/core/test.py
+++ b/src/osmo_gsm_tester/core/test.py
@@ -102,11 +102,11 @@
             for log_tgt in self.log_targets:
                 log_tgt.remove()
 
-    def name(self):
+    def src(self):
         l = log.get_line_for_src(self.path)
         if l is not None:
-            return '%s:%s' % (self._name, l)
-        return super().name()
+            return '%s:%s' % (self.name(), l)
+        return self.name()
 
     def elapsed_time(self):
         'time elapsed since test was started'
