diff --git a/compiler/cpp/src/generate/t_erl_generator.cc b/compiler/cpp/src/generate/t_erl_generator.cc
index de807a7..44683cd 100644
--- a/compiler/cpp/src/generate/t_erl_generator.cc
+++ b/compiler/cpp/src/generate/t_erl_generator.cc
@@ -417,7 +417,7 @@
 
   // 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() << "), (Ftype == "
         << type_to_enum((*f_iter)->get_type()) << ") ->" << endl;
 
     indent_up();
@@ -698,7 +698,7 @@
     export_function(*f_iter, "send_");
 
     indent(f_service_) <<
-      "send_" << function_signature(*f_iter) << " ->" << endl;
+      function_signature(*f_iter, "send_") << " ->" << endl;
     indent_up();
 
     std::string argsname = capitalize((*f_iter)->get_name() + "_args");
@@ -708,7 +708,7 @@
       indent() << "Oprot = This#" << service_name_ << ".oprot," << endl <<
       indent() << "Seqid = This#" << service_name_ << ".seqid," << endl <<
       indent() << "?R3(Oprot, writeMessageBegin, \"" << (*f_iter)->get_name() << "\", ?tMessageType_CALL, Seqid)," << endl <<
-      indent() << "Args = #" << (*f_iter)->get_name() << "_args{";
+      indent() << "Args = #" << uncapitalize(funname) << "_args{";
 
     bool first = true;
     for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
@@ -717,7 +717,7 @@
                  << "=" << capitalize((*fld_iter)->get_name());
     }
     f_service_ << "}," << endl;
-    indent(f_service_) << (*f_iter)->get_name() << "_args_write(Args, Oprot)," << endl;
+    indent(f_service_) << uncapitalize(funname) << "_args_write(Args, Oprot)," << endl;
 
     // Write to the stream
     f_service_ <<
@@ -932,8 +932,9 @@
   f_service_ <<
     indent() << "Seqid, Oprot, % suppress unused warnings" << endl;
 
-  string argsname = tfunction->get_name() + "_args";
-  string resultname = tfunction->get_name() + "_result";
+  string ucfunname  = uncapitalize(tfunction->get_name());
+  string argsname   = ucfunname + "_args";
+  string resultname = ucfunname + "_result";
 
   f_service_ <<
     indent() << "_Args = " << argsname << "_read(Iprot)," << endl <<
@@ -969,7 +970,7 @@
   if (!tfunction->is_async() && !tfunction->get_returntype()->is_void()) {
     f_service_<< "Res = ";
   }
-  f_service_ << "HandlerModule:" << tfunction->get_name() << "(";
+  f_service_ << "HandlerModule:" << atomize(tfunction->get_name()) << "(";
 
   bool first = true;
   for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
@@ -978,7 +979,7 @@
     } else {
       f_service_ << ", ";
     }
-    f_service_ << "_Args#" << tfunction->get_name() << "_args." << (*f_iter)->get_name();
+    f_service_ << "_Args#" << argsname << "." << (*f_iter)->get_name();
   }
   f_service_ << ")," << endl;
   if (!tfunction->is_async() && !tfunction->get_returntype()->is_void()) {
@@ -1004,7 +1005,7 @@
   if (!tfunction->is_async()) {
     f_service_ <<
       indent() << "?R3(Oprot, writeMessageBegin, \"" << tfunction->get_name() << "\", ?tMessageType_REPLY, Seqid)," << endl <<
-      indent() << tfunction->get_name() << "_result_write(Result, Oprot)," << endl;
+      indent() << ucfunname << "_result_write(Result, Oprot)," << endl;
   }
   indent(f_service_) << "Result" << endl;
   indent_down();
@@ -1459,7 +1460,7 @@
 string t_erl_generator::function_signature(t_function* tfunction,
                                            string prefix) {
   return
-    prefix + tfunction->get_name() +
+    atomize(prefix + tfunction->get_name()) +
     "(This" +  capitalize(argument_list(tfunction->get_arglist())) + ")";
 }
 
@@ -1472,7 +1473,8 @@
   } else {
     export_lines_ << ", ";
   }
-  export_lines_ << name << "/" << num;
+
+  export_lines_ << atomize(name) << "/" << num;
 }
 
 void t_erl_generator::export_types_function(t_function* tfunction,
diff --git a/compiler/cpp/src/generate/t_erl_generator.h b/compiler/cpp/src/generate/t_erl_generator.h
index 831bb21..a556e9a 100644
--- a/compiler/cpp/src/generate/t_erl_generator.h
+++ b/compiler/cpp/src/generate/t_erl_generator.h
@@ -16,7 +16,7 @@
 class t_erl_generator : public t_oop_generator {
  public:
   t_erl_generator(t_program* program) :
-    t_oop_generator(program) 
+    t_oop_generator(program)
   {
     program_name_[0] = tolower(program_name_[0]);
     service_name_[0] = tolower(service_name_[0]);
@@ -68,18 +68,18 @@
    */
 
   void generate_deserialize_field        (std::ostream &out,
-                                          t_field*    tfield, 
+                                          t_field*    tfield,
                                           std::string prefix="",
                                           bool inclass=false);
-  
+
   void generate_deserialize_struct       (std::ostream &out,
                                           t_struct*   tstruct,
                                           std::string prefix="");
-  
+
   void generate_deserialize_container    (std::ostream &out,
                                           t_type*     ttype,
                                           std::string prefix="");
-  
+
   void generate_deserialize_set_element  (std::ostream &out,
                                           t_set*      tset,
                                           std::string prefix="");
@@ -141,6 +141,14 @@
     return in;
   }
 
+  std::string atomize(std::string in) {
+    if (isupper(in[0])) {
+      return "'" + in + "'";
+    } else {
+      return in;
+    }
+  }
+
  private:
 
   /**
@@ -156,9 +164,9 @@
   /**
    * write out headers and footers for hrl files
    */
-  
+
   void hrl_header(std::ostream& out, std::string name);
-  void hrl_footer(std::ostream& out, std::string name); 
+  void hrl_footer(std::ostream& out, std::string name);
 
   /**
    * stuff to spit out at the top of generated files
@@ -178,7 +186,7 @@
   std::ofstream f_types_file_;
   std::ofstream f_types_hrl_file_;
 
-  std::ofstream f_consts_; 
+  std::ofstream f_consts_;
   std::ostringstream f_service_;
   std::ofstream f_service_file_;
   std::ofstream f_service_hrl_;
