diff --git a/scripts/maint/practracker/metrics.py b/scripts/maint/practracker/metrics.py
index 525a058405d69f1eb353c3ac00795b84e7b889d8..c7d2091d0514c7319dc0fdb2c282000184219f12 100644
--- a/scripts/maint/practracker/metrics.py
+++ b/scripts/maint/practracker/metrics.py
@@ -1,8 +1,12 @@
 #!/usr/bin/python
 
+# Implementation of various source code metrics.
+# These are currently ad-hoc string operations and regexps.
+# We might want to use a proper static analysis library in the future, if we want to get more advanced metrics.
+
 import re
 
-def file_len(f):
+def get_file_len(f):
     """Get file length of file"""
     for i, l in enumerate(f):
         pass
@@ -16,14 +20,20 @@ def get_include_count(f):
             include_count += 1
     return include_count
 
-def function_lines(f):
+def get_function_lines(f):
     """
     Return iterator which iterates over functions and returns (function name, function lines)
     """
 
-    # XXX Buggy! Doesn't work with MOCK_IMPL and ENABLE_GCC_WARNINGS
+    # Skip lines with these terms since they confuse our regexp
+    REGEXP_CONFUSE_TERMS = ["MOCK_IMPL", "ENABLE_GCC_WARNINGS", "ENABLE_GCC_WARNING", "DUMMY_TYPECHECK_INSTANCE",
+                            "DISABLE_GCC_WARNING", "DISABLE_GCC_WARNINGS"]
+
     in_function = False
     for lineno, line in enumerate(f):
+        if any(x in line for x in REGEXP_CONFUSE_TERMS):
+            continue
+
         if not in_function:
             # find the start of a function
             m = re.match(r'^([a-zA-Z_][a-zA-Z_0-9]*),?\(', line)
@@ -31,6 +41,7 @@ def function_lines(f):
                 func_name = m.group(1)
                 func_start = lineno
                 in_function = True
+
         else:
             # Fund the end of a function
             if line.startswith("}"):
diff --git a/scripts/maint/practracker/practracker_tests.py b/scripts/maint/practracker/practracker_tests.py
index f3d225207afd1a2a28c036d1cee3ba65183f66e1..cdbab2908e0b2c8c784aaef5e37a9358d4c18d5d 100755
--- a/scripts/maint/practracker/practracker_tests.py
+++ b/scripts/maint/practracker/practracker_tests.py
@@ -40,6 +40,10 @@ class TestFunctionLength(unittest.TestCase):
         # All functions should have length 2
         for name, lines in metrics.function_lines(funcs):
             self.assertEqual(name, "fun")
+
+        funcs.seek(0)
+
+        for name, lines in metrics.function_lines(funcs):
             self.assertEqual(lines, 2)
 
 if __name__ == '__main__':