diff --git a/mako/codegen.py b/mako/codegen.py
index 63e76a7..679acf8 100644
--- a/mako/codegen.py
+++ b/mako/codegen.py
@@ -276,6 +276,7 @@
                 self.printer.writeline(
                                 "@runtime._decorate_toplevel(%s)" % decorator)
 
+        self.printer.start_source(node.lineno)
         self.printer.writelines(
             "def %s(%s):" % (name, ','.join(args)),
                 # push new frame, assign current frame to __M_caller
diff --git a/mako/exceptions.py b/mako/exceptions.py
index 20b4dce..028ae75 100644
--- a/mako/exceptions.py
+++ b/mako/exceptions.py
@@ -176,7 +176,8 @@
                                     template_source.split("\n")]
                 mods[filename] = (line_map, template_lines)
 
-            template_ln = line_map[lineno]
+            template_ln = line_map[lineno - 1]
+
             if template_ln <= len(template_lines):
                 template_line = template_lines[template_ln - 1]
             else:
diff --git a/mako/pygen.py b/mako/pygen.py
index dfd83d3..0ee19f0 100644
--- a/mako/pygen.py
+++ b/mako/pygen.py
@@ -27,7 +27,7 @@
         self.stream = stream
 
         # current line number
-        self.lineno = 0
+        self.lineno = 1
 
         # a list of lines that represents a buffered "block" of code,
         # which can be later printed relative to an indent level
@@ -39,9 +39,9 @@
 
         # marker for template source lines; this
         # is part of source/template line mapping
-        self.last_source_line = -1
+        self.last_source_line = 0
 
-        self.last_boilerplate_line = -1
+        self.last_boilerplate_line = 0
 
         # mapping of generated python lines to template
         # source lines
diff --git a/mako/template.py b/mako/template.py
index 39ff8bd..a747feb 100644
--- a/mako/template.py
+++ b/mako/template.py
@@ -605,17 +605,14 @@
         source_map['line_map'] = dict((int(k), int(v))
                                     for k, v in source_map['line_map'].items())
         if full_line_map:
-            line_map = source_map['full_line_map'] = dict(
-                (k, v) for k, v in source_map['line_map'].items()
-            )
+            f_line_map = source_map['full_line_map'] = []
+            line_map = source_map['line_map']
 
-            for mod_line in reversed(sorted(line_map)):
-                tmpl_line = line_map[mod_line]
-                while mod_line > 0:
-                    mod_line -= 1
-                    if mod_line in line_map:
-                        break
-                    line_map[mod_line] = tmpl_line
+            curr_templ_line = 1
+            for mod_line in range(1, max(line_map)):
+                if mod_line in line_map:
+                    curr_templ_line = line_map[mod_line]
+                f_line_map.append(curr_templ_line)
         return source_map
 
     @property
diff --git a/test/test_template.py b/test/test_template.py
index 6c30c8a..3dd42be 100644
--- a/test/test_template.py
+++ b/test/test_template.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-from mako.template import Template, ModuleTemplate
+from mako.template import Template, ModuleTemplate, ModuleInfo
 from mako.lookup import TemplateLookup
 from mako.ext.preprocessors import convert_comments
 from mako import exceptions, runtime
@@ -12,6 +12,7 @@
 from test import TemplateTest, eq_, template_base, module_base, \
     requires_python_26_or_greater, assert_raises, assert_raises_message, \
     requires_python_2
+import unittest
 
 class ctx(object):
     def __init__(self, a, b):
@@ -1235,6 +1236,31 @@
             "This is base.", "0", "1", "2", "3", "4"
         ]
 
+class TestTemplateAPI(unittest.TestCase):
+    def test_metadata(self):
+        t = Template("""
+Text
+Text
+% if bar:
+    ${expression}
+% endif
+
+<%include file='bar'/>
+
+""", uri="/some/template")
+        eq_(
+            ModuleInfo.get_module_source_metadata(t.code, full_line_map=True),
+            {
+                'source_encoding': 'ascii',
+                'uri': '/some/template',
+                'filename': None,
+                'boilerplate_lines': [1, 21],
+                'full_line_map': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+                                1, 1, 1, 1, 1, 1, 1, 4, 5, 5, 5, 7, 8, 8,
+                                8, 8, 8, 8, 8],
+                'line_map': {34: 8, 21: 1, 22: 4, 23: 5, 26: 7, 27: 8}
+            }
+        )
 
 class PreprocessTest(TemplateTest):
     def test_old_comments(self):
