diff --git a/compiler/cpp/src/generate/t_erl_generator.cc b/compiler/cpp/src/generate/t_erl_generator.cc
index e3909bd..8f020bf 100644
--- a/compiler/cpp/src/generate/t_erl_generator.cc
+++ b/compiler/cpp/src/generate/t_erl_generator.cc
@@ -4,8 +4,6 @@
 // See accompanying file LICENSE or visit the Thrift site at:
 // http://developers.facebook.com/thrift/
 
-// still missing: inheritance, containers
-
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <sys/types.h>
@@ -43,7 +41,7 @@
     erl_imports() << endl;
 
   f_types_file_ <<
-    "-include(\"" << program_name_ << "_types.hrl\")." << endl << 
+    "-include(\"" << program_name_ << "_types.hrl\")." << endl <<
     endl;
 
   f_types_hrl_file_ << render_includes() << endl;
@@ -103,7 +101,7 @@
  */
 string t_erl_generator::erl_imports() {
   return
-    string("-include(\"thrift.hrl\").\n") + 
+    string("-include(\"thrift.hrl\").\n") +
     "-include(\"tApplicationException.hrl\").\n" +
     "-include(\"protocol/tProtocol.hrl\").\n";
 }
@@ -149,9 +147,9 @@
     } else {
       ++value;
     }
-    
+
     string name = capitalize((*c_iter)->get_name());
-    
+
     f_types_hrl_file_ <<
       indent() << "-define(" << program_name_ << "_" << name << ", " << value << ")."<< endl;
   }
@@ -166,7 +164,7 @@
   t_type* type = tconst->get_type();
   string name = capitalize(tconst->get_name());
   t_const_value* value = tconst->get_value();
-  
+
   f_consts_ << "-define(" << program_name_ << "_" << name << ", " << render_const_value(type, value) << ")." << endl << endl;
 }
 
@@ -252,7 +250,7 @@
 	out << ",";
       }
       out << "("
-	  << render_const_value(ktype, v_iter->first)  << "," 
+	  << render_const_value(ktype, v_iter->first)  << ","
 	  << render_const_value(vtype, v_iter->second) << ")";
     }
     out << "])";
