implemented (and tested) printing out whole messages/structures
diff --git a/aos/build/queues/compiler.rb b/aos/build/queues/compiler.rb
index e53e217..899ba85 100644
--- a/aos/build/queues/compiler.rb
+++ b/aos/build/queues/compiler.rb
@@ -58,6 +58,14 @@
 		exit!(-1)
 	end
 end
+def format_pipeline(output)
+  read_in, write_in = IO.pipe()
+  child = Process.spawn('clang-format-3.4 --style=google',
+                        {:in=>read_in, write_in=>:close,
+                         :out=>output})
+  read_in.close
+  [child, write_in]
+end
 def build(filename,globals_template)
 	globals = Globals.new()
 	globals_template.paths.each do |path|
@@ -85,10 +93,20 @@
 
 	header_file = File.open(h_file_path,"w+")
 	cc_file = File.open(cc_file_path,"w+")
-	cpp_tree.write_header_file($cpp_base,header_file)
-	cpp_tree.write_cc_file($cpp_base,cc_file)
-	cc_file.close()
-	header_file.close()
+  header_child, header_output = format_pipeline(header_file)
+  cc_child, cc_output = format_pipeline(cc_file)
+	cpp_tree.write_header_file($cpp_base,header_output)
+	cpp_tree.write_cc_file($cpp_base,cc_output)
+	cc_output.close()
+	header_output.close()
+  if !Process.wait2(cc_child)[1].success?
+    $stderr.puts "Formatting cc file failed."
+    exit 1
+  end
+  if !Process.wait2(header_child)[1].success?
+    $stderr.puts "Formatting header file failed."
+    exit 1
+  end
 end
 begin
 	args = ARGV.dup
diff --git a/aos/build/queues/cpp_pretty_print/dep_file_pair.rb b/aos/build/queues/cpp_pretty_print/dep_file_pair.rb
index 4c9fb1a..c13bb9e 100644
--- a/aos/build/queues/cpp_pretty_print/dep_file_pair.rb
+++ b/aos/build/queues/cpp_pretty_print/dep_file_pair.rb
@@ -182,6 +182,9 @@
 			@protections = {}
 			@deps = []
 		end
+    def parent_class
+      @parent.split(' ')[1] if @parent
+    end
 		class ProtectionGroup
 			def initialize(name)
 				@name = name
diff --git a/aos/build/queues/output/message_dec.rb b/aos/build/queues/output/message_dec.rb
index f1a6375..1666298 100644
--- a/aos/build/queues/output/message_dec.rb
+++ b/aos/build/queues/output/message_dec.rb
@@ -24,12 +24,81 @@
 			member.add_TypeRegister(cpp_tree, type_class, member_func)
     end
 		id = getTypeID()
