diff --git a/lib/cpp/src/reflection_limited_types.cpp b/lib/cpp/src/reflection_limited_types.cpp
index c47d982..2f53e9e 100644
--- a/lib/cpp/src/reflection_limited_types.cpp
+++ b/lib/cpp/src/reflection_limited_types.cpp
@@ -7,8 +7,8 @@
 
 namespace facebook { namespace thrift { namespace reflection { namespace limited {
 
-char* SimpleType::ascii_fingerprint = "19B5240589E680301A7E32DF3971EFBE";
-char SimpleType::binary_fingerprint[16] = {0x19,0xB5,0x24,0x05,0x89,0xE6,0x80,0x30,0x1A,0x7E,0x32,0xDF,0x39,0x71,0xEF,0xBE};
+const char* SimpleType::ascii_fingerprint = "19B5240589E680301A7E32DF3971EFBE";
+const uint8_t SimpleType::binary_fingerprint[16] = {0x19,0xB5,0x24,0x05,0x89,0xE6,0x80,0x30,0x1A,0x7E,0x32,0xDF,0x39,0x71,0xEF,0xBE};
 
 uint32_t SimpleType::read(facebook::thrift::protocol::TProtocol* iprot) {
 
@@ -74,8 +74,8 @@
   return xfer;
 }
 
-char* ContainerType::ascii_fingerprint = "654FA6EFFF8242F4C2A604B970686634";
-char ContainerType::binary_fingerprint[16] = {0x65,0x4F,0xA6,0xEF,0xFF,0x82,0x42,0xF4,0xC2,0xA6,0x04,0xB9,0x70,0x68,0x66,0x34};
+const char* ContainerType::ascii_fingerprint = "654FA6EFFF8242F4C2A604B970686634";
+const uint8_t ContainerType::binary_fingerprint[16] = {0x65,0x4F,0xA6,0xEF,0xFF,0x82,0x42,0xF4,0xC2,0xA6,0x04,0xB9,0x70,0x68,0x66,0x34};
 
 uint32_t ContainerType::read(facebook::thrift::protocol::TProtocol* iprot) {
 
@@ -154,8 +154,8 @@
   return xfer;
 }
 
-char* ThriftType::ascii_fingerprint = "76BC1CC759001D7D85FEE75C4F183062";
-char ThriftType::binary_fingerprint[16] = {0x76,0xBC,0x1C,0xC7,0x59,0x00,0x1D,0x7D,0x85,0xFE,0xE7,0x5C,0x4F,0x18,0x30,0x62};
+const char* ThriftType::ascii_fingerprint = "76BC1CC759001D7D85FEE75C4F183062";
+const uint8_t ThriftType::binary_fingerprint[16] = {0x76,0xBC,0x1C,0xC7,0x59,0x00,0x1D,0x7D,0x85,0xFE,0xE7,0x5C,0x4F,0x18,0x30,0x62};
 
 uint32_t ThriftType::read(facebook::thrift::protocol::TProtocol* iprot) {
 
@@ -234,8 +234,8 @@
   return xfer;
 }
 
-char* Argument::ascii_fingerprint = "8C45506BE0EFBB22FB19FA40DDCECB3F";
-char Argument::binary_fingerprint[16] = {0x8C,0x45,0x50,0x6B,0xE0,0xEF,0xBB,0x22,0xFB,0x19,0xFA,0x40,0xDD,0xCE,0xCB,0x3F};
+const char* Argument::ascii_fingerprint = "8C45506BE0EFBB22FB19FA40DDCECB3F";
+const uint8_t Argument::binary_fingerprint[16] = {0x8C,0x45,0x50,0x6B,0xE0,0xEF,0xBB,0x22,0xFB,0x19,0xFA,0x40,0xDD,0xCE,0xCB,0x3F};
 
 uint32_t Argument::read(facebook::thrift::protocol::TProtocol* iprot) {
 
@@ -310,8 +310,8 @@
   return xfer;
 }
 
-char* Method::ascii_fingerprint = "E6573428C492D24C84A19432D39A17B0";
-char Method::binary_fingerprint[16] = {0xE6,0x57,0x34,0x28,0xC4,0x92,0xD2,0x4C,0x84,0xA1,0x94,0x32,0xD3,0x9A,0x17,0xB0};
+const char* Method::ascii_fingerprint = "E6573428C492D24C84A19432D39A17B0";
+const uint8_t Method::binary_fingerprint[16] = {0xE6,0x57,0x34,0x28,0xC4,0x92,0xD2,0x4C,0x84,0xA1,0x94,0x32,0xD3,0x9A,0x17,0xB0};
 
 uint32_t Method::read(facebook::thrift::protocol::TProtocol* iprot) {
 
@@ -356,12 +356,11 @@
             uint32_t _size2;
             facebook::thrift::protocol::TType _etype5;
             iprot->readListBegin(_etype5, _size2);
+            this->arguments.resize(_size2);
             uint32_t _i6;
             for (_i6 = 0; _i6 < _size2; ++_i6)
             {
-              Argument _elem7;
-              xfer += _elem7.read(iprot);
-              this->arguments.push_back(_elem7);
+              xfer += this->arguments[_i6].read(iprot);
             }
             iprot->readListEnd();
           }
@@ -394,10 +393,10 @@
   xfer += oprot->writeFieldBegin("arguments", facebook::thrift::protocol::T_LIST, 3);
   {
     xfer += oprot->writeListBegin(facebook::thrift::protocol::T_STRUCT, this->arguments.size());
-    std::vector<Argument> ::const_iterator _iter8;
-    for (_iter8 = this->arguments.begin(); _iter8 != this->arguments.end(); ++_iter8)
+    std::vector<Argument> ::const_iterator _iter7;
+    for (_iter7 = this->arguments.begin(); _iter7 != this->arguments.end(); ++_iter7)
     {
-      xfer += (*_iter8).write(oprot);
+      xfer += (*_iter7).write(oprot);
     }
     xfer += oprot->writeListEnd();
   }
@@ -407,8 +406,8 @@
   return xfer;
 }
 
-char* Service::ascii_fingerprint = "4673B0777B701D9B02A7A74CEC7908A7";
-char Service::binary_fingerprint[16] = {0x46,0x73,0xB0,0x77,0x7B,0x70,0x1D,0x9B,0x02,0xA7,0xA7,0x4C,0xEC,0x79,0x08,0xA7};
+const char* Service::ascii_fingerprint = "4673B0777B701D9B02A7A74CEC7908A7";
+const uint8_t Service::binary_fingerprint[16] = {0x46,0x73,0xB0,0x77,0x7B,0x70,0x1D,0x9B,0x02,0xA7,0xA7,0x4C,0xEC,0x79,0x08,0xA7};
 
 uint32_t Service::read(facebook::thrift::protocol::TProtocol* iprot) {
 
@@ -442,15 +441,14 @@
         if (ftype == facebook::thrift::protocol::T_LIST) {
           {
             this->methods.clear();
-            uint32_t _size9;
-            facebook::thrift::protocol::TType _etype12;
-            iprot->readListBegin(_etype12, _size9);
-            uint32_t _i13;
-            for (_i13 = 0; _i13 < _size9; ++_i13)
+            uint32_t _size8;
+            facebook::thrift::protocol::TType _etype11;
+            iprot->readListBegin(_etype11, _size8);
+            this->methods.resize(_size8);
+            uint32_t _i12;
+            for (_i12 = 0; _i12 < _size8; ++_i12)
             {
-              Method _elem14;
-              xfer += _elem14.read(iprot);
-              this->methods.push_back(_elem14);
+              xfer += this->methods[_i12].read(iprot);
             }
             iprot->readListEnd();
           }
@@ -488,10 +486,10 @@
   xfer += oprot->writeFieldBegin("methods", facebook::thrift::protocol::T_LIST, 2);
   {
     xfer += oprot->writeListBegin(facebook::thrift::protocol::T_STRUCT, this->methods.size());
-    std::vector<Method> ::const_iterator _iter15;
-    for (_iter15 = this->methods.begin(); _iter15 != this->methods.end(); ++_iter15)
+    std::vector<Method> ::const_iterator _iter13;
+    for (_iter13 = this->methods.begin(); _iter13 != this->methods.end(); ++_iter13)
     {
-      xfer += (*_iter15).write(oprot);
+      xfer += (*_iter13).write(oprot);
     }
     xfer += oprot->writeListEnd();
   }
diff --git a/lib/cpp/src/reflection_limited_types.h b/lib/cpp/src/reflection_limited_types.h
index 677cb4a..23bf83b 100644
--- a/lib/cpp/src/reflection_limited_types.h
+++ b/lib/cpp/src/reflection_limited_types.h
@@ -35,8 +35,8 @@
 class SimpleType {
  public:
 
-  static char* ascii_fingerprint; // = "19B5240589E680301A7E32DF3971EFBE";
-  static char binary_fingerprint[16]; // = {0x19,0xB5,0x24,0x05,0x89,0xE6,0x80,0x30,0x1A,0x7E,0x32,0xDF,0x39,0x71,0xEF,0xBE};
+  static const char* ascii_fingerprint; // = "19B5240589E680301A7E32DF3971EFBE";
+  static const uint8_t binary_fingerprint[16]; // = {0x19,0xB5,0x24,0x05,0x89,0xE6,0x80,0x30,0x1A,0x7E,0x32,0xDF,0x39,0x71,0xEF,0xBE};
 
   SimpleType() : name("") {
   }
@@ -64,6 +64,8 @@
     return !(*this == rhs);
   }
 
+  bool operator < (const SimpleType & ) const;
+
   uint32_t read(facebook::thrift::protocol::TProtocol* iprot);
   uint32_t write(facebook::thrift::protocol::TProtocol* oprot) const;
 
@@ -72,8 +74,8 @@
 class ContainerType {
  public:
 
-  static char* ascii_fingerprint; // = "654FA6EFFF8242F4C2A604B970686634";
-  static char binary_fingerprint[16]; // = {0x65,0x4F,0xA6,0xEF,0xFF,0x82,0x42,0xF4,0xC2,0xA6,0x04,0xB9,0x70,0x68,0x66,0x34};
+  static const char* ascii_fingerprint; // = "654FA6EFFF8242F4C2A604B970686634";
+  static const uint8_t binary_fingerprint[16]; // = {0x65,0x4F,0xA6,0xEF,0xFF,0x82,0x42,0xF4,0xC2,0xA6,0x04,0xB9,0x70,0x68,0x66,0x34};
 
   ContainerType() {
   }
@@ -107,6 +109,8 @@
     return !(*this == rhs);
   }
 
+  bool operator < (const ContainerType & ) const;
+
   uint32_t read(facebook::thrift::protocol::TProtocol* iprot);
   uint32_t write(facebook::thrift::protocol::TProtocol* oprot) const;
 
@@ -115,8 +119,8 @@
 class ThriftType {
  public:
 
-  static char* ascii_fingerprint; // = "76BC1CC759001D7D85FEE75C4F183062";
-  static char binary_fingerprint[16]; // = {0x76,0xBC,0x1C,0xC7,0x59,0x00,0x1D,0x7D,0x85,0xFE,0xE7,0x5C,0x4F,0x18,0x30,0x62};
+  static const char* ascii_fingerprint; // = "76BC1CC759001D7D85FEE75C4F183062";
+  static const uint8_t binary_fingerprint[16]; // = {0x76,0xBC,0x1C,0xC7,0x59,0x00,0x1D,0x7D,0x85,0xFE,0xE7,0x5C,0x4F,0x18,0x30,0x62};
 
   ThriftType() : is_container(0) {
   }
@@ -152,6 +156,8 @@
     return !(*this == rhs);
   }
 
+  bool operator < (const ThriftType & ) const;
+
   uint32_t read(facebook::thrift::protocol::TProtocol* iprot);
   uint32_t write(facebook::thrift::protocol::TProtocol* oprot) const;
 
@@ -160,8 +166,8 @@
 class Argument {
  public:
 
-  static char* ascii_fingerprint; // = "8C45506BE0EFBB22FB19FA40DDCECB3F";
-  static char binary_fingerprint[16]; // = {0x8C,0x45,0x50,0x6B,0xE0,0xEF,0xBB,0x22,0xFB,0x19,0xFA,0x40,0xDD,0xCE,0xCB,0x3F};
+  static const char* ascii_fingerprint; // = "8C45506BE0EFBB22FB19FA40DDCECB3F";
+  static const uint8_t binary_fingerprint[16]; // = {0x8C,0x45,0x50,0x6B,0xE0,0xEF,0xBB,0x22,0xFB,0x19,0xFA,0x40,0xDD,0xCE,0xCB,0x3F};
 
   Argument() : key(0), name("") {
   }
@@ -193,6 +199,8 @@
     return !(*this == rhs);
   }
 
+  bool operator < (const Argument & ) const;
+
   uint32_t read(facebook::thrift::protocol::TProtocol* iprot);
   uint32_t write(facebook::thrift::protocol::TProtocol* oprot) const;
 
@@ -201,8 +209,8 @@
 class Method {
  public:
 
-  static char* ascii_fingerprint; // = "E6573428C492D24C84A19432D39A17B0";
-  static char binary_fingerprint[16]; // = {0xE6,0x57,0x34,0x28,0xC4,0x92,0xD2,0x4C,0x84,0xA1,0x94,0x32,0xD3,0x9A,0x17,0xB0};
+  static const char* ascii_fingerprint; // = "E6573428C492D24C84A19432D39A17B0";
+  static const uint8_t binary_fingerprint[16]; // = {0xE6,0x57,0x34,0x28,0xC4,0x92,0xD2,0x4C,0x84,0xA1,0x94,0x32,0xD3,0x9A,0x17,0xB0};
 
   Method() : name("") {
   }
@@ -234,6 +242,8 @@
     return !(*this == rhs);
   }
 
+  bool operator < (const Method & ) const;
+
   uint32_t read(facebook::thrift::protocol::TProtocol* iprot);
   uint32_t write(facebook::thrift::protocol::TProtocol* oprot) const;
 
@@ -242,8 +252,8 @@
 class Service {
  public:
 
-  static char* ascii_fingerprint; // = "4673B0777B701D9B02A7A74CEC7908A7";
-  static char binary_fingerprint[16]; // = {0x46,0x73,0xB0,0x77,0x7B,0x70,0x1D,0x9B,0x02,0xA7,0xA7,0x4C,0xEC,0x79,0x08,0xA7};
+  static const char* ascii_fingerprint; // = "4673B0777B701D9B02A7A74CEC7908A7";
+  static const uint8_t binary_fingerprint[16]; // = {0x46,0x73,0xB0,0x77,0x7B,0x70,0x1D,0x9B,0x02,0xA7,0xA7,0x4C,0xEC,0x79,0x08,0xA7};
 
   Service() : name(""), fully_reflected(0) {
   }
@@ -275,6 +285,8 @@
     return !(*this == rhs);
   }
 
+  bool operator < (const Service & ) const;
+
   uint32_t read(facebook::thrift::protocol::TProtocol* iprot);
   uint32_t write(facebook::thrift::protocol::TProtocol* oprot) const;
 
