diff --git a/compiler/cpp/src/main.cc b/compiler/cpp/src/main.cc
index da45ae7..f751419 100755
--- a/compiler/cpp/src/main.cc
+++ b/compiler/cpp/src/main.cc
@@ -806,6 +806,18 @@
 }
 
 /**
+ * Check simple identifier names
+ * It's easier to do it this way instead of rewriting the whole grammar etc.
+ */
+void validate_simple_identifier(const char* identifier) {
+  string name( identifier);
+  if( name.find(".") != string::npos) {
+    yyerror("Identifier %s can't have a dot.", identifier);
+    exit(1);
+  }
+}
+
+/**
  * Check the type of the parsed const information against its declared type
  */
 void validate_const_type(t_const* c) {
diff --git a/compiler/cpp/src/main.h b/compiler/cpp/src/main.h
index cb6d27a..46ad835 100644
--- a/compiler/cpp/src/main.h
+++ b/compiler/cpp/src/main.h
@@ -58,6 +58,11 @@
 void failure(const char* fmt, ...);
 
 /**
+ * Check simple identifier names
+ */
+void validate_simple_identifier(const char* identifier);
+
+/**
  * Check constant types
  */
 void validate_const_type(t_const* c);
diff --git a/compiler/cpp/src/thrifty.yy b/compiler/cpp/src/thrifty.yy
index 5b91a0a..f5ab4a6 100644
--- a/compiler/cpp/src/thrifty.yy
+++ b/compiler/cpp/src/thrifty.yy
@@ -515,6 +515,7 @@
   tok_typedef FieldType tok_identifier TypeAnnotations
     {
       pdebug("TypeDef -> tok_typedef FieldType tok_identifier");
+      validate_simple_identifier( $3);
       t_typedef *td = new t_typedef(g_program, $2, $3);
       $$ = td;
       if ($4 != NULL) {
@@ -536,6 +537,7 @@
     {
       pdebug("Enum -> tok_enum tok_identifier { EnumDefList }");
       $$ = $4;
+      validate_simple_identifier( $2);
       $$->set_name($2);
       if ($6 != NULL) {
         $$->annotations_ = $6->annotations_;
@@ -581,6 +583,7 @@
       if ($4 > INT_MAX) {
         pwarning(1, "64-bit value supplied for enum %s.\n", $2);
       }
+      validate_simple_identifier( $2);
       $$ = new t_enum_value($2, $4);
       if ($1 != NULL) {
         $$->set_doc($1);
@@ -594,6 +597,7 @@
   CaptureDocText tok_identifier TypeAnnotations CommaOrSemicolonOptional
     {
       pdebug("EnumDef -> tok_identifier");
+      validate_simple_identifier( $2);
       $$ = new t_enum_value($2);
       if ($1 != NULL) {
         $$->set_doc($1);
@@ -608,6 +612,7 @@
   tok_senum tok_identifier '{' SenumDefList '}' TypeAnnotations
     {
       pdebug("Senum -> tok_senum tok_identifier { SenumDefList }");
+      validate_simple_identifier( $2);
       $$ = new t_typedef(g_program, $4, $2);
       if ($6 != NULL) {
         $$->annotations_ = $6->annotations_;
@@ -641,6 +646,7 @@
     {
       pdebug("Const -> tok_const FieldType tok_identifier = ConstValue");
       if (g_parse_mode == PROGRAM) {
+        validate_simple_identifier( $3);
         g_scope->resolve_const_value($5, $2);
         $$ = new t_const($2, $3, $5);
         validate_const_type($$);
@@ -748,6 +754,7 @@
   StructHead tok_identifier XsdAll '{' FieldList '}' TypeAnnotations
     {
       pdebug("Struct -> tok_struct tok_identifier { FieldList }");
+      validate_simple_identifier( $2);
       $5->set_xsd_all($3);
       $5->set_union($1 == struct_is_union);
       $$ = $5;
@@ -802,6 +809,7 @@
   tok_xception tok_identifier '{' FieldList '}' TypeAnnotations
     {
       pdebug("Xception -> tok_xception tok_identifier { FieldList }");
+      validate_simple_identifier( $2);
       $4->set_name($2);
       $4->set_xception(true);
       $$ = $4;
@@ -815,6 +823,7 @@
   tok_service tok_identifier Extends '{' FlagArgs FunctionList UnflagArgs '}' TypeAnnotations
     {
       pdebug("Service -> tok_service tok_identifier { FunctionList }");
+      validate_simple_identifier( $2);
       $$ = $6;
       $$->set_name($2);
       $$->set_extends($3);
@@ -868,6 +877,7 @@
 Function:
   CaptureDocText Oneway FunctionType tok_identifier '(' FieldList ')' Throws TypeAnnotations CommaOrSemicolonOptional
     {
+      validate_simple_identifier( $4);
       $6->set_name(std::string($4) + "_args");
       $$ = new t_function($3, $4, $6, $8, $2);
       if ($1 != NULL) {
@@ -932,6 +942,7 @@
           exit(1);
         }
       }
+      validate_simple_identifier($5);
       $$ = new t_field($4, $5, $2.value);
       $$->set_req($3);
       if ($6 != NULL) {
