diff --git a/compiler/Makefile.am b/compiler/Makefile.am
new file mode 100644
index 0000000..8b84d0a
--- /dev/null
+++ b/compiler/Makefile.am
@@ -0,0 +1,2 @@
+install-exec-hook:
+	$(PYTHON) setup.py install install_scripts --install-dir=$(bindir)
diff --git a/compiler/bootstrap.sh b/compiler/bootstrap.sh
new file mode 100755
index 0000000..11f41a9
--- /dev/null
+++ b/compiler/bootstrap.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+rm -rf \
+AUTHORS \
+COPYING \
+ChangeLog \
+INSTALL \
+Makefile \
+Makefile.in \
+Makefile.orig \
+NEWS \
+README \
+aclocal.m4 \
+autom4te.cache \
+autoscan.log \
+config.guess \
+config.h \
+config.hin \
+config.log \
+config.status \
+config.sub \
+configure \
+configure.scan \
+depcomp \
+.deps \
+install-sh \
+.libs \
+libtool \
+ltmain.sh \
+Makefile.in \
+missing
+
+aclocal
+touch NEWS README AUTHORS ChangeLog
+autoconf
+automake -ac
diff --git a/compiler/configure.ac b/compiler/configure.ac
new file mode 100644
index 0000000..dcc7bf2
--- /dev/null
+++ b/compiler/configure.ac
@@ -0,0 +1,13 @@
+AC_PREREQ(2.59)
+
+AC_INIT([compiler], [1.0])
+
+AC_CONFIG_AUX_DIR([.])
+
+AM_INIT_AUTOMAKE
+
+AM_PATH_PYTHON(2.4,, :)
+
+AC_CONFIG_FILES([Makefile])
+
+AC_OUTPUT
diff --git a/compiler/Makefile b/compiler/cpp.mk
similarity index 100%
rename from compiler/Makefile
rename to compiler/cpp.mk
diff --git a/compiler/src/cpp_generator.py b/compiler/src/cpp_generator.py
index ba3380e..97a5f36 100644
--- a/compiler/src/cpp_generator.py
+++ b/compiler/src/cpp_generator.py
@@ -871,15 +871,22 @@
    ${keyType} key;
    ${valueType} elem;
    uint32_t xfer = 0;
+   """+CPP_PROTOCOL_TTYPE+""" keyType;
+   """+CPP_PROTOCOL_TTYPE+""" valueType;
 
-   xfer += iprot->readU32(itrans, count);
+   xfer += iprot->readMapBegin(itrans, keyType, valueType, count);
 
+   /* XXX
+      Should we assert that read key and value type are correct? */
+   
    for(uint32_t ix = 0; ix < count; ix++) {
        ${keyReaderCall};
        ${valueReaderCall};
        value.insert(std::make_pair(key, elem));
    }
 
+   xfer += iprot->readMapEnd(itrans);
+
    return xfer;
 }
 """)
@@ -889,12 +896,14 @@
 
    uint32_t xfer = 0;
 
-   xfer += oprot->writeU32(otrans, value.size());
+   xfer += oprot->writeMapBegin(otrans, ${keyWireType}, ${valueWireType}, value.size());
 
    for(${declaration}::const_iterator ix = value.begin(); ix != value.end(); ++ix) {
        ${keyWriterCall};
        ${valueWriterCall};
    }
+
+   xfer += oprot->writeMapEnd(otrans);
    return xfer;
 }
 """)
@@ -905,6 +914,12 @@
    uint32_t count;
    ${valueType} elem;
    uint32_t xfer = 0;
+   """+CPP_PROTOCOL_TTYPE+""" valueType;
+
+   xfer += iprot->read${protocolSuffix}Begin(itrans, valueType, count);
+
+   /* XXX
+      Should we assert that read value type is correct? */
 
    xfer+= iprot->readU32(itrans,  count);
 
@@ -912,6 +927,8 @@
        ${valueReaderCall};
        value.${insert}(elem);
    }
+
+   xfer += iprot->read${protocolSuffix}End(itrans);
    return xfer;
 }
 """)
@@ -921,11 +938,14 @@
 
    uint32_t xfer = 0;
 
-   xfer+= oprot->writeU32(otrans, value.size());
+   xfer+= oprot->write${protocolSuffix}Begin(otrans, ${valueWireType}, value.size());
 
    for(${declaration}::const_iterator ix = value.begin(); ix != value.end(); ++ix) {
        ${valueWriterCall};
    }
+
+   xfer+= oprot->write${protocolSuffix}End(otrans);
+
    return xfer;
 }
 """)