@@ -310,7 +308,7 @@
  * @param txception The struct definition
  */
 void t_erl_generator::generate_xception(t_struct* txception) {
-  generate_erl_struct(txception, true);  
+  generate_erl_struct(txception, true);
 }
 
 /**
@@ -330,14 +328,14 @@
 						     ostream& hrl_out,
                                                    t_struct* tstruct,
                                                    bool is_exception,
-                                                   bool is_result) 
+                                                   bool is_result)
 {
   const vector<t_field*>& members = tstruct->get_members();
-  vector<t_field*>::const_iterator m_iter; 
+  vector<t_field*>::const_iterator m_iter;
 
   indent(out) << "%% struct " << type_name(tstruct) << endl;
 
-  if (is_exception) { 
+  if (is_exception) {
   }
 
   out << endl;
@@ -363,7 +361,7 @@
     indent(out)     << "% -record(" << type_name(tstruct) << ", {})." << endl;
     indent(hrl_out) <<   "-record(" << type_name(tstruct) << ", {})." << endl;
   }
-  
+
   out << endl;
   hrl_out << endl;
 
@@ -389,9 +387,9 @@
 
   indent(out) << name << "(Iprot) ->" << endl;
   indent_up();
-    
+
   out <<
-    indent() << "?R0(Iprot, readStructBegin)," << endl <<   
+    indent() << "?R0(Iprot, readStructBegin)," << endl <<
     indent() << "Str = " << type_name(tstruct) << "_read_loop(Iprot, ";
 
   // empty struct
@@ -419,12 +417,12 @@
 
   // Generate deserialization code for known cases
   for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    out << indent() << "(Fid == " << (*f_iter)->get_key() << ") and (Ftype == " 
+    out << indent() << "(Fid == " << (*f_iter)->get_key() << ") and (Ftype == "
 	<< type_to_enum((*f_iter)->get_type()) << ") ->" << endl;
-    
+
     indent_up();
     generate_deserialize_field(out, *f_iter, "Val");
-    
+
     out << indent() << "?R0(Iprot, readFieldEnd)," << endl
 	<< indent() << type_name(tstruct) << "_read_loop(Iprot, "
 	<< "Str#" << type_name(tstruct)
@@ -432,7 +430,7 @@
 	<< "=Val});" << endl;
     indent_down();
   }
-  
+
   // In the default case we skip the field
   out <<
     indent() << "true -> " << endl <<
@@ -440,9 +438,9 @@
     indent() << "  ?R0(Iprot, readFieldEnd)," << endl <<
     indent() << "  " << type_name(tstruct) << "_read_loop(Iprot, Str)" << endl;
   indent_down();
-  
-  indent(out) << "end." << endl; 
-  
+
+  indent(out) << "end." << endl;
+
   indent_down();
   out << endl;
 }
@@ -460,10 +458,10 @@
   } else {
     export_string(fname, 2);
   }
-  
+
   indent(out) << fname << "(Str, Oprot) ->" << endl;
   indent_up();
-  
+
   out <<
     indent() << "Str, % suppress unused warnings" << endl <<
     indent() << "?R1(Oprot, writeStructBegin, \"" << name << "\")," << endl;
@@ -513,20 +511,20 @@
   // ...awesome
   service_name_[0] = tolower(service_name_[0]);
 
-  string f_service_hrl_name = string(T_ERL_DIR)+"/"+service_name_+".hrl";
-  string f_service_name = string(T_ERL_DIR)+"/"+service_name_+".erl";
+  string f_service_hrl_name = string(T_ERL_DIR)+"/"+service_name_+"_thrift.hrl";
+  string f_service_name = string(T_ERL_DIR)+"/"+service_name_+"_thrift.erl";
   f_service_file_.open(f_service_name.c_str());
   f_service_hrl_.open(f_service_hrl_name.c_str());
 
   hrl_header(f_service_hrl_, service_name_);
 
   if (tservice->get_extends() != NULL) {
-    f_service_hrl_ << "-include(\"" << 
-      uncapitalize(tservice->get_extends()->get_name()) << ".hrl\"). % inherit " << endl;
+    f_service_hrl_ << "-include(\"" <<
+      uncapitalize(tservice->get_extends()->get_name()) << "_thrift.hrl\"). % inherit " << endl;
   }
 
   f_service_hrl_ <<
-    "-include(\"" << program_name_ << "_types.hrl\")." << endl << 
+    "-include(\"" << program_name_ << "_types.hrl\")." << endl <<
     endl;
 
   // Generate the three main parts of the service (well, two for now in PHP)
@@ -540,10 +538,10 @@
 
   f_service_file_ <<
     erl_autogen_comment() << endl <<
-    "-module(" << service_name_ << ")." << endl << endl <<
+    "-module(" << service_name_ << "_thrift)." << endl << endl <<
     erl_imports() << endl;
 
-  f_service_file_ << "-include(\"" << uncapitalize(tservice->get_name()) << ".hrl\")." << endl << endl;
+  f_service_file_ << "-include(\"" << uncapitalize(tservice->get_name()) << "_thrift.hrl\")." << endl << endl;
 
   f_service_file_ << "-export([" << export_lines_.str() << "])." << endl << endl;
 
@@ -570,7 +568,7 @@
 
   for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
     t_struct* ts = (*f_iter)->get_arglist();
-    
+
     generate_erl_struct_definition(f_service_, f_service_hrl_, ts, false);
     generate_erl_function_helpers(*f_iter);
   }
@@ -612,7 +610,7 @@
   //  }
 
   vector<t_function*> functions = tservice->get_functions();
-  vector<t_function*>::iterator f_iter; 
+  vector<t_function*>::iterator f_iter;
   f_service_ << "%%% interface" << endl;
   for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
     f_service_ <<
@@ -659,7 +657,7 @@
 
   // Generate client method implementations
   vector<t_function*> functions = tservice->get_functions();
-  vector<t_function*>::const_iterator f_iter;    
+  vector<t_function*>::const_iterator f_iter;
   for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
     t_struct* arg_struct = (*f_iter)->get_arglist();
     const vector<t_field*>& fields = arg_struct->get_members();
@@ -718,7 +716,7 @@
 
       bool first = true;
       for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
-	f_service_ << (first ? first = false, "" : ", ") 
+	f_service_ << (first ? first = false, "" : ", ")
 		   << (*fld_iter)->get_name()
 		   << "=" << capitalize((*fld_iter)->get_name());
       }
@@ -731,20 +729,20 @@
         indent() << "?R0(Oprot, writeMessageEnd)," << endl <<
 	indent() << "Trans = ?R1(Oprot, get, trans)," << endl <<
 	indent() << "?R0(Trans, effectful_flush)," << endl <<
-        indent() << "ok." << endl;  
+        indent() << "ok." << endl;
 
     indent_down();
 
     if (!(*f_iter)->is_async()) {
       std::string resultname = uncapitalize((*f_iter)->get_name() + "_result");
       t_struct noargs(program_);
-      
+
       t_function recv_function((*f_iter)->get_returntype(),
                                string("recv_") + (*f_iter)->get_name(),
                                &noargs);
 
       export_function(&recv_function, "");
-      
+
       // Open function
       f_service_ <<
         endl <<
@@ -776,7 +774,7 @@
       std::string result = "Result#"+resultname+".";
       if (!(*f_iter)->get_returntype()->is_void()) {
 	f_service_ <<
-	  indent() << "      " << result << "success /= nil ->" << endl << 
+	  indent() << "      " << result << "success /= nil ->" << endl <<
 	  indent() << "        " << result << "success;" << endl;
       }
 
@@ -797,14 +795,14 @@
       } else {
         f_service_ <<
           indent() << "      true -> " << endl <<
-	  indent() << "        throw(tApplicationException:new(?tApplicationException_MISSING_RESULT, \"" << (*f_iter)->get_name() << " failed: unknown result\"))" << endl << 
+	  indent() << "        throw(tApplicationException:new(?tApplicationException_MISSING_RESULT, \"" << (*f_iter)->get_name() << " failed: unknown result\"))" << endl <<
 	  indent() << "    end" << endl;
-      }     
-      
+      }
+
       // Close function
       indent(f_service_) << "end." << endl << endl;
       indent_down();
-    }      
+    }
   }
 
   indent_down();
@@ -819,13 +817,13 @@
 void t_erl_generator::generate_service_server(t_service* tservice) {
   // Generate the dispatch methods
   vector<t_function*> functions = tservice->get_functions();
-  vector<t_function*>::iterator f_iter; 
+  vector<t_function*>::iterator f_iter;
 
   string extends = "";
   string extends_processor = "";
   if (tservice->get_extends() != NULL) {
     extends = type_name(tservice->get_extends());
-    extends_processor = " INHERIT(" + extends + "::Processor) % TODO"; 
+    extends_processor = " INHERIT(" + extends + "::Processor) % TODO";
   }
 
   // Generate the header portion
@@ -856,7 +854,7 @@
   for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
     f_service_ <<
       indent() << "@processMap['" << (*f_iter)->get_name() << "'] = method(:process_" << (*f_iter)->get_name() << ")" << endl;
-  } 
+  }
   indent_down();
   indent(f_service_) << "end" << endl << endl;
   */