-		member_func.suite << ("static const ::aos::MessageType kMsgMessageType(#{id}, #{@name.inspect}, {" +
+		member_func.suite << ("static const ::aos::MessageType kMsgMessageType(#{type_class.parent_class ? type_class.parent_class + '::Size()' : 0}, #{id}, #{@loc.queue_name(@name).inspect}, {" +
 		  "#{fields.join(", ")}})");
 		type_class.add_member(member_func)
 		member_func.suite << "::aos::type_cache::Add(kMsgMessageType)"
 		member_func.suite << CPP::Return.new("&kMsgMessageType")
 	end
+        def create_InOrderConstructor(type_class, cpp_tree)
+          cons = CPP::Constructor.new(type_class)
+          type_class.add_member(cons)
+          @members.each do |member|
+            if member.respond_to?(:type_name)
+              type_name = member.type_name(cpp_tree)
+            else
+              type_name = member.type
+            end
+
+            cons.args << "#{type_name} #{member.name}_in"
+            cons.add_cons(member.name, member.name + '_in')
+          end
+        end
+        def create_DefaultConstructor(type_class, cpp_tree)
+          cons = CPP::Constructor.new(type_class)
+          type_class.add_member(cons)
+          cons.add_cons(type_class.parent_class) if type_class.parent_class
+          cons.suite << CPP::FuncCall.build('Zero')
+        end
+	def create_Zero(type_class,cpp_tree)
+		member_func = CPP::MemberFunc.new(type_class,"void","Zero")
+		type_class.add_member(member_func)
+		@members.each do |elem|
+			elem.zeroCall(member_func.suite)
+		end
+                member_func.suite << CPP::FuncCall.new(type_class.parent_class + '::Zero') if type_class.parent_class
+	end
+	def create_Size(type_class,cpp_tree)
+		member_func = CPP::MemberFunc.new(type_class,"size_t","Size")
+		member_func.inline = true
+        member_func.static = true
+		type_class.add_member(member_func.forward_dec)
+		size = 0
+		@members.each do |elem|
+			size += elem.size
+		end
+                if type_class.parent_class
+		  member_func.suite << CPP::Return.new(CPP::Add.new(size,
+							"#{type_class.parent_class}::Size()"))
+                else
+                  member_func.suite << CPP::Return.new(size)
+                end
+	end
+	def create_Serialize(type_class,cpp_tree)
+		member_func = CPP::MemberFunc.new(type_class,"size_t","Serialize")
+		type_class.add_member(member_func)
+		member_func.args << "char *buffer"
+		member_func.suite << "#{type_class.parent_class}::Serialize(buffer)" if type_class.parent_class
+		member_func.const = true
+		offset = type_class.parent_class ? type_class.parent_class + '::Size()' : '0'
+		@members.each do |elem|
+			elem.toNetwork(offset,member_func.suite)
+			offset += " + #{elem.size}";
+		end
+                member_func.suite << CPP::Return.new(CPP::FuncCall.new('Size'))
+	end
+	def create_Deserialize(type_class,cpp_tree)
+		member_func = CPP::MemberFunc.new(type_class,"size_t","Deserialize")
+		type_class.add_member(member_func)
+		member_func.args << "const char *buffer"
+		member_func.suite << "#{type_class.parent_class}::Deserialize(buffer)" if type_class.parent_class
+		offset = type_class.parent_class ? type_class.parent_class + '::Size()' : '0'
+		@members.each do |elem|
+			elem.toHost(offset,member_func.suite)
+			offset += " + #{elem.size}";
+		end
+                member_func.suite << CPP::Return.new(CPP::FuncCall.new('Size'))
+	end
 	def simpleStr()
 		return "{\n" + @members.collect() { |elem| elem.simpleStr() + "\n"}.join("") + "}"
 	end
@@ -84,55 +153,6 @@
     member_func.suite << "length -= super_size"
     member_func.suite << "return super_size + snprintf(buffer, length, " + ([format] + args).join(", ") + ")";
 	end
-	def create_Serialize(type_class,cpp_tree)
-		member_func = CPP::MemberFunc.new(type_class,"size_t","Serialize")
-		type_class.add_member(member_func)
-		#cpp_tree.cc_file.add_funct(member_func)
-		member_func.args << "char *buffer"
-		member_func.suite << "::aos::Message::Serialize(buffer)"
-		member_func.const = true
-		offset = 0
-		@members.each do |elem|
-			elem.toNetwork(offset,member_func.suite)
-			offset += elem.size;
-		end
-                member_func.suite << "return Size()"
-	end
-	def create_Deserialize(type_class,cpp_tree)
-		member_func = CPP::MemberFunc.new(type_class,"size_t","Deserialize")
-		type_class.add_member(member_func)
-		#cpp_tree.cc_file.add_funct(member_func)
-		member_func.args << "const char *buffer"
-		member_func.suite << "::aos::Message::Deserialize(buffer)"
-		offset = 0
-		@members.each do |elem|
-			elem.toHost(offset,member_func.suite)
-			offset += elem.size;
-		end
-                member_func.suite << "return Size()"
-	end
-	def create_Zero(type_class,cpp_tree)
-		member_func = CPP::MemberFunc.new(type_class,"void","Zero")
-		type_class.add_member(member_func)
-		#cpp_tree.cc_file.add_funct(member_func)
-		@members.each do |elem|
-			elem.zeroCall(member_func.suite)
-		end
-		member_func.suite << "::aos::Message::Zero()"
-	end
-	def create_Size(type_class,cpp_tree)
-		member_func = CPP::MemberFunc.new(type_class,"size_t","Size")
-		member_func.inline = true
-        member_func.static = true
-		type_class.add_member(member_func.forward_dec)
-		#cpp_tree.cc_file.add_funct(member_func)
-		size = 0
-		@members.each do |elem|
-			size += elem.size
-		end
-		member_func.suite << CPP::Return.new(CPP::Add.new(size,
-							"::aos::Message::Size()"))
-	end
 	def create_GetType(type_class, cpp_tree)
 		member_func = CPP::MemberFunc.new(type_class,"const ::aos::MessageType*","GetType")
 		type_class.add_member(member_func)
@@ -179,6 +199,8 @@
 		create_Print(type_class,cpp_tree)
 		create_GetType(type_class, cpp_tree)
 		create_DoGetType(type_class, cpp_tree)
+    create_DefaultConstructor(type_class, cpp_tree)
+    create_InOrderConstructor(type_class, cpp_tree)
 
 		b_namespace = cpp_tree.get(b_loc = self.class.builder_loc(@loc))
 
@@ -250,16 +272,14 @@
 		"#{@type} #{@name}"
 	end
 	def toNetwork(offset,suite, parent = "")
-		offset = (offset == 0) ? "" : "#{offset} + "
 		suite << f_call = CPP::FuncCall.build("to_network",
 									 "&#{parent}#{@name}",
-									 "&buffer[#{offset}::aos::Message::Size()]")
+									 "&buffer[#{offset}]")
 		f_call.args.dont_wrap = true
 	end
 	def toHost(offset,suite, parent = "")
-		offset = (offset == 0) ? "" : "#{offset} + "
 		suite << f_call = CPP::FuncCall.build("to_host",
-									 "&buffer[#{offset}::aos::Message::Size()]",
+									 "&buffer[#{offset}]",
 									 "&#{parent}#{@name}")
 		f_call.args.dont_wrap = true
 	end
diff --git a/aos/build/queues/output/q_struct.rb b/aos/build/queues/output/q_struct.rb
index 868f1f2..05c2932 100644
--- a/aos/build/queues/output/q_struct.rb
+++ b/aos/build/queues/output/q_struct.rb
@@ -29,6 +29,12 @@
 		end
 		create_DoGetType(type_class, cpp_tree)
 		create_GetType(type_class, cpp_tree)
+    create_DefaultConstructor(type_class, cpp_tree)
+    create_InOrderConstructor(type_class, cpp_tree)
+    create_Zero(type_class, cpp_tree)
+    create_Size(type_class, cpp_tree)
+    create_Serialize(type_class, cpp_tree)
+    create_Deserialize(type_class, cpp_tree)
 		return type_class
 	end
 	def getPrintFormat()
@@ -42,13 +48,13 @@
 	def toHost(offset, suite, parent)
 		@members.each do |elem|
 			elem.toHost(offset, suite, parent)
-			offset += elem.size()
+			offset += " + #{elem.size()}"
 		end
 	end
 	def toNetwork(offset, suite, parent)
 		@members.each do |elem|
 			elem.toNetwork(offset, suite, parent)
-			offset += elem.size()
+			offset += " + #{elem.size()}"
 		end
 	end
 	def zeroCall(suite, parent)