@@ -949,11 +969,14 @@
 
     else:
 	if isinstance(collection, ListType):
+	    protocolSuffix="List"
 	    insert="push_back"
 	else:
+	    protocolSuffix="Set"
 	    insert="insert"
 
         return CPP_READ_LIST_DEFINITION.substitute(suffix=suffix, declaration=toCTypeDeclaration(collection),
+						   protocolSuffix=protocolSuffix,
                                                    valueReaderCall=valueReaderCall,
                                                    valueType=toCTypeDeclaration(collection.valueType),
 						   insert=insert)
@@ -966,22 +989,36 @@
 
     if isinstance(collection, MapType):
         keyWriterCall = toWriterCall("ix->first", collection.keyType)
+	keyWireType = toWireType(collection.keyType)
         valueWriterCall = toWriterCall("ix->second", collection.valueType)
 
     else:
 	valueWriterCall= toWriterCall("*ix", collection.valueType)
 
+    valueWireType = toWireType(collection.valueType)
+
     if isinstance(collection, MapType):
         return CPP_WRITE_MAP_DEFINITION.substitute(suffix=suffix, declaration=toCTypeDeclaration(collection),
-                                                  keyType=toCTypeDeclaration(collection.keyType),
-                                                  keyWriterCall=keyWriterCall,
-                                                  valueType=toCTypeDeclaration(collection.valueType),
-                                                  valueWriterCall=valueWriterCall)
+						   keyType=toCTypeDeclaration(collection.keyType),
+						   keyWireType=keyWireType,
+						   keyWriterCall=keyWriterCall,
+						   valueType=toCTypeDeclaration(collection.valueType),
+						   valueWireType=valueWireType,
+						   valueWriterCall=valueWriterCall)
 
     else:
+	if isinstance(collection, ListType):
+	    protocolSuffix = "List"
+	elif isinstance(collection, SetType):
+	    protocolSuffix = "Set"
+	else:
+	    raise Exception, "Unknown collection type "+str(type(collection))+":"+str(collection)
+	    
         return CPP_WRITE_LIST_DEFINITION.substitute(suffix=suffix, declaration=toCTypeDeclaration(collection),
-                                                   valueWriterCall=valueWriterCall,
-                                                   valueType=toCTypeDeclaration(collection.valueType))
+						    protocolSuffix=protocolSuffix,
+						    valueWireType=valueWireType,
+						    valueWriterCall=valueWriterCall,
+						    valueType=toCTypeDeclaration(collection.valueType))
 
 
 CPP_READ_STRUCT_DEFINITION = Template("""
diff --git a/compiler/src/php_generator.py b/compiler/src/php_generator.py
index e68a4f7..71b1fd3 100644
--- a/compiler/src/php_generator.py
+++ b/compiler/src/php_generator.py
@@ -329,8 +329,6 @@
 
         result+= self.toReadStructEnd()
 
-        result+= self.indent()+"return "+value+";\n"
-
         return result
 
     def toReadCollection(self, value, collection):
@@ -631,12 +629,17 @@
 
 	result+= self.indent()+"}\n"
 
+	result+= self.reader.toReadMessageEnd()
+
+	if not isVoidType(function.returnType()):
+	    result+= self.indent()+"return "+resultVar.name+"->success;\n"
+	else:
+	    result+= self.indent()+"return;\n"
+
 	self.indent-= 1
 
 	self.oldScope()
 
-	result+= self.reader.toReadMessageEnd()
-
 	result+= self.indent()+"}\n"
 	
 	return result
diff --git a/compiler/src/thrift b/compiler/src/thrift
index 39bdb16..6c252d9 100644
--- a/compiler/src/thrift
+++ b/compiler/src/thrift
@@ -1,16 +1,20 @@
 #!python
 import sys
-from thrift import cpp_generator
 from thrift import generator
+from thrift import cpp_generator
+from thrift import php_generator
 from thrift import parser
 
-def thrift(source, cpp=False, perl=False, php=False, python=False, java=False, ruby=False, debug=False):
+def thrift(source, cpp=False, java=False, perl=False, php=False, python=False, ruby=False, debug=False):
 
     generators = []
 
     if cpp:
 	generators.append(cpp_generator.CPPGenerator())
     
+    if php:
+	generators.append(php_generator.PHPGenerator())
+    
     p = parser.Parser(debug=debug)
 
     p.parse(source, False)
@@ -37,6 +41,9 @@
     if "--cpp" in args:
 	cpp = True
 	args.remove("--cpp")
+    if "--php" in args:
+	php = True
+	args.remove("--php")
     if "--debug" in args:
 	debug = True
 	args.remove("--debug")