@@ -884,7 +882,7 @@
   f_service_ <<
     // try to dispatch to one of our process_*
     indent() << "case Name of" << endl;
-  
+
   for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
     f_service_ <<
       indent() << "  \"" << (*f_iter)->get_name() << "\" -> process_" << (*f_iter)->get_name() << "(HandlerModule, Seqid, Iprot, Oprot);" << endl;
@@ -927,7 +925,7 @@
 						t_function* tfunction) {
 
   string name = "process_" + tfunction->get_name();
-  
+
   export_string(name, 4);
 
   // Open function
@@ -936,9 +934,9 @@
     "(HandlerModule, Seqid, Iprot, Oprot) ->" << endl;
   indent_up();
 
-  f_service_ << 
+  f_service_ <<
     indent() << "Seqid, Oprot, % suppress unused warnings" << endl;
- 
+
   string argsname = tfunction->get_name() + "_args";
   string resultname = tfunction->get_name() + "_result";
 
@@ -1026,7 +1024,7 @@
     indent() << "    tApplicationException:write(X, Oprot)," << endl <<
     indent() << "    {error, X};" << endl <<
     indent() << "  _:_Kind ->" << endl <<
-    indent() << "    X = tApplicationException:new(?tApplicationException_HANDLER_ERROR, \"Unknown handler error in " 
+    indent() << "    X = tApplicationException:new(?tApplicationException_HANDLER_ERROR, \"Unknown handler error in "
 		     << tfunction->get_name() << "\")," << endl <<
 
     indent() << "    ?R3(Oprot, writeMessageBegin, \"" << tfunction->get_name() << "\", ?tMessageType_EXCEPTION, Seqid)," << endl <<
@@ -1046,7 +1044,7 @@
 
     indent_down();
   }
-  
+
   indent(f_service_) << "end." << endl;
 
   indent_down();
