diff --git a/scripts/buildcommands.py b/scripts/buildcommands.py
index 1de62d756..242ad8f7f 100644
--- a/scripts/buildcommands.py
+++ b/scripts/buildcommands.py
@@ -39,7 +39,7 @@ class HandleCallList:
         self.call_lists.setdefault(funcname, []).append(callname)
     def update_data_dictionary(self, data):
         pass
-    def generate_code(self):
+    def generate_code(self, options):
         code = []
         for funcname, funcs in self.call_lists.items():
             func_code = ['    extern void %s(void);\n    %s();' % (f, f)
@@ -76,7 +76,7 @@ class HandleStaticStrings:
     def update_data_dictionary(self, data):
         data['static_strings'] = { i + STATIC_STRING_MIN: s
                                    for i, s in enumerate(self.static_strings) }
-    def generate_code(self):
+    def generate_code(self, options):
         code = []
         for i, s in enumerate(self.static_strings):
             code.append('    if (__builtin_strcmp(str, "%s") == 0)\n'
@@ -113,7 +113,7 @@ class HandleConstants:
         self.constants[name] = value
     def update_data_dictionary(self, data):
         data['config'] = self.constants
-    def generate_code(self):
+    def generate_code(self, options):
         return ""
 
 Handlers.append(HandleConstants())
@@ -166,7 +166,6 @@ class HandleCommandGeneration:
                 msgid += 1
                 self.msg_to_id[msg] = msgid
     def update_data_dictionary(self, data):
-        self.create_message_ids()
         messages = { msgid: msg for msg, msgid in self.msg_to_id.items() }
         data['messages'] = messages
         commands = [self.msg_to_id[msg]
@@ -293,7 +292,8 @@ const uint8_t command_index_size PROGMEM = ARRAY_SIZE(command_index);
                     paramid, ', '.join(argtypes),))
         params.append('')
         return "\n".join(params)
-    def generate_code(self):
+    def generate_code(self, options):
+        self.create_message_ids()
         parsercode = self.generate_responses_code()
         cmdcode = self.generate_commands_code()
         paramcode = self.generate_param_code()
@@ -306,12 +306,10 @@ Handlers.append(HandleCommandGeneration())
 # Identify data dictionary generation
 ######################################################################
 
-def build_identify(version, toolstr):
+def build_identify():
     data = {}
     for h in Handlers:
         h.update_data_dictionary(data)
-    data['version'] = version
-    data['build_versions'] = toolstr
 
     # Format compressed info into C code
     data = json.dumps(data)
@@ -322,9 +320,6 @@ def build_identify(version, toolstr):
             out.append('\n   ')
         out.append(" 0x%02x," % (ord(zdata[i]),))
     fmt = """
-// version: %s
-// build_versions: %s
-
 const uint8_t command_identify_data[] PROGMEM = {%s
 };
 
@@ -332,7 +327,7 @@ const uint8_t command_identify_data[] PROGMEM = {%s
 const uint32_t command_identify_size PROGMEM
     = ARRAY_SIZE(command_identify_data);
 """
-    return data, fmt % (version, toolstr, ''.join(out), len(zdata), len(data))
+    return data, fmt % (''.join(out), len(zdata), len(data))
 
 
 ######################################################################
@@ -406,6 +401,23 @@ def tool_versions(tools):
     cleanbuild = versions[0] and versions[1] and success == len(tools)
     return cleanbuild, "gcc: %s binutils: %s" % (versions[0], versions[1])
 
+# Add version information to the data dictionary
+class HandleVersions:
+    def __init__(self):
+        self.ctr_dispatch = {}
+        self.toolstr = self.version = ""
+    def update_data_dictionary(self, data):
+        data['version'] = self.version
+        data['build_versions'] = self.toolstr
+    def generate_code(self, options):
+        cleanbuild, self.toolstr = tool_versions(options.tools)
+        self.version = build_version(options.extra)
+        sys.stdout.write("Version: %s\n" % (self.version,))
+        return "\n// version: %s\n// build_versions: %s\n" % (
+            self.version, self.toolstr)
+
+Handlers.append(HandleVersions())
+
 
 ######################################################################
 # Main code
@@ -444,14 +456,11 @@ def main():
             error("Unknown build time command '%s'" % cmd)
         ctr_dispatch[cmd](req)
     # Create identify information
-    cleanbuild, toolstr = tool_versions(options.tools)
-    version = build_version(options.extra)
-    sys.stdout.write("Version: %s\n" % (version,))
-    datadict, icode = build_identify(version, toolstr)
+    code = "".join([h.generate_code(options) for h in Handlers])
+    datadict, icode = build_identify()
     # Write output
     f = open(outcfile, 'wb')
-    f.write(FILEHEADER + "".join([h.generate_code() for h in Handlers])
-            + icode)
+    f.write(FILEHEADER + code + icode)
     f.close()
 
     # Write data dictionary