@@ -1077,7 +1075,7 @@
   } else if (type->is_base_type() || type->is_enum()) {
     indent(out) <<
       name << " = ?R0(Iprot, ";
-    
+
     if (type->is_base_type()) {
       t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
       switch (tbase) {
@@ -1085,7 +1083,7 @@
         throw "compiler error: cannot serialize void field in a struct: " +
           name;
         break;
-      case t_base_type::TYPE_STRING:        
+      case t_base_type::TYPE_STRING:
         out << "readString";
         break;
       case t_base_type::TYPE_BOOL:
@@ -1117,7 +1115,7 @@
   } else {
     printf("DO NOT KNOW HOW TO DESERIALIZE FIELD '%s' TYPE '%s'\n",
            tfield->get_name().c_str(), type->get_name().c_str());
-  }  
+  }
 }
 
 /**
@@ -1141,7 +1139,7 @@
   string ktype = tmp("_ktype");
   string vtype = tmp("_vtype");
   string etype = tmp("_etype");
-  
+
   t_field fsize(g_type_i32, size);
   t_field fktype(g_type_byte, ktype);
   t_field fvtype(g_type_byte, vtype);
@@ -1262,7 +1260,7 @@
  * @param tfield The field to serialize
  * @param prefix Name to prepend to field name
  */
-void t_erl_generator::generate_serialize_field(ostream &out, 
+void t_erl_generator::generate_serialize_field(ostream &out,
                                                t_field* tfield,
                                                string prefix) {
   t_type* type = get_true_type(tfield->get_type());
@@ -1272,7 +1270,7 @@
     throw "CANNOT GENERATE SERIALIZE CODE FOR void TYPE: " +
       prefix + tfield->get_name();
   }
-  
+
   if (type->is_struct() || type->is_xception()) {
     generate_serialize_struct(out,
                               (t_struct*)type,
@@ -1287,7 +1285,7 @@
 
     indent(out) <<
       "?R1(Oprot, ";
-    
+
     if (type->is_base_type()) {
       t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
       switch (tbase) {
@@ -1367,7 +1365,7 @@
   if (ttype->is_map()) {
     string kiter = tmp("_kiter");
     string viter = tmp("_viter");
-    indent(out) << 
+    indent(out) <<
       "dict:fold(fun ("<< kiter << ", " << viter << ",_)->" << endl;
     indent_up();
     generate_serialize_map_element(out, (t_map*)ttype, kiter, viter);
@@ -1376,7 +1374,7 @@
     indent(out) << "end, nil," << prefix << ")," << endl;
   } else if (ttype->is_set()) {
     string iter = tmp("_iter");
-    indent(out) << 
+    indent(out) <<
       "sets:fold(fun ("<< iter << ",_)->" << endl;
     indent_up();
     generate_serialize_set_element(out, (t_set*)ttype, iter);
@@ -1385,7 +1383,7 @@
     indent(out) << "end, nil," << prefix << ")," << endl;
   } else if (ttype->is_list()) {
     string iter = tmp("_iter");
-    indent(out) << 
+    indent(out) <<
       "lists:foldl(fun (" << iter << ",_)->" << endl;
     indent_up();
     generate_serialize_list_element(out, (t_list*)ttype, iter);
@@ -1393,7 +1391,7 @@
     indent_down();
     indent(out) << "end,nil," << prefix << ")," << endl;
   }
-    
+
   if (ttype->is_map()) {
     indent(out) <<
       "?R0(Oprot, writeMapEnd)," << endl;
@@ -1484,8 +1482,8 @@
 
 void t_erl_generator::export_types_function(t_function* tfunction,
                                            string prefix) {
-  
-  export_types_string(prefix + tfunction->get_name(), 
+
+  export_types_string(prefix + tfunction->get_name(),
 	 1 // This
 	 + ((tfunction->get_arglist())->get_members()).size()
 	 );
@@ -1502,8 +1500,8 @@
 
 void t_erl_generator::export_function(t_function* tfunction,
                                            string prefix) {
-  
-  export_string(prefix + tfunction->get_name(), 
+
+  export_string(prefix + tfunction->get_name(),
 	 1 // This
 	 + ((tfunction->get_arglist())->get_members()).size()
 	 );
@@ -1541,7 +1539,7 @@
   }
 
   string name = ttype->get_name();
-  
+
   if (ttype->is_struct() || ttype->is_xception() || ttype->is_service()) {
     name = uncapitalize(ttype->get_name());
   }
@@ -1554,7 +1552,7 @@
  */
 string t_erl_generator::type_to_enum(t_type* type) {
   type = get_true_type(type);
-  
+
   if (type->is_base_type()) {
     t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
     switch (tbase) {
diff --git a/compiler/cpp/src/main.cc b/compiler/cpp/src/main.cc
index 015d1ba..0078055 100644
--- a/compiler/cpp/src/main.cc
+++ b/compiler/cpp/src/main.cc
@@ -35,8 +35,8 @@
 #include "generate/t_rb_generator.h"
 #include "generate/t_xsd_generator.h"
 #include "generate/t_perl_generator.h"
-#include "generate/t_ocaml_generator.h"
 #include "generate/t_erl_generator.h"
+#include "generate/t_ocaml_generator.h"
 #include "generate/t_hs_generator.h"
 #include "generate/t_cocoa_generator.h"
 
@@ -140,8 +140,8 @@
 bool gen_phpi = false;
 bool gen_rest = false;
 bool gen_perl = false;
-bool gen_ocaml = false;
 bool gen_erl = false;
+bool gen_ocaml = false;
 bool gen_hs = false;
 bool gen_cocoa = false;
 bool gen_dense = false;
@@ -562,8 +562,8 @@
   fprintf(stderr, "  -rb         Generate Ruby output files\n");
   fprintf(stderr, "  -xsd        Generate XSD output files\n");
   fprintf(stderr, "  -perl       Generate Perl output files\n");
-  fprintf(stderr, "  -ocaml      Generate OCaml output files\n");
   fprintf(stderr, "  -erl        Generate Erlang output files\n");
+  fprintf(stderr, "  -ocaml      Generate OCaml output files\n");
   fprintf(stderr, "  -hs         Generate Haskell output files\n");
   fprintf(stderr, "  -cocoa      Generate Cocoa/Objective-C output files\n");
   fprintf(stderr, "  -I dir      Add a directory to the list of directories\n");
@@ -844,6 +844,13 @@
       delete perl;
     }
 
+    if (gen_erl) {
+      pverbose("Generating Erlang\n");
+      t_erl_generator* erl = new t_erl_generator(program);
+      erl->generate_program();
+      delete erl;
+    }
+
     if (gen_ocaml) {
       pverbose("Generating OCaml\n");
       t_ocaml_generator* ocaml = new t_ocaml_generator(program);
@@ -851,28 +858,23 @@
       delete ocaml;
     }
 
-    if (gen_erl) {
-      pverbose("Generating Erlang\n");
-      t_erl_generator* erl = new t_erl_generator(program);
-      erl->generate_program();
-      delete erl;
-    }
     if (gen_hs) {
       pverbose("Generating Haskell\n");
       t_hs_generator* hs = new t_hs_generator(program);
       hs->generate_program();
       delete hs;
     }
+
     if (gen_cocoa) {
       pverbose("Generating Cocoa/Objective-C\n");
       t_cocoa_generator* cocoa = new t_cocoa_generator(program);
       cocoa->generate_program();
       delete cocoa;
     }
+
     if (dump_docs) {
       dump_docstrings(program);
     }
-
   } catch (string s) {
     printf("Error: %s\n", s.c_str());
   } catch (const char* exc) {
@@ -941,10 +943,10 @@
         gen_xsd = true;
       } else if (strcmp(arg, "-perl") == 0) {
         gen_perl = true;
-      } else if (strcmp(arg, "-ocaml") == 0) {
-        gen_ocaml = true;
       } else if (strcmp(arg, "-erl") == 0) {
         gen_erl = true;
+      } else if (strcmp(arg, "-ocaml") == 0) {
+        gen_ocaml = true;
       } else if (strcmp(arg, "-hs") == 0) {
         gen_hs = true;
       } else if (strcmp(arg, "-cocoa") == 0) {
@@ -969,7 +971,7 @@
   }
 
   // You gotta generate something!
-  if (!gen_cpp && !gen_java && !gen_javabean && !gen_php && !gen_phpi && !gen_py && !gen_rb && !gen_xsd && !gen_perl && !gen_ocaml && !gen_erl && !gen_hs && !gen_cocoa) {
+  if (!gen_cpp && !gen_java && !gen_javabean && !gen_php && !gen_phpi && !gen_py && !gen_rb && !gen_xsd && !gen_perl && !gen_erl && !gen_ocaml && !gen_hs && !gen_cocoa) {
     fprintf(stderr, "!!! No output language(s) specified\n\n");
     usage();
   }
