diff --git a/compiler/cpp/CMakeLists.txt b/compiler/cpp/CMakeLists.txt
index 48cadbc..2d9529a 100644
--- a/compiler/cpp/CMakeLists.txt
+++ b/compiler/cpp/CMakeLists.txt
@@ -19,52 +19,52 @@
 
 # Windows has a different header
 if(MSVC)
-    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/windows/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h)
+    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/thrift/windows/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/thrift/version.h)
 else()
-    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h)
+    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/thrift/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/thrift/version.h)
 endif()
 
 find_package(FLEX REQUIRED)
 find_package(BISON REQUIRED)
 
 # Create flex and bison files and build the lib parse static library
-BISON_TARGET(thrifty ${CMAKE_CURRENT_SOURCE_DIR}/src/thrifty.yy ${CMAKE_CURRENT_BINARY_DIR}/thrifty.cc)
-FLEX_TARGET(thriftl ${CMAKE_CURRENT_SOURCE_DIR}/src/thriftl.ll ${CMAKE_CURRENT_BINARY_DIR}/thriftl.cc)
+BISON_TARGET(thrifty ${CMAKE_CURRENT_SOURCE_DIR}/src/thrift/thrifty.yy ${CMAKE_CURRENT_BINARY_DIR}/thrift/thrifty.cc)
+FLEX_TARGET(thriftl ${CMAKE_CURRENT_SOURCE_DIR}/src/thrift/thriftl.ll ${CMAKE_CURRENT_BINARY_DIR}/thrift/thriftl.cc)
 ADD_FLEX_BISON_DEPENDENCY(thriftl thrifty)
 
 # HACK: Work around the fact that bison crates a .hh file but we need a .h file
-add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/thrifty.h
-                   COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/thrifty.hh ${CMAKE_CURRENT_BINARY_DIR}/thrifty.h
-                   DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/thrifty.hh
+add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/thrift/thrifty.h
+                   COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/thrift/thrifty.hh ${CMAKE_CURRENT_BINARY_DIR}/thrift/thrifty.h
+                   DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/thrift/thrifty.hh
                    )
 
 set(libparse_SOURCES
-    ${CMAKE_CURRENT_BINARY_DIR}/thrifty.cc
-    ${CMAKE_CURRENT_BINARY_DIR}/thriftl.cc
-    ${CMAKE_CURRENT_BINARY_DIR}/thrifty.h
+    ${CMAKE_CURRENT_BINARY_DIR}/thrift/thrifty.cc
+    ${CMAKE_CURRENT_BINARY_DIR}/thrift/thriftl.cc
+    ${CMAKE_CURRENT_BINARY_DIR}/thrift/thrifty.h
 )
 
 add_library(libparse STATIC ${libparse_SOURCES})
 
 # Create the thrift compiler
 set(compiler_core
-    src/common.cc
-    src/generate/t_generator.cc
-    src/parse/t_typedef.cc
-    src/parse/parse.cc
-    ${CMAKE_CURRENT_BINARY_DIR}/version.h
+    src/thrift/common.cc
+    src/thrift/generate/t_generator.cc
+    src/thrift/parse/t_typedef.cc
+    src/thrift/parse/parse.cc
+    ${CMAKE_CURRENT_BINARY_DIR}/thrift/version.h
 )
 
 set(thrift-compiler_SOURCES
-    src/main.cc
-    src/audit/t_audit.cpp
+    src/thrift/main.cc
+    src/thrift/audit/t_audit.cpp
 )
 
 # This macro adds an option THRIFT_COMPILER_${NAME}
 # that allows enabling or disabling certain languages
 macro(THRIFT_ADD_COMPILER name description initial)
     string(TOUPPER "THRIFT_COMPILER_${name}" enabler)
-    set(src "src/generate/t_${name}_generator.cc")
+    set(src "src/thrift/generate/t_${name}_generator.cc")
     option(${enabler} ${description} ${initial})
     if(${enabler})
         list(APPEND thrift-compiler_SOURCES ${src})
@@ -112,25 +112,25 @@
 
 if(${WITH_PLUGIN})
     add_executable(thrift-bootstrap ${compiler_core}
-        src/main.cc
-        src/audit/t_audit.cpp
-        src/generate/t_cpp_generator.cc
+        src/thrift/main.cc
+        src/thrift/audit/t_audit.cpp
+        src/thrift/generate/t_cpp_generator.cc
     )
     target_link_libraries(thrift-bootstrap libparse)
 
     set(PLUGIN_GEN_SOURCES
-        ${CMAKE_CURRENT_BINARY_DIR}/plugin/plugin_types.h
-        ${CMAKE_CURRENT_BINARY_DIR}/plugin/plugin_types.cpp
-        ${CMAKE_CURRENT_BINARY_DIR}/plugin/plugin_constants.h
-        ${CMAKE_CURRENT_BINARY_DIR}/plugin/plugin_constants.cpp
+        ${CMAKE_CURRENT_BINARY_DIR}/thrift/plugin/plugin_types.h
+        ${CMAKE_CURRENT_BINARY_DIR}/thrift/plugin/plugin_types.cpp
+        ${CMAKE_CURRENT_BINARY_DIR}/thrift/plugin/plugin_constants.h
+        ${CMAKE_CURRENT_BINARY_DIR}/thrift/plugin/plugin_constants.cpp
     )
 
-    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/plugin)
+    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/thrift/plugin)
     add_custom_command(OUTPUT ${PLUGIN_GEN_SOURCES}
-        DEPENDS thrift-bootstrap src/plugin/plugin.thrift
+        DEPENDS thrift-bootstrap src/thrift/plugin/plugin.thrift
         COMMAND thrift-bootstrap -gen cpp
-        -out ${CMAKE_CURRENT_BINARY_DIR}/plugin
-        ${CMAKE_CURRENT_SOURCE_DIR}/src/plugin/plugin.thrift
+        -out ${CMAKE_CURRENT_BINARY_DIR}/thrift/plugin
+        ${CMAKE_CURRENT_SOURCE_DIR}/src/thrift/plugin/plugin.thrift
     )
 
     include_directories(../../lib/cpp/src)
@@ -139,9 +139,9 @@
     ADD_LIBRARY_THRIFT(thriftc
         ${compiler_core}
         ${PLUGIN_GEN_SOURCES}
-        src/logging.cc
-        src/plugin/plugin_output.cc
-        src/plugin/plugin.cc
+        src/thrift/logging.cc
+        src/thrift/plugin/plugin_output.cc
+        src/thrift/plugin/plugin.cc
     )
     TARGET_INCLUDE_DIRECTORIES_THRIFT(thriftc PUBLIC ${Boost_INCLUDE_DIRS})
     TARGET_LINK_LIBRARIES_THRIFT_AGAINST_THRIFT_LIBRARY(thriftc thrift PUBLIC)
@@ -155,6 +155,63 @@
 
 install(TARGETS thrift-compiler DESTINATION "${BIN_INSTALL_DIR}")
 
+if(${WITH_PLUGIN})
+  # Install the headers
+  install(FILES
+      "src/thrift/common.h"
+      "src/thrift/globals.h"
+      "src/thrift/logging.h"
+      "src/thrift/main.h"
+      "src/thrift/platform.h"
+      DESTINATION "${INCLUDE_INSTALL_DIR}/thrift")
+  install(FILES
+      "src/thrift/audit/t_audit.h"
+      DESTINATION "${INCLUDE_INSTALL_DIR}/thrift/audit")
+  install(FILES
+      "src/thrift/generate/t_generator.h"
+      "src/thrift/generate/t_generator_registry.h"
+      "src/thrift/generate/t_html_generator.h"
+      "src/thrift/generate/t_oop_generator.h"
+      DESTINATION "${INCLUDE_INSTALL_DIR}/thrift/generate")
+  install(FILES
+      "src/thrift/parse/t_base_type.h"
+      "src/thrift/parse/t_const.h"
+      "src/thrift/parse/t_const_value.h"
+      "src/thrift/parse/t_container.h"
+      "src/thrift/parse/t_doc.h"
+      "src/thrift/parse/t_enum.h"
+      "src/thrift/parse/t_enum_value.h"
+      "src/thrift/parse/t_field.h"
+      "src/thrift/parse/t_function.h"
+      "src/thrift/parse/t_list.h"
+      "src/thrift/parse/t_map.h"
+      "src/thrift/parse/t_program.h"
+      "src/thrift/parse/t_scope.h"
+      "src/thrift/parse/t_service.h"
+      "src/thrift/parse/t_set.h"
+      "src/thrift/parse/t_struct.h"
+      "src/thrift/parse/t_typedef.h"
+      "src/thrift/parse/t_type.h"
+      DESTINATION "${INCLUDE_INSTALL_DIR}/thrift/parse")
+  install(FILES
+      "src/thrift/plugin/plugin.h"
+      "src/thrift/plugin/plugin_output.h"
+      "src/thrift/plugin/type_util.h"
+      DESTINATION "${INCLUDE_INSTALL_DIR}/thrift/plugin")
+if(MSVC)
+  install(FILES
+      "src/thrift/windows/config.h"
+      DESTINATION "${INCLUDE_INSTALL_DIR}/thrift/windows")
+  install(FILES
+      "${CMAKE_BINARY_DIR}/compiler/cpp/thrift/windows/version.h"
+      DESTINATION "${INCLUDE_INSTALL_DIR}/thrift/windows")
+else()
+  install(FILES
+      "${CMAKE_BINARY_DIR}/compiler/cpp/thrift/version.h"
+      DESTINATION "${INCLUDE_INSTALL_DIR}/thrift")
+endif()
+endif()
+
 if(BUILD_TESTING)
     add_subdirectory(test)
 endif()
diff --git a/compiler/cpp/Makefile.am b/compiler/cpp/Makefile.am
index f7a7171..9d830d7 100644
--- a/compiler/cpp/Makefile.am
+++ b/compiler/cpp/Makefile.am
@@ -23,12 +23,12 @@
 
 AUTOMAKE_OPTIONS = subdir-objects
 
-# Note on why we have src and src/plugin directories:
+# Note on why we have src/thrift and src/thrift/plugin directories:
 # Since Automake supports only one set of BUILT_SOURCES per file and does not allow
 # SUBDIRS built before BUILT_SOURCES, we end up separate Makefile.am for each source
 # code generation, i.e. lex-yacc and Thrift, to achieve stable parallel make.
 
-SUBDIRS = src src/plugin .
+SUBDIRS = src src/thrift/plugin .
 if WITH_TESTS
 SUBDIRS += test
 endif
@@ -37,82 +37,82 @@
 
 thrift_OBJDIR = obj
 
-plugin_gen = src/plugin/plugin_types.h \
-             src/plugin/plugin_types.cpp \
-             src/plugin/plugin_constants.h \
-             src/plugin/plugin_constants.cpp
+plugin_gen = src/thrift/plugin/plugin_types.h \
+             src/thrift/plugin/plugin_types.cpp \
+             src/thrift/plugin/plugin_constants.h \
+             src/thrift/plugin/plugin_constants.cpp
 
-compiler_core =  src/common.h \
-                 src/common.cc \
-                 src/generate/t_generator.cc \
-                 src/generate/t_generator_registry.h \
-                 src/globals.h \
-                 src/platform.h \
-                 src/logging.h \
-                 src/parse/t_doc.h \
-                 src/parse/t_type.h \
-                 src/parse/t_base_type.h \
-                 src/parse/t_enum.h \
-                 src/parse/t_enum_value.h \
-                 src/parse/t_typedef.h \
-                 src/parse/t_typedef.cc \
-                 src/parse/t_container.h \
-                 src/parse/t_list.h \
-                 src/parse/t_set.h \
-                 src/parse/t_map.h \
-                 src/parse/t_struct.h \
-                 src/parse/t_field.h \
-                 src/parse/t_service.h \
-                 src/parse/t_function.h \
-                 src/parse/t_program.h \
-                 src/parse/t_scope.h \
-                 src/parse/t_const.h \
-                 src/parse/t_const_value.h \
-                 src/parse/parse.cc \
-                 src/generate/t_generator.h \
-                 src/generate/t_oop_generator.h \
-                 src/generate/t_html_generator.h \
-                 src/windows/config.h \
-                 src/windows/version.h
+compiler_core =  src/thrift/common.h \
+                 src/thrift/common.cc \
+                 src/thrift/generate/t_generator.cc \
+                 src/thrift/generate/t_generator_registry.h \
+                 src/thrift/globals.h \
+                 src/thrift/platform.h \
+                 src/thrift/logging.h \
+                 src/thrift/parse/t_doc.h \
+                 src/thrift/parse/t_type.h \
+                 src/thrift/parse/t_base_type.h \
+                 src/thrift/parse/t_enum.h \
+                 src/thrift/parse/t_enum_value.h \
+                 src/thrift/parse/t_typedef.h \
+                 src/thrift/parse/t_typedef.cc \
+                 src/thrift/parse/t_container.h \
+                 src/thrift/parse/t_list.h \
+                 src/thrift/parse/t_set.h \
+                 src/thrift/parse/t_map.h \
+                 src/thrift/parse/t_struct.h \
+                 src/thrift/parse/t_field.h \
+                 src/thrift/parse/t_service.h \
+                 src/thrift/parse/t_function.h \
+                 src/thrift/parse/t_program.h \
+                 src/thrift/parse/t_scope.h \
+                 src/thrift/parse/t_const.h \
+                 src/thrift/parse/t_const_value.h \
+                 src/thrift/parse/parse.cc \
+                 src/thrift/generate/t_generator.h \
+                 src/thrift/generate/t_oop_generator.h \
+                 src/thrift/generate/t_html_generator.h \
+                 src/thrift/windows/config.h \
+                 src/thrift/windows/version.h
 
-thrift_SOURCES = src/main.h \
-                 src/main.cc \
-                 src/audit/t_audit.cpp \
-                 src/audit/t_audit.h
+thrift_SOURCES = src/thrift/main.h \
+                 src/thrift/main.cc \
+                 src/thrift/audit/t_audit.cpp \
+                 src/thrift/audit/t_audit.h
 
 # Specific client generator source
-thrift_SOURCES += src/generate/t_c_glib_generator.cc \
-                  src/generate/t_cpp_generator.cc \
-                  src/generate/t_java_generator.cc \
-                  src/generate/t_json_generator.cc \
-                  src/generate/t_as3_generator.cc \
-                  src/generate/t_dart_generator.cc \
-                  src/generate/t_haxe_generator.cc \
-                  src/generate/t_csharp_generator.cc \
-                  src/generate/t_py_generator.cc \
-                  src/generate/t_rb_generator.cc \
-                  src/generate/t_perl_generator.cc \
-                  src/generate/t_php_generator.cc \
-                  src/generate/t_erl_generator.cc \
-                  src/generate/t_cocoa_generator.cc \
-                  src/generate/t_swift_generator.cc \
-                  src/generate/t_st_generator.cc \
-                  src/generate/t_ocaml_generator.cc \
-                  src/generate/t_hs_generator.cc \
-                  src/generate/t_xsd_generator.cc \
-                  src/generate/t_xml_generator.cc \
-                  src/generate/t_html_generator.cc \
-                  src/generate/t_js_generator.cc \
-                  src/generate/t_javame_generator.cc \
-                  src/generate/t_delphi_generator.cc \
-                  src/generate/t_go_generator.cc \
-                  src/generate/t_gv_generator.cc \
-                  src/generate/t_d_generator.cc \
-                  src/generate/t_lua_generator.cc
+thrift_SOURCES += src/thrift/generate/t_c_glib_generator.cc \
+                  src/thrift/generate/t_cpp_generator.cc \
+                  src/thrift/generate/t_java_generator.cc \
+                  src/thrift/generate/t_json_generator.cc \
+                  src/thrift/generate/t_as3_generator.cc \
+                  src/thrift/generate/t_dart_generator.cc \
+                  src/thrift/generate/t_haxe_generator.cc \
+                  src/thrift/generate/t_csharp_generator.cc \
+                  src/thrift/generate/t_py_generator.cc \
+                  src/thrift/generate/t_rb_generator.cc \
+                  src/thrift/generate/t_perl_generator.cc \
+                  src/thrift/generate/t_php_generator.cc \
+                  src/thrift/generate/t_erl_generator.cc \
+                  src/thrift/generate/t_cocoa_generator.cc \
+                  src/thrift/generate/t_swift_generator.cc \
+                  src/thrift/generate/t_st_generator.cc \
+                  src/thrift/generate/t_ocaml_generator.cc \
+                  src/thrift/generate/t_hs_generator.cc \
+                  src/thrift/generate/t_xsd_generator.cc \
+                  src/thrift/generate/t_xml_generator.cc \
+                  src/thrift/generate/t_html_generator.cc \
+                  src/thrift/generate/t_js_generator.cc \
+                  src/thrift/generate/t_javame_generator.cc \
+                  src/thrift/generate/t_delphi_generator.cc \
+                  src/thrift/generate/t_go_generator.cc \
+                  src/thrift/generate/t_gv_generator.cc \
+                  src/thrift/generate/t_d_generator.cc \
+                  src/thrift/generate/t_lua_generator.cc
 
 thrift_CPPFLAGS = -I$(srcdir)/src
 thrift_CXXFLAGS = -Wall -Wextra -pedantic
-thrift_LDADD = @LEXLIB@ src/libparse.a
+thrift_LDADD = @LEXLIB@ src/thrift/libparse.a
 
 if !WITH_PLUGIN
 thrift_SOURCES += $(compiler_core)
@@ -125,18 +125,64 @@
 
 nodist_libthriftc_la_SOURCES = $(plugin_gen)
 libthriftc_la_SOURCES = $(compiler_core) \
-                        src/plugin/type_util.h \
-                        src/plugin/plugin.h \
-                        src/plugin/plugin.cc \
-                        src/plugin/plugin_output.h \
-                        src/plugin/plugin_output.cc \
-                        src/plugin/plugin.thrift \
-                        src/logging.cc
+                        src/thrift/plugin/type_util.h \
+                        src/thrift/plugin/plugin.h \
+                        src/thrift/plugin/plugin.cc \
+                        src/thrift/plugin/plugin_output.h \
+                        src/thrift/plugin/plugin_output.cc \
+                        src/thrift/plugin/plugin.thrift \
+                        src/thrift/logging.cc
 
 
 libthriftc_la_CPPFLAGS = -I$(srcdir)/src -Isrc -I$(top_builddir)/lib/cpp/src -DTHRIFT_ENABLE_PLUGIN=1
 libthriftc_la_CXXFLAGS = -Wall -Wextra -pedantic
 libthriftc_la_LIBADD = $(top_builddir)/lib/cpp/libthrift.la
+
+include_thriftdir = $(includedir)/thrift
+include_thrift_HEADERS = src/thrift/common.h \
+                         src/thrift/globals.h \
+                         src/thrift/logging.h \
+                         src/thrift/main.h \
+                         src/thrift/platform.h \
+                         src/thrift/version.h
+
+include_auditdir = $(include_thriftdir)/windows
+include_audit_HEADERS = src/thrift/audit/t_audit.h
+
+include_generatedir = $(include_thriftdir)/generate
+include_generate_HEADERS = src/thrift/generate/t_generator.h \
+                           src/thrift/generate/t_generator_registry.h \
+                           src/thrift/generate/t_oop_generator.h \
+                           src/thrift/generate/t_html_generator.h
+
+include_parsedir = $(include_thriftdir)/parse
+include_parse_HEADERS = src/thrift/parse/t_service.h \
+                        src/thrift/parse/t_program.h \
+                        src/thrift/parse/t_field.h \
+                        src/thrift/parse/t_scope.h \
+                        src/thrift/parse/t_typedef.h \
+                        src/thrift/parse/t_set.h \
+                        src/thrift/parse/t_const_value.h \
+                        src/thrift/parse/t_enum_value.h \
+                        src/thrift/parse/t_const.h \
+                        src/thrift/parse/t_list.h \
+                        src/thrift/parse/t_map.h \
+                        src/thrift/parse/t_container.h \
+                        src/thrift/parse/t_base_type.h \
+                        src/thrift/parse/t_enum.h \
+                        src/thrift/parse/t_function.h \
+                        src/thrift/parse/t_type.h \
+                        src/thrift/parse/t_doc.h \
+                        src/thrift/parse/t_struct.h
+
+include_plugindir = $(include_thriftdir)/plugin
+include_plugin_HEADERS = src/thrift/plugin/plugin.h \
+                         src/thrift/plugin/type_util.h \
+                         src/thrift/plugin/plugin_output.h
+
+include_windowsdir = $(include_thriftdir)/windows
+include_windows_HEADERS = src/thrift/windows/version.h \
+                          src/thrift/windows/config.h
 endif
 
 WINDOWS_DIST = \
@@ -153,7 +199,7 @@
 clean-local:
 	$(RM) version.h windows/version.h $(plugin_gen)
 
-src/main.cc: src/version.h
+src/thrift/main.cc: src/thrift/version.h
 
 style-local:
-	$(CPPSTYLE_CMD)
+  $(CPPSTYLE_CMD)
diff --git a/compiler/cpp/src/Makefile.am b/compiler/cpp/src/Makefile.am
index e2fae70..f1863d5 100644
--- a/compiler/cpp/src/Makefile.am
+++ b/compiler/cpp/src/Makefile.am
@@ -25,63 +25,63 @@
 
 AM_YFLAGS = -d
 
-BUILT_SOURCES = thrifty.cc
+BUILT_SOURCES = thrift/thrifty.cc
 
-noinst_LIBRARIES = libparse.a
+noinst_LIBRARIES = thrift/libparse.a
 
-libparse_a_CPPFLAGS = -I$(srcdir)
-libparse_a_CXXFLAGS = -Wall -Wno-sign-compare -Wno-unused
+thrift_libparse_a_CPPFLAGS = -I$(srcdir)
+thrift_libparse_a_CXXFLAGS = -Wall -Wno-sign-compare -Wno-unused
 
-libparse_a_SOURCES = thrifty.yy \
-                     thriftl.ll
+thrift_libparse_a_SOURCES = thrift/thrifty.yy \
+                     thrift/thriftl.ll
 
 clean-local:
-	$(RM) thriftl.cc thrifty.cc thrifty.h thrifty.hh
+	$(RM) thrift/thriftl.cc thrift/thrifty.cc thrift/thrifty.h thrift/thrifty.hh
 
 if WITH_PLUGIN
-noinst_PROGRAMS = thrift-bootstrap
+noinst_PROGRAMS = thrift/thrift-bootstrap
 
-thrift_bootstrap_SOURCES = \
-                 common.h \
-                 common.cc \
-                 audit/t_audit.h \
-                 audit/t_audit.cpp \
-                 generate/t_generator.cc \
-                 generate/t_generator_registry.h \
-                 globals.h \
-                 platform.h \
-                 logging.h \
-                 parse/t_doc.h \
-                 parse/t_type.h \
-                 parse/t_base_type.h \
-                 parse/t_enum.h \
-                 parse/t_enum_value.h \
-                 parse/t_typedef.h \
-                 parse/t_typedef.cc \
-                 parse/t_container.h \
-                 parse/t_list.h \
-                 parse/t_set.h \
-                 parse/t_map.h \
-                 parse/t_struct.h \
-                 parse/t_field.h \
-                 parse/t_service.h \
-                 parse/t_function.h \
-                 parse/t_program.h \
-                 parse/t_scope.h \
-                 parse/t_const.h \
-                 parse/t_const_value.h \
-                 parse/parse.cc \
-                 generate/t_generator.h \
-                 generate/t_oop_generator.h \
-                 generate/t_html_generator.h \
-                 windows/config.h \
-                 windows/version.h \
-                 generate/t_cpp_generator.cc \
-                 main.h \
-                 main.cc
+thrift_thrift_bootstrap_SOURCES = \
+                 thrift/common.h \
+                 thrift/common.cc \
+                 thrift/audit/t_audit.h \
+                 thrift/audit/t_audit.cpp \
+                 thrift/generate/t_generator.cc \
+                 thrift/generate/t_generator_registry.h \
+                 thrift/globals.h \
+                 thrift/platform.h \
+                 thrift/logging.h \
+                 thrift/parse/t_doc.h \
+                 thrift/parse/t_type.h \
+                 thrift/parse/t_base_type.h \
+                 thrift/parse/t_enum.h \
+                 thrift/parse/t_enum_value.h \
+                 thrift/parse/t_typedef.h \
+                 thrift/parse/t_typedef.cc \
+                 thrift/parse/t_container.h \
+                 thrift/parse/t_list.h \
+                 thrift/parse/t_set.h \
+                 thrift/parse/t_map.h \
+                 thrift/parse/t_struct.h \
+                 thrift/parse/t_field.h \
+                 thrift/parse/t_service.h \
+                 thrift/parse/t_function.h \
+                 thrift/parse/t_program.h \
+                 thrift/parse/t_scope.h \
+                 thrift/parse/t_const.h \
+                 thrift/parse/t_const_value.h \
+                 thrift/parse/parse.cc \
+                 thrift/generate/t_generator.h \
+                 thrift/generate/t_oop_generator.h \
+                 thrift/generate/t_html_generator.h \
+                 thrift/windows/config.h \
+                 thrift/windows/version.h \
+                 thrift/generate/t_cpp_generator.cc \
+                 thrift/main.h \
+                 thrift/main.cc
 
 main.cc: version.h
 
-thrift_bootstrap_CXXFLAGS = -Wall -Wextra -pedantic
-thrift_bootstrap_LDADD = @LEXLIB@ libparse.a
+thrift_thrift_bootstrap_CXXFLAGS = -Wall -Wextra -pedantic
+thrift_thrift_bootstrap_LDADD = @LEXLIB@ thrift/libparse.a
 endif
diff --git a/compiler/cpp/src/audit/t_audit.cpp b/compiler/cpp/src/thrift/audit/t_audit.cpp
similarity index 97%
rename from compiler/cpp/src/audit/t_audit.cpp
rename to compiler/cpp/src/thrift/audit/t_audit.cpp
index afcbd5e..1386f3b 100644
--- a/compiler/cpp/src/audit/t_audit.cpp
+++ b/compiler/cpp/src/thrift/audit/t_audit.cpp
@@ -12,16 +12,16 @@
 #include <limits.h>
 
 // Careful: must include globals first for extern definitions
-#include "globals.h"
+#include "thrift/globals.h"
 
-#include "parse/t_program.h"
-#include "parse/t_scope.h"
-#include "parse/t_const.h"
-#include "parse/t_field.h"
+#include "thrift/parse/t_program.h"
+#include "thrift/parse/t_scope.h"
+#include "thrift/parse/t_const.h"
+#include "thrift/parse/t_field.h"
 
-#include "version.h"
+#include "thrift/version.h"
 
-#include "t_audit.h"
+#include "thrift/audit/t_audit.h"
 
 extern int g_warn;
 extern std::string g_curpath;
@@ -85,7 +85,7 @@
          if(enumName != newEnumValue->get_name())
          {
             thrift_audit_warning(1, "Name of the value %d changed in enum %s\n", enumValue, oldEnum->get_name().c_str());
-         }      
+         }
       }
       else
       {
@@ -125,7 +125,7 @@
 bool compare_type(t_type* newType, t_type* oldType)
 {
    //Comparing names of two types will work when the newType and oldType are basic types or structs or enums.
-   //However, when they are containers, get_name() returns empty for which we have to compare the type of 
+   //However, when they are containers, get_name() returns empty for which we have to compare the type of
    //their elements as well.
    if((newType->get_name()).empty() && (oldType->get_name()).empty())
    {
@@ -150,7 +150,7 @@
       {
          t_type* newElementType = ((t_set*)newType)->get_elem_type();
          t_type* oldElementType = ((t_set*)oldType)->get_elem_type();
-         return compare_type(newElementType, oldElementType); 
+         return compare_type(newElementType, oldElementType);
       }
       else
       {
@@ -170,7 +170,7 @@
 bool compare_pair(std::pair<t_const_value*, t_const_value*> newMapPair, std::pair<t_const_value*, t_const_value*> oldMapPair)
 {
    return compare_defaults(newMapPair.first, oldMapPair.first) && compare_defaults(newMapPair.second, oldMapPair.second);
-}   
+}
 
 // This function returns 'true' if the default values are same. Returns false if they are different.
 bool compare_defaults(t_const_value* newStructDefault, t_const_value* oldStructDefault)
@@ -259,7 +259,7 @@
    std::vector<t_field*>::const_iterator newStructMemberIt = newStructMembersInIdOrder.begin();
 
    // Since we have the struct members in their ID order, comparing their IDs can be done by traversing the two member
-   // lists together.  
+   // lists together.
    while(!(oldStructMemberIt == oldStructMembersInIdOrder.end() && newStructMemberIt == newStructMembersInIdOrder.end()))
    {
       if(newStructMemberIt == newStructMembersInIdOrder.end() && oldStructMemberIt != oldStructMembersInIdOrder.end())
@@ -462,5 +462,3 @@
       }
    }
 }
-
-
diff --git a/compiler/cpp/src/audit/t_audit.h b/compiler/cpp/src/thrift/audit/t_audit.h
similarity index 100%
rename from compiler/cpp/src/audit/t_audit.h
rename to compiler/cpp/src/thrift/audit/t_audit.h
diff --git a/compiler/cpp/src/common.cc b/compiler/cpp/src/thrift/common.cc
similarity index 96%
rename from compiler/cpp/src/common.cc
rename to compiler/cpp/src/thrift/common.cc
index 6e11bb2..3a2b9d3 100644
--- a/compiler/cpp/src/common.cc
+++ b/compiler/cpp/src/thrift/common.cc
@@ -17,8 +17,8 @@
  * under the License.
  */
 
-#include "common.h"
-#include "parse/t_base_type.h"
+#include "thrift/common.h"
+#include "thrift/parse/t_base_type.h"
 
 t_type* g_type_void;
 t_type* g_type_string;
diff --git a/compiler/cpp/src/common.h b/compiler/cpp/src/thrift/common.h
similarity index 97%
rename from compiler/cpp/src/common.h
rename to compiler/cpp/src/thrift/common.h
index ab7c423..6948846 100644
--- a/compiler/cpp/src/common.h
+++ b/compiler/cpp/src/thrift/common.h
@@ -20,7 +20,7 @@
 #ifndef T_COMMON_H
 #define T_COMMON_H
 
-#include "parse/t_type.h"
+#include "thrift/parse/t_type.h"
 
 /**
  * Global types for the parser to be able to reference
diff --git a/compiler/cpp/src/generate/t_as3_generator.cc b/compiler/cpp/src/thrift/generate/t_as3_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_as3_generator.cc
rename to compiler/cpp/src/thrift/generate/t_as3_generator.cc
index 67beaf6..5ae3f91 100644
--- a/compiler/cpp/src/generate/t_as3_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_as3_generator.cc
@@ -27,8 +27,8 @@
 #include <sys/stat.h>
 #include <stdexcept>
 
-#include "platform.h"
-#include "t_oop_generator.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -57,7 +57,7 @@
       if( iter->first.compare("bindable") == 0) {
         bindable_ = true;
       } else {
-        throw "unknown option as3:" + iter->first; 
+        throw "unknown option as3:" + iter->first;
       }
     }
 
diff --git a/compiler/cpp/src/generate/t_c_glib_generator.cc b/compiler/cpp/src/thrift/generate/t_c_glib_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_c_glib_generator.cc
rename to compiler/cpp/src/thrift/generate/t_c_glib_generator.cc
index 3a3fe54..7d4e4f0 100644
--- a/compiler/cpp/src/generate/t_c_glib_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_c_glib_generator.cc
@@ -29,8 +29,8 @@
 
 #include <ctype.h>
 
-#include "platform.h"
-#include "t_oop_generator.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -65,7 +65,7 @@
 
     /* no options yet */
     for( iter = parsed_options.begin(); iter != parsed_options.end(); ++iter) {
-      throw "unknown option c_glib:" + iter->first; 
+      throw "unknown option c_glib:" + iter->first;
     }
 
     /* set the namespace */
diff --git a/compiler/cpp/src/generate/t_cocoa_generator.cc b/compiler/cpp/src/thrift/generate/t_cocoa_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_cocoa_generator.cc
rename to compiler/cpp/src/thrift/generate/t_cocoa_generator.cc
index 794fb44..eba94c0 100644
--- a/compiler/cpp/src/generate/t_cocoa_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_cocoa_generator.cc
@@ -25,8 +25,8 @@
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <sstream>
-#include "t_oop_generator.h"
-#include "platform.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::map;
 using std::ostream;
@@ -72,7 +72,7 @@
       } else if( iter->first.compare("pods") == 0) {
         pods_ = true;
       } else {
-        throw "unknown option cocoa:" + iter->first; 
+        throw "unknown option cocoa:" + iter->first;
       }
     }
 
@@ -292,7 +292,7 @@
 
   f_impl_ << cocoa_imports() << cocoa_thrift_imports() << "#import \"" << f_header_name << "\""
           << endl << endl;
-  
+
   error_constant_ = 60000;
 }
 
@@ -335,9 +335,9 @@
     }
     includes << endl;
   }
-  
+
   includes << endl;
-  
+
   if (promise_kit_) {
     includes << "#import ";
     if (pods_) {
@@ -356,7 +356,7 @@
              << capitalize(other_includes[i]->get_name())
              << ".h\"" << endl;
   }
-  
+
   includes << endl;
 
   return includes.str();
@@ -444,7 +444,7 @@
 
   const_interface << "FOUNDATION_EXPORT NSString *" << cocoa_prefix_ << capitalize(program_name_) << "ErrorDomain;" << endl
                   << endl;
-  
+
 
   bool needs_class = false;
 
@@ -460,12 +460,12 @@
       needs_class = true;
     }
   }
-  
-  
+
+
   string constants_class_name = cocoa_prefix_ + capitalize(program_name_) + "Constants";
 
   if (needs_class) {
-    
+
     const_interface << endl;
 
     const_interface << "@interface " << constants_class_name << " : NSObject ";
@@ -487,7 +487,7 @@
 
   // this gets spit into the header file in ::close_generator
   constants_declarations_ = const_interface.str();
-  
+
   f_impl_ << "NSString *" << cocoa_prefix_ << capitalize(program_name_) << "ErrorDomain = "
           << "@\"" << cocoa_prefix_ << capitalize(program_name_) << "ErrorDomain\";" << endl << endl;
 
@@ -571,14 +571,14 @@
 void t_cocoa_generator::generate_cocoa_struct_interface(ofstream& out,
                                                         t_struct* tstruct,
                                                         bool is_exception) {
-  
+
   if (is_exception) {
     out << "enum {" << endl
         << "  " << cocoa_prefix_ << capitalize(program_name_) << "Error" << tstruct->get_name() <<  " = -" << error_constant_++ << endl
         << "};" << endl
         << endl;
   }
-  
+
   out << "@interface " << cocoa_prefix_ << tstruct->get_name() << " : ";
 
   if (is_exception) {
@@ -587,7 +587,7 @@
     out << "NSObject ";
   }
   out << "<TBase, NSCoding, NSCopying> " << endl;
-  
+
   out << endl;
 
   // properties
@@ -601,7 +601,7 @@
       out << endl;
     }
   }
-  
+
   out << endl;
 
   // initializer for all fields
@@ -647,14 +647,14 @@
 
   indent(out) << "- (instancetype) initWithCoder: (NSCoder *) decoder" << endl;
   scope_up(out);
-  
+
   if (is_exception) {
     // NSExceptions conform to NSCoding, so we can call super
     indent(out) << "self = [super initWithCoder: decoder];" << endl;
   } else {
     indent(out) << "self = [super init];" << endl;
   }
-  
+
   indent(out) << "if (self) ";
   scope_up(out);
 
@@ -701,7 +701,7 @@
     out << indent() << "_" << (*m_iter)->get_name() << "IsSet = YES;" << endl;
     scope_down(out);
   }
-  
+
   scope_down(out);
 
   out << indent() << "return self;" << endl;
@@ -719,7 +719,7 @@
 
   indent(out) << "- (void) encodeWithCoder: (NSCoder *) encoder" << endl;
   scope_up(out);
-  
+
   if (is_exception) {
     // NSExceptions conform to NSCoding, so we can call super
     out << indent() << "[super encodeWithCoder: encoder];" << endl;
@@ -783,16 +783,16 @@
 void t_cocoa_generator::generate_cocoa_struct_copy_method(ofstream& out, t_struct* tstruct, bool is_exception) {
   out << indent() << "- (instancetype) copyWithZone:(NSZone *)zone" << endl;
   scope_up(out);
-  
+
   if (is_exception) {
     out << indent() << type_name(tstruct) << " val = [" << cocoa_prefix_ << tstruct->get_name() << " errorWithDomain: self.domain code: self.code userInfo: self.userInfo];" << endl;
   } else {
     out << indent() << type_name(tstruct) << " val = [" << cocoa_prefix_ << tstruct->get_name() << " new];" << endl;
   }
-  
+
   const vector<t_field*>& members = tstruct->get_members();
   vector<t_field*>::const_iterator m_iter;
-  
+
   for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
     t_type* t = get_true_type((*m_iter)->get_type());
     out << indent() << "if (_" << (*m_iter)->get_name() << "IsSet)" << endl;
@@ -805,9 +805,9 @@
     out << endl;
     scope_down(out);
   }
-  
+
   out << indent() << "return val;" << endl;
-  
+
   scope_down(out);
   out << endl;
 }
@@ -878,7 +878,7 @@
 
   if (!members.empty()) {
     indent(out) << class_name << " *other = (" << class_name << " *)anObject;" << endl;
-    
+
     for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
       t_type* t = get_true_type((*m_iter)->get_type());
       string name = (*m_iter)->get_name();
@@ -969,7 +969,7 @@
     } else {
       out << indent() << "self = [super init];" << endl;
     }
-    
+
     indent(out) << "if (self)";
     scope_up(out);
     for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
@@ -1069,7 +1069,7 @@
       out << indent() << "  NSLog(@\"%s: field ID %i has unexpected type %i.  Skipping.\", "
                          "__PRETTY_FUNCTION__, (int)fieldID, (int)fieldType);" << endl;
     }
-    
+
     out << indent() << "  if (![TProtocolUtil skipType: fieldType onProtocol: inProtocol error: __thriftError]) return NO;" << endl;
     out << indent() << "}" << endl << indent() << "break;" << endl;
     indent_down();
@@ -1083,7 +1083,7 @@
   }
 
   out << indent() << "  if (![TProtocolUtil skipType: fieldType onProtocol: inProtocol error: __thriftError]) return NO;" << endl;
-  
+
   out << indent() << "  break;" << endl;
 
   scope_down(out);
@@ -1101,7 +1101,7 @@
   }
 
   indent(out) << "return YES;" << endl;
-  
+
   indent_down();
   out << indent() << "}" << endl << endl;
 }
@@ -1150,7 +1150,7 @@
       << indent() << "if (![outProtocol writeStructEnd: __thriftError]) return NO;" << endl;
 
   indent(out) << "return YES;" << endl;
-  
+
   indent_down();
   out << indent() << "}" << endl << endl;
 }
@@ -1214,7 +1214,7 @@
       << endl;
 
   indent(out) << "return YES;" << endl;
-  
+
   indent_down();
   out << indent() << "}" << endl << endl;
 }
@@ -1299,7 +1299,7 @@
  * @param tstruct The struct definition
  */
 void t_cocoa_generator::generate_cocoa_struct_description(ofstream& out, t_struct* tstruct) {
-  
+
   // Allow use of debugDescription so the app can add description via a cateogory/extension
   if (debug_descriptions_) {
     out << indent() << "- (NSString *) debugDescription {" << endl;
@@ -1362,11 +1362,11 @@
   vector<t_function*> functions = tservice->get_functions();
   vector<t_function*>::iterator f_iter;
   for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
-    
+
     t_struct* ts = (*f_iter)->get_arglist();
-    
+
     string qname = function_args_helper_struct_type(tservice, *f_iter);
-    
+
     t_struct qname_ts = t_struct(ts->get_program(), qname);
 
     const vector<t_field*>& members = ts->get_members();
@@ -1374,7 +1374,7 @@
     for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
       qname_ts.append(*m_iter);
     }
-    
+
     generate_cocoa_struct_interface(f_impl_, &qname_ts, false);
     generate_cocoa_struct_implementation(f_impl_, &qname_ts, false, false);
     generate_function_helpers(tservice, *f_iter);
@@ -1534,7 +1534,7 @@
   // Open function
   indent(out) << "- (BOOL) send_" << tfunction->get_name() << argument_list(tfunction->get_arglist(), needs_protocol ? "outProtocol" : "", true) << endl;
   scope_up(out);
-  
+
   // Serialize the request
   out << indent() << "if (![outProtocol writeMessageBeginWithName: @\"" << funname << "\""
       << (tfunction->is_oneway() ? " type: TMessageTypeONEWAY" : " type: TMessageTypeCALL")
@@ -1582,7 +1582,7 @@
     t_function* tfunction,
     bool needs_protocol) {
 
-  
+
   // Open function
   indent(out) << "- (BOOL) recv_" << tfunction->get_name();
   if (!tfunction->get_returntype()->is_void()) {
@@ -1668,7 +1668,7 @@
 void t_cocoa_generator::generate_cocoa_service_client_send_function_invocation(
                                                                                ofstream& out,
                                                                                t_function* tfunction) {
-  
+
   t_struct* arg_struct = tfunction->get_arglist();
   const vector<t_field*>& fields = arg_struct->get_members();
   vector<t_field*>::const_iterator fld_iter;
@@ -1699,7 +1699,7 @@
                                                                                      ofstream& out,
                                                                                      t_function* tfunction,
                                                                                      string failureBlockName) {
-  
+
   t_struct* arg_struct = tfunction->get_arglist();
   const vector<t_field*>& fields = arg_struct->get_members();
   vector<t_field*>::const_iterator fld_iter;
@@ -1732,9 +1732,9 @@
  */
 void t_cocoa_generator::generate_cocoa_service_client_implementation(ofstream& out,
                                                                      t_service* tservice) {
-  
+
   string name = cocoa_prefix_ + tservice->get_name() + "Client";
-  
+
   out << "@interface " << name << " () ";
   scope_up(out);
   out << endl;
@@ -1744,7 +1744,7 @@
   scope_down(out);
   out << endl;
   out << "@end" << endl << endl;
-  
+
   out << "@implementation " << name << endl;
 
   // initializers
@@ -1816,7 +1816,7 @@
  */
 void t_cocoa_generator::generate_cocoa_service_client_async_implementation(ofstream& out,
                                                                            t_service* tservice) {
-  
+
   string name = cocoa_prefix_ + tservice->get_name() + "ClientAsync";
 
   out << "@interface " << name << " () ";
@@ -1828,8 +1828,8 @@
   scope_down(out);
   out << endl;
   out << "@end" << endl << endl;
-  
-  
+
+
   out << "@implementation " << name << endl
       << endl << "- (id) initWithProtocolFactory: (id <TProtocolFactory>) aProtocolFactory "
                  "transportFactory: (id <TAsyncTransportFactory>) aTransportFactory;" << endl;
@@ -1858,12 +1858,12 @@
     // Open function
     indent(out) << "- " << async_function_signature(*f_iter, false) << endl;
     scope_up(out);
-    
+
     out << indent() << "NSError *thriftError;" << endl
         << indent() << "id<TAsyncTransport> transport = [transportFactory newTransport];" << endl
         << indent() << "id<TProtocol> protocol = [protocolFactory newProtocolOnTransport:transport];" << endl
         << endl;
-    
+
     generate_cocoa_service_client_send_async_function_invocation(out, *f_iter, "failureBlock");
 
     out << indent() << "[transport flushWithCompletion:^{" << endl;
@@ -1871,7 +1871,7 @@
 
     if (!(*f_iter)->is_oneway()) {
       out << indent() << "NSError *thriftError;" << endl;
-      
+
       if (!(*f_iter)->get_returntype()->is_void()) {
         out << indent() << type_name((*f_iter)->get_returntype()) << " result;" << endl;
       }
@@ -1885,7 +1885,7 @@
           << indent() << "return;" << endl;
       scope_down(out);
     }
-    
+
     out << indent() << "responseBlock(";
     if (!(*f_iter)->is_oneway() && !(*f_iter)->get_returntype()->is_void()) {
       out << "result";
@@ -1893,35 +1893,35 @@
     out << ");" << endl;
 
     indent_down();
-    
+
     out << indent() << "} failure:failureBlock];" << endl;
-    
+
     scope_down(out);
 
     out << endl;
-    
+
     // Promise function
     if (promise_kit_) {
-      
+
       indent(out) << "- " << promise_function_signature(*f_iter) << endl;
       scope_up(out);
-      
+
       out << indent() << "return [AnyPromise promiseWithResolverBlock:^(PMKResolver resolver) {" << endl;
       indent_up();
-      
+
       out << indent() << "NSError *thriftError;" << endl
           << indent() << "id<TAsyncTransport> transport = [transportFactory newTransport];" << endl
           << indent() << "id<TProtocol> protocol = [protocolFactory newProtocolOnTransport:transport];" << endl
           << endl;
-      
+
       generate_cocoa_service_client_send_async_function_invocation(out, *f_iter, "resolver");
-      
+
       out << indent() << "[transport flushWithCompletion:^{" << endl;
       indent_up();
-      
+
       if (!(*f_iter)->is_oneway()) {
         out << indent() << "NSError *thriftError;" << endl;
-        
+
         if (!(*f_iter)->get_returntype()->is_void()) {
           out << indent() << type_name((*f_iter)->get_returntype()) << " result;" << endl;
         }
@@ -1935,7 +1935,7 @@
             << indent() << "return;" << endl;
         scope_down(out);
       }
-      
+
       out << indent() << "resolver(";
       if ((*f_iter)->is_oneway() || (*f_iter)->get_returntype()->is_void()) {
         out << "@YES";
@@ -1945,24 +1945,24 @@
         out << "@(result)";
       }
       out << ");" << endl;
-      
+
       indent_down();
-      
+
       out << indent() << "} failure:^(NSError *error) {" << endl;
       indent_up();
       out << indent() << "resolver(error);" << endl;
       indent_down();
       out << indent() << "}];" << endl;
-      
+
       indent_down();
       out << indent() << "}];" << endl;
-      
+
       scope_down(out);
-      
+
       out << endl;
-      
+
     }
-    
+
   }
 
   out << "@end" << endl << endl;
@@ -1976,18 +1976,18 @@
  */
 void t_cocoa_generator::generate_cocoa_service_server_implementation(ofstream& out,
                                                                      t_service* tservice) {
-  
+
   string name = cocoa_prefix_ + tservice->get_name() + "Processor";
-  
+
   out << "@interface " << name << " () ";
-  
+
   scope_up(out);
   out << indent() << "id <" << cocoa_prefix_ << tservice->get_name() << "> service;" << endl;
   out << indent() << "NSDictionary * methodMap;" << endl;
   scope_down(out);
-  
+
   out << "@end" << endl << endl;
-  
+
   out << "@implementation " << name << endl;
 
   // initializer
@@ -2125,7 +2125,7 @@
     if (!(*f_iter)->get_returntype()->is_void()) {
       out << indent() << "[result setSuccess: " << unbox((*f_iter)->get_returntype(), "serviceResult") << "];" << endl;
     }
-    
+
     // write out the result if not oneway
     if (!(*f_iter)->is_oneway()) {
       out << indent() << "if (![outProtocol writeMessageBeginWithName: @\"" << funname << "\"" << endl;
@@ -2340,7 +2340,7 @@
         break;
     }
   }
-  
+
   // do nothing
   return field_name;
 }
@@ -2627,17 +2627,17 @@
 
 /**
  * Returns an Objective-C type name for container types
- * 
+ *
  * @param ttype the type
  */
 string t_cocoa_generator::element_type_name(t_type* etype) {
-  
+
   t_type* ttype = etype->get_true_type();
-  
+
   if (etype->is_typedef() && type_can_be_null(ttype)) {
     return type_name(etype);
   }
-  
+
   string result;
   if (ttype->is_base_type()) {
     t_base_type* tbase = (t_base_type*)ttype;
@@ -2655,7 +2655,7 @@
       break;
     }
   } else if (ttype->is_enum()) {
-      result = "NSNumber *";      
+      result = "NSNumber *";
   } else if (ttype->is_map()) {
     t_map *map = (t_map *)ttype;
     result = "NSDictionary<" + element_type_name(map->get_key_type()) + ", " + element_type_name(map->get_val_type()) + "> *";
@@ -2668,7 +2668,7 @@
   } else if (ttype->is_struct() || ttype->is_xception()) {
     result = cocoa_prefix_ + ttype->get_name() + " *";
   }
-  
+
   return result;
 }
 
@@ -3010,16 +3010,16 @@
 string t_cocoa_generator::declare_property(t_field* tfield) {
   std::ostringstream render;
   render << "@property (";
-  
+
   if (type_can_be_null(tfield->get_type())) {
     render << "strong, ";
   } else {
     render << "assign, ";
   }
-  
+
   render << "nonatomic) " << type_name(tfield->get_type(), false, true) << " "
   << tfield->get_name() << ";";
-  
+
   // Check if the property name is an Objective-C return +1 count signal
   if ((tfield->get_name().length() >= 3 && tfield->get_name().substr(0,3) == "new") ||
       (tfield->get_name().length() >= 6 && tfield->get_name().substr(0,6) == "create") ||
@@ -3030,7 +3030,7 @@
       render << "- (" + type_name(tfield->get_type()) + ") " + decapitalize(tfield->get_name()) + " __attribute__((objc_method_family(none)));";
     }
   }
-  
+
   return render.str();
 }
 
@@ -3241,7 +3241,7 @@
  */
 string t_cocoa_generator::format_cast_for_type(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) {
@@ -3273,7 +3273,7 @@
   } else if (type->is_list()) {
     return ""; // "%@";
   }
-  
+
   throw "INVALID TYPE IN format_cast_for_type: " + type->get_name();
 }
 
diff --git a/compiler/cpp/src/generate/t_cpp_generator.cc b/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_cpp_generator.cc
rename to compiler/cpp/src/thrift/generate/t_cpp_generator.cc
index 6c04899..cbe8da2 100644
--- a/compiler/cpp/src/generate/t_cpp_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
@@ -31,8 +31,8 @@
 
 #include <sys/stat.h>
 
-#include "platform.h"
-#include "t_oop_generator.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -81,7 +81,7 @@
       } else if( iter->first.compare("moveable_types") == 0) {
         gen_moveable_ = true;
       } else {
-        throw "unknown option cpp:" + iter->first; 
+        throw "unknown option cpp:" + iter->first;
       }
     }
 
@@ -2320,10 +2320,10 @@
                 << "boost::shared_ptr< ::apache::thrift::transport::TMemoryBuffer> otrans_;"
                 << endl;
     }
-    f_header_ << 
-      indent() << prot_ptr << " piprot_;" << endl << 
-      indent() << prot_ptr << " poprot_;" << endl << 
-      indent() << protocol_type << "* iprot_;" << endl << 
+    f_header_ <<
+      indent() << prot_ptr << " piprot_;" << endl <<
+      indent() << prot_ptr << " poprot_;" << endl <<
+      indent() << protocol_type << "* iprot_;" << endl <<
       indent() << protocol_type << "* oprot_;" << endl;
 
     if (style == "Concurrent") {
@@ -2438,7 +2438,7 @@
         }
       }
       // Serialize the request
-      out << 
+      out <<
         indent() << "int32_t cseqid = " << cseqidVal << ";" << endl;
       if(style == "Concurrent") {
         out <<
@@ -2449,10 +2449,10 @@
           indent() << _this << "otrans_->resetBuffer();" << endl;
       }
       out <<
-        indent() << _this << "oprot_->writeMessageBegin(\"" << 
-        (*f_iter)->get_name() << 
-        "\", ::apache::thrift::protocol::" << ((*f_iter)->is_oneway() ? "T_ONEWAY" : "T_CALL") << 
-        ", cseqid);" << endl << endl << 
+        indent() << _this << "oprot_->writeMessageBegin(\"" <<
+        (*f_iter)->get_name() <<
+        "\", ::apache::thrift::protocol::" << ((*f_iter)->is_oneway() ? "T_ONEWAY" : "T_CALL") <<
+        ", cseqid);" << endl << endl <<
         indent() << argsname << " args;" << endl;
 
       for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
@@ -2498,9 +2498,9 @@
         indent(out) << function_signature(&recv_function, "", scope) << endl;
         scope_up(out);
 
-        out << endl << 
-          indent() << "int32_t rseqid = 0;" << endl << 
-          indent() << "std::string fname;" << endl << 
+        out << endl <<
+          indent() << "int32_t rseqid = 0;" << endl <<
+          indent() << "std::string fname;" << endl <<
           indent() << "::apache::thrift::protocol::TMessageType mtype;" << endl;
         if(style == "Concurrent") {
           out <<
@@ -2529,10 +2529,10 @@
           indent_up();
         }
         out <<
-          indent() << "if (mtype == ::apache::thrift::protocol::T_EXCEPTION) {" << endl << 
-          indent() << "  ::apache::thrift::TApplicationException x;" << endl << 
-          indent() << "  x.read(" << _this << "iprot_);" << endl << 
-          indent() << "  " << _this << "iprot_->readMessageEnd();" << endl << 
+          indent() << "if (mtype == ::apache::thrift::protocol::T_EXCEPTION) {" << endl <<
+          indent() << "  ::apache::thrift::TApplicationException x;" << endl <<
+          indent() << "  x.read(" << _this << "iprot_);" << endl <<
+          indent() << "  " << _this << "iprot_->readMessageEnd();" << endl <<
           indent() << "  " << _this << "iprot_->getTransport()->readEnd();" << endl;
         if (style == "Cob" && !gen_no_client_completion_) {
           out << indent() << "  completed = true;" << endl << indent() << "  completed__(true);"
@@ -2541,22 +2541,22 @@
         if (style == "Concurrent") {
           out << indent() << "  sentry.commit();" << endl;
         }
-        out << 
-          indent() << "  throw x;" << endl << 
-          indent() << "}" << endl << 
-          indent() << "if (mtype != ::apache::thrift::protocol::T_REPLY) {" << endl << 
-          indent() << "  " << _this << "iprot_->skip(" << "::apache::thrift::protocol::T_STRUCT);" << endl << 
-          indent() << "  " << _this << "iprot_->readMessageEnd();" << endl << 
+        out <<
+          indent() << "  throw x;" << endl <<
+          indent() << "}" << endl <<
+          indent() << "if (mtype != ::apache::thrift::protocol::T_REPLY) {" << endl <<
+          indent() << "  " << _this << "iprot_->skip(" << "::apache::thrift::protocol::T_STRUCT);" << endl <<
+          indent() << "  " << _this << "iprot_->readMessageEnd();" << endl <<
           indent() << "  " << _this << "iprot_->getTransport()->readEnd();" << endl;
         if (style == "Cob" && !gen_no_client_completion_) {
           out << indent() << "  completed = true;" << endl << indent() << "  completed__(false);"
               << endl;
         }
-        out << 
-          indent() << "}" << endl << 
-          indent() << "if (fname.compare(\"" << (*f_iter)->get_name() << "\") != 0) {" << endl << 
-          indent() << "  " << _this << "iprot_->skip(" << "::apache::thrift::protocol::T_STRUCT);" << endl << 
-          indent() << "  " << _this << "iprot_->readMessageEnd();" << endl << 
+        out <<
+          indent() << "}" << endl <<
+          indent() << "if (fname.compare(\"" << (*f_iter)->get_name() << "\") != 0) {" << endl <<
+          indent() << "  " << _this << "iprot_->skip(" << "::apache::thrift::protocol::T_STRUCT);" << endl <<
+          indent() << "  " << _this << "iprot_->readMessageEnd();" << endl <<
           indent() << "  " << _this << "iprot_->getTransport()->readEnd();" << endl;
         if (style == "Cob" && !gen_no_client_completion_) {
           out << indent() << "  completed = true;" << endl << indent() << "  completed__(false);"
@@ -2589,7 +2589,7 @@
         // Careful, only look for _result if not a void function
         if (!(*f_iter)->get_returntype()->is_void()) {
           if (is_complex_type((*f_iter)->get_returntype())) {
-            out << 
+            out <<
               indent() << "if (result.__isset.success) {" << endl;
             out <<
               indent() << "  // _return pointer has now been filled" << endl;
@@ -2600,8 +2600,8 @@
             if (style == "Concurrent") {
               out << indent() << "  sentry.commit();" << endl;
             }
-            out << 
-              indent() << "  return;" << endl << 
+            out <<
+              indent() << "  return;" << endl <<
               indent() << "}" << endl;
           } else {
             out << indent() << "if (result.__isset.success) {" << endl;
diff --git a/compiler/cpp/src/generate/t_csharp_generator.cc b/compiler/cpp/src/thrift/generate/t_csharp_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_csharp_generator.cc
rename to compiler/cpp/src/thrift/generate/t_csharp_generator.cc
index d356f26..ae3c48b 100644
--- a/compiler/cpp/src/generate/t_csharp_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_csharp_generator.cc
@@ -33,8 +33,8 @@
 #include <sys/stat.h>
 #include <sstream>
 
-#include "platform.h"
-#include "t_oop_generator.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -83,7 +83,7 @@
         wcf_ = true;
         wcf_namespace_ = iter->second;
       } else {
-        throw "unknown option csharp:" + iter->first; 
+        throw "unknown option csharp:" + iter->first;
       }
     }
 
@@ -268,7 +268,7 @@
 
   namespace_dir_ = subdir;
   init_keywords();
-  
+
   while( ! member_mapping_scopes.empty()) {
     cleanup_member_name_mapping( member_mapping_scopes.back().scope_member);
   }
@@ -1005,7 +1005,7 @@
 void t_csharp_generator::generate_csharp_struct_writer(ofstream& out, t_struct* tstruct) {
   out << indent() << "public void Write(TProtocol oprot) {" << endl;
   indent_up();
-  
+
   out << indent() << "oprot.IncrementRecursionDepth();" << endl;
   out << indent() << "try" << endl;
   scope_up(out);
@@ -1061,7 +1061,7 @@
   scope_down(out);
 
   indent_down();
-  
+
   indent(out) << "}" << endl << endl;
 }
 
@@ -2857,7 +2857,7 @@
   if( member_mapping_scopes.empty()) {
     throw "internal error: cleanup_member_name_mapping() no scope active";
   }
-  
+
   member_mapping_scope& active = member_mapping_scopes.back();
   if (active.scope_member != scope) {
     throw "internal error: cleanup_member_name_mapping() called for wrong struct";
@@ -2874,7 +2874,7 @@
       return iter->second;
     }
   }
-  
+
   pverbose("no mapping for member %s\n", name.c_str());
   return name;
 }
diff --git a/compiler/cpp/src/generate/t_d_generator.cc b/compiler/cpp/src/thrift/generate/t_d_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_d_generator.cc
rename to compiler/cpp/src/thrift/generate/t_d_generator.cc
index 1e0af7d..4816681 100644
--- a/compiler/cpp/src/generate/t_d_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_d_generator.cc
@@ -32,8 +32,8 @@
 
 #include <sys/stat.h>
 
-#include "platform.h"
-#include "t_oop_generator.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -64,7 +64,7 @@
 
     /* no options yet */
     for( iter = parsed_options.begin(); iter != parsed_options.end(); ++iter) {
-      throw "unknown option d:" + iter->first; 
+      throw "unknown option d:" + iter->first;
     }
 
     out_dir_base_ = "gen-d";
diff --git a/compiler/cpp/src/generate/t_dart_generator.cc b/compiler/cpp/src/thrift/generate/t_dart_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_dart_generator.cc
rename to compiler/cpp/src/thrift/generate/t_dart_generator.cc
index 7a744cf..19bbb7b 100644
--- a/compiler/cpp/src/generate/t_dart_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_dart_generator.cc
@@ -27,8 +27,8 @@
 #include <sys/stat.h>
 #include <stdexcept>
 
-#include "platform.h"
-#include "t_oop_generator.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::map;
 using std::ofstream;
diff --git a/compiler/cpp/src/generate/t_delphi_generator.cc b/compiler/cpp/src/thrift/generate/t_delphi_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_delphi_generator.cc
rename to compiler/cpp/src/thrift/generate/t_delphi_generator.cc
index fece1da..8b1a445 100644
--- a/compiler/cpp/src/generate/t_delphi_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_delphi_generator.cc
@@ -34,8 +34,8 @@
 #include <sstream>
 #include <cctype>
 
-#include "platform.h"
-#include "t_oop_generator.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -77,7 +77,7 @@
       } else if( iter->first.compare("xmldoc") == 0) {
         xmldoc_ = true;
       } else {
-        throw "unknown option delphi:" + iter->first; 
+        throw "unknown option delphi:" + iter->first;
       }
     }
 
@@ -3601,7 +3601,7 @@
       indent_impl(code_block) << "if not _req_isset_" << prop_name(*f_iter, is_exception) << endl;
       indent_impl(code_block)
           << "then raise TProtocolExceptionInvalidData.Create("
-          << "'required field " << prop_name(*f_iter, is_exception) << " not set');" 
+          << "'required field " << prop_name(*f_iter, is_exception) << " not set');"
           << endl;
     }
   }
@@ -3641,7 +3641,7 @@
 
   indent_impl(local_vars) << "tracker : IProtocolRecursionTracker;" << endl;
   indent_impl(code_block) << "tracker := oprot.NextRecursionLevel;" << endl;
-  
+
   indent_impl(code_block) << "struc := TStructImpl.Create('" << name << "');" << endl;
   indent_impl(code_block) << "oprot.WriteStructBegin(struc);" << endl;
 
@@ -3722,7 +3722,7 @@
       null_allowed = false;
       indent_impl(code_block) << "if (" << fieldname << " = nil)" << endl;
 	  indent_impl(code_block) << "then raise TProtocolExceptionInvalidData.Create("
-                              << "'required field " << fieldname << " not set');" 
+                              << "'required field " << fieldname << " not set');"
                               << endl;
     }
     if (null_allowed) {
diff --git a/compiler/cpp/src/generate/t_erl_generator.cc b/compiler/cpp/src/thrift/generate/t_erl_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_erl_generator.cc
rename to compiler/cpp/src/thrift/generate/t_erl_generator.cc
index 9ac908c..4869414 100644
--- a/compiler/cpp/src/generate/t_erl_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_erl_generator.cc
@@ -26,9 +26,9 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <sstream>
-#include "t_generator.h"
-#include "platform.h"
-#include "version.h"
+#include "thrift/platform.h"
+#include "thrift/version.h"
+#include "thrift/generate/t_generator.h"
 
 using std::map;
 using std::ofstream;
diff --git a/compiler/cpp/src/generate/t_generator.cc b/compiler/cpp/src/thrift/generate/t_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_generator.cc
rename to compiler/cpp/src/thrift/generate/t_generator.cc
index 7f5daf4..0c1f49d 100644
--- a/compiler/cpp/src/generate/t_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_generator.cc
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-#include "t_generator.h"
+#include "thrift/generate/t_generator.h"
 using namespace std;
 
 /**
diff --git a/compiler/cpp/src/generate/t_generator.h b/compiler/cpp/src/thrift/generate/t_generator.h
similarity index 98%
rename from compiler/cpp/src/generate/t_generator.h
rename to compiler/cpp/src/thrift/generate/t_generator.h
index 590efdb..051bbc4 100644
--- a/compiler/cpp/src/generate/t_generator.h
+++ b/compiler/cpp/src/thrift/generate/t_generator.h
@@ -24,10 +24,10 @@
 #include <iostream>
 #include <fstream>
 #include <sstream>
-#include "parse/t_program.h"
-#include "common.h"
-#include "t_generator_registry.h"
-#include "version.h"
+#include "thrift/common.h"
+#include "thrift/version.h"
+#include "thrift/generate/t_generator_registry.h"
+#include "thrift/parse/t_program.h"
 
 /**
  * Base class for a thrift code generator. This class defines the basic
diff --git a/compiler/cpp/src/generate/t_generator_registry.h b/compiler/cpp/src/thrift/generate/t_generator_registry.h
similarity index 100%
rename from compiler/cpp/src/generate/t_generator_registry.h
rename to compiler/cpp/src/thrift/generate/t_generator_registry.h
diff --git a/compiler/cpp/src/generate/t_go_generator.cc b/compiler/cpp/src/thrift/generate/t_go_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_go_generator.cc
rename to compiler/cpp/src/thrift/generate/t_go_generator.cc
index b9429c1..9919cb1 100644
--- a/compiler/cpp/src/generate/t_go_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_go_generator.cc
@@ -36,9 +36,9 @@
 #include <sstream>
 #include <algorithm>
 #include <clocale>
-#include "t_generator.h"
-#include "platform.h"
-#include "version.h"
+#include "thrift/platform.h"
+#include "thrift/version.h"
+#include "thrift/generate/t_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -93,7 +93,7 @@
       } else if( iter->first.compare("ignore_initialisms") == 0) {
         ignore_initialisms_ =  true;
       } else {
-        throw "unknown option go:" + iter->first; 
+        throw "unknown option go:" + iter->first;
       }
     }
 
@@ -3463,8 +3463,8 @@
   t_program* program = ttype->get_program();
 
   if (program != NULL && program != program_) {
-    if (program->get_namespace("go").empty() || 
-        program_->get_namespace("go").empty() || 
+    if (program->get_namespace("go").empty() ||
+        program_->get_namespace("go").empty() ||
         program->get_namespace("go") != program_->get_namespace("go")) {
       string module(get_real_go_module(program));
       // for namespaced includes, only keep part after dot.
diff --git a/compiler/cpp/src/generate/t_gv_generator.cc b/compiler/cpp/src/thrift/generate/t_gv_generator.cc
similarity index 98%
rename from compiler/cpp/src/generate/t_gv_generator.cc
rename to compiler/cpp/src/thrift/generate/t_gv_generator.cc
index 61be8e6..72b7c82 100644
--- a/compiler/cpp/src/generate/t_gv_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_gv_generator.cc
@@ -27,8 +27,8 @@
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <sstream>
-#include "t_generator.h"
-#include "platform.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -57,7 +57,7 @@
       if( iter->first.compare("exceptions") == 0) {
         exception_arrows = true;
       } else {
-        throw "unknown option gv:" + iter->first; 
+        throw "unknown option gv:" + iter->first;
       }
     }
 
diff --git a/compiler/cpp/src/generate/t_haxe_generator.cc b/compiler/cpp/src/thrift/generate/t_haxe_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_haxe_generator.cc
rename to compiler/cpp/src/thrift/generate/t_haxe_generator.cc
index d15958e..e7be1a5 100644
--- a/compiler/cpp/src/generate/t_haxe_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_haxe_generator.cc
@@ -27,8 +27,8 @@
 #include <sys/stat.h>
 #include <stdexcept>
 
-#include "platform.h"
-#include "t_oop_generator.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -63,7 +63,7 @@
       } else if( iter->first.compare("buildmacro") == 0) {
         buildmacro_ = (iter->second);
       } else {
-        throw "unknown option haxe:" + iter->first; 
+        throw "unknown option haxe:" + iter->first;
       }
     }
 
@@ -1007,10 +1007,10 @@
       indent(out) << "}" << endl;
     }
   }
-  
+
   indent(out) << "oprot.writeFieldStop();" << endl;
   indent(out) << "oprot.writeStructEnd();" << endl;
-  
+
   indent(out) << "oprot.DecrementRecursionDepth();" << endl;
   scope_down(out);
   indent(out) << "catch(e:Dynamic)" << endl;
@@ -1018,7 +1018,7 @@
   indent(out) << "oprot.DecrementRecursionDepth();" << endl;
   indent(out) << "throw e;" << endl;
   scope_down(out);
-  
+
   indent_down();
   out << indent() << "}" << endl << endl;
 }
@@ -1042,7 +1042,7 @@
   indent(out) << "oprot.IncrementRecursionDepth();" << endl;
   indent(out) << "try" << endl;
   scope_up(out);
-  
+
   indent(out) << "oprot.writeStructBegin(STRUCT_DESC);" << endl;
 
   bool first = true;
@@ -1070,11 +1070,11 @@
     indent_down();
     indent(out) << "}";
   }
-  
+
   indent(out) << endl;
   indent(out) << "oprot.writeFieldStop();" << endl;
   indent(out) << "oprot.writeStructEnd();" << endl;
-  
+
   indent(out) << "oprot.DecrementRecursionDepth();" << endl;
   scope_down(out);
   indent(out) << "catch(e:Dynamic)" << endl;
@@ -1082,7 +1082,7 @@
   indent(out) << "oprot.DecrementRecursionDepth();" << endl;
   indent(out) << "throw e;" << endl;
   scope_down(out);
-  
+
   indent_down();
   out << indent() << "}" << endl << endl;
 }
diff --git a/compiler/cpp/src/generate/t_hs_generator.cc b/compiler/cpp/src/thrift/generate/t_hs_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_hs_generator.cc
rename to compiler/cpp/src/thrift/generate/t_hs_generator.cc
index cef8cd0..a3ccd8d 100644
--- a/compiler/cpp/src/generate/t_hs_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_hs_generator.cc
@@ -27,10 +27,10 @@
 #include <sys/types.h>
 #include <sstream>
 
-#include "t_oop_generator.h"
+#include "thrift/platform.h"
+#include "thrift/version.h"
 
-#include "platform.h"
-#include "version.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -56,7 +56,7 @@
 
     /* no options yet */
     for( iter = parsed_options.begin(); iter != parsed_options.end(); ++iter) {
-      throw "unknown option hs:" + iter->first; 
+      throw "unknown option hs:" + iter->first;
     }
 
     out_dir_base_ = "gen-hs";
diff --git a/compiler/cpp/src/generate/t_html_generator.cc b/compiler/cpp/src/thrift/generate/t_html_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_html_generator.cc
rename to compiler/cpp/src/thrift/generate/t_html_generator.cc
index 9594d39..ec78e10 100644
--- a/compiler/cpp/src/generate/t_html_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_html_generator.cc
@@ -26,9 +26,9 @@
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <sstream>
-#include "t_generator.h"
-#include "t_html_generator.h"
-#include "platform.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_generator.h"
+#include "thrift/generate/t_html_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -64,7 +64,7 @@
       } else if( iter->first.compare("noescape") == 0) {
         unsafe_ = true;
       } else {
-        throw "unknown option html:" + iter->first; 
+        throw "unknown option html:" + iter->first;
       }
     }
 
diff --git a/compiler/cpp/src/generate/t_html_generator.h b/compiler/cpp/src/thrift/generate/t_html_generator.h
similarity index 100%
rename from compiler/cpp/src/generate/t_html_generator.h
rename to compiler/cpp/src/thrift/generate/t_html_generator.h
diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/thrift/generate/t_java_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_java_generator.cc
rename to compiler/cpp/src/thrift/generate/t_java_generator.cc
index 2db8cb8..8b3c326 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_java_generator.cc
@@ -31,8 +31,8 @@
 #include <sys/stat.h>
 #include <stdexcept>
 
-#include "platform.h"
-#include "t_oop_generator.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -97,10 +97,10 @@
         } else if(iter->second.compare("suppress") == 0) {
           suppress_generated_annotations_ = true;
         } else {
-          throw "unknown option java:" + iter->first + "=" + iter->second; 
+          throw "unknown option java:" + iter->first + "=" + iter->second;
         }
       } else {
-        throw "unknown option java:" + iter->first; 
+        throw "unknown option java:" + iter->first;
       }
     }
 
@@ -368,7 +368,7 @@
   bool use_option_type_;
   bool undated_generated_annotations_;
   bool suppress_generated_annotations_;
-  
+
 };
 
 /**
diff --git a/compiler/cpp/src/generate/t_javame_generator.cc b/compiler/cpp/src/thrift/generate/t_javame_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_javame_generator.cc
rename to compiler/cpp/src/thrift/generate/t_javame_generator.cc
index e9a206b..aa7eccf 100644
--- a/compiler/cpp/src/generate/t_javame_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_javame_generator.cc
@@ -27,8 +27,8 @@
 #include <sys/stat.h>
 #include <stdexcept>
 
-#include "platform.h"
-#include "t_oop_generator.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -55,7 +55,7 @@
 
     /* no options yet */
     for( iter = parsed_options.begin(); iter != parsed_options.end(); ++iter) {
-      throw "unknown option javame:" + iter->first; 
+      throw "unknown option javame:" + iter->first;
     }
 
     out_dir_base_ = "gen-javame";
diff --git a/compiler/cpp/src/generate/t_js_generator.cc b/compiler/cpp/src/thrift/generate/t_js_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_js_generator.cc
rename to compiler/cpp/src/thrift/generate/t_js_generator.cc
index af0f284..b0046a0 100644
--- a/compiler/cpp/src/generate/t_js_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_js_generator.cc
@@ -28,8 +28,8 @@
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <sstream>
-#include "platform.h"
-#include "version.h"
+#include "thrift/platform.h"
+#include "thrift/version.h"
 
 using std::map;
 using std::ofstream;
@@ -40,7 +40,7 @@
 
 static const string endl = "\n"; // avoid ostream << std::endl flushes
 
-#include "t_oop_generator.h"
+#include "thrift/generate/t_oop_generator.h"
 
 
 /**
@@ -66,7 +66,7 @@
       } else if( iter->first.compare("ts") == 0) {
         gen_ts_ = true;
       } else {
-        throw "unknown option js:" + iter->first; 
+        throw "unknown option js:" + iter->first;
       }
     }
 
diff --git a/compiler/cpp/src/generate/t_json_generator.cc b/compiler/cpp/src/thrift/generate/t_json_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_json_generator.cc
rename to compiler/cpp/src/thrift/generate/t_json_generator.cc
index 447bc6d..36e9216 100644
--- a/compiler/cpp/src/generate/t_json_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_json_generator.cc
@@ -30,8 +30,8 @@
 #include <sys/stat.h>
 #include <sstream>
 
-#include "t_generator.h"
-#include "platform.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -61,7 +61,7 @@
       if( iter->first.compare("merge") == 0) {
         should_merge_includes_ = true;
       } else {
-        throw "unknown option json:" + iter->first; 
+        throw "unknown option json:" + iter->first;
       }
     }
 
diff --git a/compiler/cpp/src/generate/t_lua_generator.cc b/compiler/cpp/src/thrift/generate/t_lua_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_lua_generator.cc
rename to compiler/cpp/src/thrift/generate/t_lua_generator.cc
index c6fb493..97b8aa3 100644
--- a/compiler/cpp/src/generate/t_lua_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_lua_generator.cc
@@ -18,8 +18,8 @@
  */
 
 #include <sstream>
-#include "t_oop_generator.h"
-#include "platform.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::ofstream;
 using std::string;
@@ -46,7 +46,7 @@
       if( iter->first.compare("omit_requires") == 0) {
         gen_requires_ = false;
       } else {
-        throw "unknown option lua:" + iter->first; 
+        throw "unknown option lua:" + iter->first;
       }
     }
 
diff --git a/compiler/cpp/src/generate/t_ocaml_generator.cc b/compiler/cpp/src/thrift/generate/t_ocaml_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_ocaml_generator.cc
rename to compiler/cpp/src/thrift/generate/t_ocaml_generator.cc
index fc82ebc..594219a 100644
--- a/compiler/cpp/src/generate/t_ocaml_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_ocaml_generator.cc
@@ -26,9 +26,9 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <sstream>
-#include "t_oop_generator.h"
-#include "platform.h"
-#include "version.h"
+#include "thrift/platform.h"
+#include "thrift/version.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::ios;
 using std::map;
@@ -55,7 +55,7 @@
 
     /* no options yet */
     for( iter = parsed_options.begin(); iter != parsed_options.end(); ++iter) {
-      throw "unknown option ocaml:" + iter->first; 
+      throw "unknown option ocaml:" + iter->first;
     }
 
     out_dir_base_ = "gen-ocaml";
diff --git a/compiler/cpp/src/generate/t_oop_generator.h b/compiler/cpp/src/thrift/generate/t_oop_generator.h
similarity index 97%
rename from compiler/cpp/src/generate/t_oop_generator.h
rename to compiler/cpp/src/thrift/generate/t_oop_generator.h
index e5a4698..8fb580d 100644
--- a/compiler/cpp/src/generate/t_oop_generator.h
+++ b/compiler/cpp/src/thrift/generate/t_oop_generator.h
@@ -23,8 +23,8 @@
 #include <string>
 #include <iostream>
 
-#include "common.h"
-#include "t_generator.h"
+#include "thrift/common.h"
+#include "thrift/generate/t_generator.h"
 
 #include <algorithm>
 
diff --git a/compiler/cpp/src/generate/t_perl_generator.cc b/compiler/cpp/src/thrift/generate/t_perl_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_perl_generator.cc
rename to compiler/cpp/src/thrift/generate/t_perl_generator.cc
index 45cfe4b..bfe08f9 100644
--- a/compiler/cpp/src/generate/t_perl_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_perl_generator.cc
@@ -26,9 +26,9 @@
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <sstream>
-#include "t_oop_generator.h"
-#include "platform.h"
-#include "version.h"
+#include "thrift/platform.h"
+#include "thrift/version.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -54,7 +54,7 @@
 
     /* no options yet */
     for( iter = parsed_options.begin(); iter != parsed_options.end(); ++iter) {
-      throw "unknown option perl:" + iter->first; 
+      throw "unknown option perl:" + iter->first;
     }
 
     out_dir_base_ = "gen-perl";
diff --git a/compiler/cpp/src/generate/t_php_generator.cc b/compiler/cpp/src/thrift/generate/t_php_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_php_generator.cc
rename to compiler/cpp/src/thrift/generate/t_php_generator.cc
index 2fa9b24..ba52781 100644
--- a/compiler/cpp/src/generate/t_php_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_php_generator.cc
@@ -25,8 +25,8 @@
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <sstream>
-#include "t_oop_generator.h"
-#include "platform.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::map;
 using std::ofstream;
diff --git a/compiler/cpp/src/generate/t_py_generator.cc b/compiler/cpp/src/thrift/generate/t_py_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_py_generator.cc
rename to compiler/cpp/src/thrift/generate/t_py_generator.cc
index 1ee0fcb..6401c28 100644
--- a/compiler/cpp/src/generate/t_py_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_py_generator.cc
@@ -27,9 +27,9 @@
 #include <sys/types.h>
 #include <sstream>
 #include <algorithm>
-#include "t_generator.h"
-#include "platform.h"
-#include "version.h"
+#include "thrift/platform.h"
+#include "thrift/version.h"
+#include "thrift/generate/t_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -112,7 +112,7 @@
       } else if( iter->first.compare("coding") == 0) {
         coding_ = iter->second;
       } else {
-        throw "unknown option py:" + iter->first; 
+        throw "unknown option py:" + iter->first;
       }
     }
 
diff --git a/compiler/cpp/src/generate/t_rb_generator.cc b/compiler/cpp/src/thrift/generate/t_rb_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_rb_generator.cc
rename to compiler/cpp/src/thrift/generate/t_rb_generator.cc
index abd3320..924f6f6 100644
--- a/compiler/cpp/src/generate/t_rb_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_rb_generator.cc
@@ -32,9 +32,9 @@
 #include <sys/types.h>
 #include <sstream>
 
-#include "t_oop_generator.h"
-#include "platform.h"
-#include "version.h"
+#include "thrift/platform.h"
+#include "thrift/version.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -91,7 +91,7 @@
       } else if( iter->first.compare("namespaced") == 0) {
         namespaced_ = true;
       } else {
-        throw "unknown option ruby:" + iter->first; 
+        throw "unknown option ruby:" + iter->first;
       }
     }
 
diff --git a/compiler/cpp/src/generate/t_st_generator.cc b/compiler/cpp/src/thrift/generate/t_st_generator.cc
similarity index 99%
rename from compiler/cpp/src/generate/t_st_generator.cc
rename to compiler/cpp/src/thrift/generate/t_st_generator.cc
index bc15d24..ffd7318 100644
--- a/compiler/cpp/src/generate/t_st_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_st_generator.cc
@@ -32,9 +32,9 @@
 #include <sys/types.h>
 #include <sstream>
 
-#include "platform.h"
-#include "t_oop_generator.h"
-#include "version.h"
+#include "thrift/platform.h"
+#include "thrift/version.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -60,7 +60,7 @@
 
     /* no options yet */
     for( iter = parsed_options.begin(); iter != parsed_options.end(); ++iter) {
-      throw "unknown option st:" + iter->first; 
+      throw "unknown option st:" + iter->first;
     }
 
     out_dir_base_ = "gen-st";
diff --git a/compiler/cpp/src/generate/t_swift_generator.cc b/compiler/cpp/src/thrift/generate/t_swift_generator.cc
similarity index 97%
rename from compiler/cpp/src/generate/t_swift_generator.cc
rename to compiler/cpp/src/thrift/generate/t_swift_generator.cc
index 6e48bca..87dd2f0 100644
--- a/compiler/cpp/src/generate/t_swift_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_swift_generator.cc
@@ -26,8 +26,8 @@
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <sstream>
-#include "t_oop_generator.h"
-#include "platform.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_oop_generator.h"
 
 using std::map;
 using std::ostream;
@@ -69,7 +69,7 @@
       } else if( iter->first.compare("debug_descriptions") == 0) {
         debug_descriptions_ = true;
       } else {
-        throw "unknown option swift:" + iter->first; 
+        throw "unknown option swift:" + iter->first;
       }
     }
 
@@ -112,7 +112,7 @@
                                   t_struct* tstruct,
                                   bool all,
                                   bool is_private);
-  
+
   void generate_swift_struct_implementation(ofstream& out,
                                             t_struct* tstruct,
                                             bool is_result,
@@ -183,23 +183,23 @@
   void populate_reserved_words();
 
 private:
-  
+
   void block_open(ostream& out) {
     out << " {" << endl;
     indent_up();
   }
-  
+
   void block_close(ostream& out, bool end_line=true) {
     indent_down();
     indent(out) << "}";
     if (end_line) out << endl;
   }
 
-  
+
   bool field_is_optional(t_field* tfield) {
     return tfield->get_req() == t_field::T_OPTIONAL;
   }
-  
+
   bool struct_has_required_fields(t_struct* tstruct) {
     const vector<t_field*>& members = tstruct->get_members();
     vector<t_field*>::const_iterator m_iter;
@@ -210,7 +210,7 @@
     }
     return false;
   }
-  
+
   bool struct_has_optional_fields(t_struct* tstruct) {
     const vector<t_field*>& members = tstruct->get_members();
     vector<t_field*>::const_iterator m_iter;
@@ -221,7 +221,7 @@
     }
     return false;
   }
-  
+
   string constants_declarations_;
 
   /**
@@ -278,16 +278,16 @@
 
   vector<string> includes_list;
   includes_list.push_back("Foundation");
-  
+
   ostringstream includes;
-  
+
   vector<string>::const_iterator i_iter;
   for (i_iter=includes_list.begin(); i_iter!=includes_list.end(); ++i_iter) {
     includes << "import " << *i_iter << endl;
   }
-  
+
   includes << endl;
-  
+
   return includes.str();
 }
 
@@ -300,7 +300,7 @@
 
   vector<string> includes_list;
   includes_list.push_back("Thrift");
-  
+
   if (promise_kit_) {
     includes_list.push_back("PromiseKit");
   }
@@ -311,7 +311,7 @@
   for (i_iter=includes_list.begin(); i_iter!=includes_list.end(); ++i_iter) {
     includes << "import " << *i_iter << endl;
   }
-  
+
   includes << endl;
 
   return includes.str();
@@ -358,15 +358,15 @@
 
   f_decl_ << endl;
   f_decl_ << indent() << "public init() { self.init(rawValue: " << constants.front()->get_value() << ")! }" << endl;
-  
+
   block_close(f_decl_);
   f_decl_ << endl;
-  
+
   f_impl_ << indent() << "extension " << tenum->get_name() << " : TEnum";
   block_open(f_impl_);
 
   f_impl_ << endl;
-  
+
   f_impl_ << indent() << "public static func readValueFromProtocol(proto: TProtocol) throws -> " << tenum->get_name();
   block_open(f_impl_);
   f_impl_ << indent() << "var raw = Int32()" << endl
@@ -374,20 +374,20 @@
           << indent() << "return " << tenum->get_name() << "(rawValue: raw)!" << endl;
   block_close(f_impl_);
   f_impl_ << endl;
-  
+
   f_impl_ << indent() << "public static func writeValue(value: " << tenum->get_name() << ", toProtocol proto: TProtocol) throws";
   block_open(f_impl_);
   f_impl_ << indent() << "try proto.writeI32(value.rawValue)" << endl;
   block_close(f_impl_);
   f_impl_ << endl;
-  
+
   block_close(f_impl_);
   f_impl_ << endl;
 }
 
 /**
  * Generates public constants for all Thrift constants.
- * 
+ *
  * @param consts Constants to generate
  */
 void t_swift_generator::generate_consts(vector<t_const*> consts) {
@@ -402,10 +402,10 @@
     render_const_value(const_interface, type, (*c_iter)->get_value());
     const_interface << endl << endl;
   }
-  
+
   // this gets spit into the header file in ::close_generator
   constants_declarations_ = const_interface.str();
-  
+
 }
 
 /**
@@ -413,7 +413,7 @@
  * with public members. Optional types are used for optional properties to
  * allow them to be tested for availability. Separate inits are included for
  * required properties & all properties.
- * 
+ *
  * Generates extensions to provide conformance to TStruct, TSerializable,
  * Hashable & Equatable
  *
@@ -435,7 +435,7 @@
 }
 
 /**
- * Generate the interface for a struct. Only properties and 
+ * Generate the interface for a struct. Only properties and
  * init methods are included.
  *
  * @param tstruct The struct definition
@@ -445,36 +445,36 @@
 void t_swift_generator::generate_swift_struct(ofstream& out,
                                               t_struct* tstruct,
                                               bool is_private) {
-  
+
   string visibility = is_private ? "private" : "public";
-  
+
   out << indent() << visibility << " final class " << tstruct->get_name();
 
   if (tstruct->is_xception()) {
     out << " : ErrorType";
   }
-  
+
   block_open(out);
 
   // properties
   const vector<t_field*>& members = tstruct->get_members();
   vector<t_field*>::const_iterator m_iter;
-  
+
   for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
     out << endl;
     out << indent() << declare_property(*m_iter, is_private) << endl;
   }
-  
+
   out << endl;
-  
+
   // init
-  
+
   indent(out) << visibility << " init()";
   block_open(out);
   block_close(out);
-  
+
   out << endl;
-  
+
   if (struct_has_required_fields(tstruct)) {
     generate_swift_struct_init(out, tstruct, false, is_private);
   }
@@ -483,7 +483,7 @@
   }
 
   block_close(out);
-  
+
   out << endl;
 }
 
@@ -506,7 +506,7 @@
 
   const vector<t_field*>& members = tstruct->get_members();
   vector<t_field*>::const_iterator m_iter;
-  
+
   bool first=true;
   for (m_iter = members.begin(); m_iter != members.end();) {
     if (all || !field_is_optional(*m_iter)) {
@@ -522,18 +522,18 @@
     ++m_iter;
   }
   out << ")";
-  
+
   block_open(out);
-  
+
   for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
     if (all || (*m_iter)->get_req() == t_field::T_REQUIRED || (*m_iter)->get_req() == t_field::T_OPT_IN_REQ_OUT) {
       out << indent() << "self." << maybe_escape_identifier((*m_iter)->get_name()) << " = "
           << maybe_escape_identifier((*m_iter)->get_name()) << endl;
     }
   }
-  
+
   block_close(out);
- 
+
   out << endl;
 }
 
@@ -551,23 +551,23 @@
   string visibility = is_private ? "private" : "public";
 
   indent(out) << "extension " << tstruct->get_name() << " : Hashable";
-  
+
   block_open(out);
-  
+
   out << endl;
-  
+
   indent(out) << visibility << " var hashValue : Int";
-  
+
   block_open(out);
-  
-  
+
+
   const vector<t_field*>& members = tstruct->get_members();
   vector<t_field*>::const_iterator m_iter;
 
   if (!members.empty()) {
     indent(out) << "let prime = 31" << endl;
     indent(out) << "var result = 1" << endl;
-    
+
     for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
       t_field* tfield = *m_iter;
       string accessor = field_is_optional(tfield) ? "?." : ".";
@@ -575,7 +575,7 @@
       indent(out) << "result = prime &* result &+ (" << maybe_escape_identifier(tfield->get_name()) << accessor
                   <<  "hashValue" << defaultor << ")" << endl;
     }
-    
+
     indent(out) << "return result" << endl;
   }
   else {
@@ -583,9 +583,9 @@
   }
 
   block_close(out);
-  
+
   out << endl;
-  
+
   block_close(out);
 
   out << endl;
@@ -603,22 +603,22 @@
                                                                   bool is_private) {
 
   string visibility = is_private ? "private" : "public";
-  
+
   indent(out) << visibility << " func ==(lhs: " << type_name(tstruct) << ", rhs: " << type_name(tstruct) << ") -> Bool";
-  
+
   block_open(out);
-  
+
   indent(out) << "return";
-  
+
   const vector<t_field*>& members = tstruct->get_members();
   vector<t_field*>::const_iterator m_iter;
 
   if (members.size()) {
-    
+
     out << endl;
-  
+
     indent_up();
-  
+
     for (m_iter = members.begin(); m_iter != members.end();) {
       t_field* tfield = *m_iter;
       indent(out) << "(lhs." << maybe_escape_identifier(tfield->get_name())
@@ -628,16 +628,16 @@
       }
       out << endl;
     }
-  
+
     indent_down();
-    
+
   }
   else {
     out << " true" << endl;
   }
-  
+
   block_close(out);
-  
+
   out << endl;
 }
 
@@ -655,13 +655,13 @@
                                                              t_struct* tstruct,
                                                              bool is_result,
                                                              bool is_private) {
-  
+
   generate_swift_struct_equatable_extension(out, tstruct, is_private);
-  
+
   if (!is_private && !is_result) {
     generate_swift_struct_printable_extension(out, tstruct);
   }
-  
+
   generate_swift_struct_hashable_extension(out, tstruct, is_private);
   generate_swift_struct_thrift_extension(out, tstruct, is_result, is_private);
 
@@ -681,24 +681,24 @@
                                                                t_struct* tstruct,
                                                                bool is_result,
                                                                bool is_private) {
-  
+
   indent(out) << "extension " << tstruct->get_name() << " : TStruct";
-  
+
   block_open(out);
-  
+
   out << endl;
-  
+
   generate_swift_struct_reader(out, tstruct, is_private);
-  
+
   if (is_result) {
     generate_swift_struct_result_writer(out, tstruct);
   }
   else {
     generate_swift_struct_writer(out, tstruct, is_private);
   }
-  
+
   block_close(out);
-  
+
   out << endl;
 }
 
@@ -713,46 +713,46 @@
 void t_swift_generator::generate_swift_struct_reader(ofstream& out,
                                                      t_struct* tstruct,
                                                      bool is_private) {
-  
+
   string visibility = is_private ? "private" : "public";
-  
+
   indent(out) << visibility << " static func readValueFromProtocol(__proto: TProtocol) throws -> "
               << tstruct->get_name();
-  
+
   block_open(out);
-  
+
   out << endl;
-  
+
   indent(out) << "try __proto.readStructBegin()" << endl << endl;
 
   const vector<t_field*>& fields = tstruct->get_members();
   vector<t_field*>::const_iterator f_iter;
-  
+
   for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
     bool optional = field_is_optional(*f_iter);
     indent(out) << "var " << maybe_escape_identifier((*f_iter)->get_name()) << " : "
                 << type_name((*f_iter)->get_type(), optional, !optional) << endl;
   }
-  
+
   out << endl;
-  
+
   // Loop over reading in fields
   indent(out) << "fields: while true";
-  
+
   block_open(out);
-  
+
   out << endl;
 
   indent(out) << "let (_, fieldType, fieldID) = try __proto.readFieldBegin()" << endl << endl;
   indent(out) << "switch (fieldID, fieldType)";
-  
+
   block_open(out);
-  
+
   indent(out) << "case (_, .STOP):" << endl;
   indent_up();
   indent(out) << "break fields" << endl << endl;
   indent_down();
-  
+
   // Generate deserialization code for known cases
   for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
 
@@ -761,33 +761,33 @@
     indent(out) << maybe_escape_identifier((*f_iter)->get_name()) << " = try __proto.readValue() as "
                 << type_name((*f_iter)->get_type()) << endl << endl;
     indent_down();
-    
+
   }
 
   indent(out) << "case let (_, unknownType):" << endl;
   indent_up();
   indent(out) << "try __proto.skipType(unknownType)" << endl;
   indent_down();
-  
+
   block_close(out);
-  
+
   out << endl;
 
   // Read field end marker
   indent(out) << "try __proto.readFieldEnd()" << endl;
-  
+
   block_close(out);
 
   out << endl;
-  
+
   indent(out) << "try __proto.readStructEnd()" << endl;
 
   out << endl;
-  
+
   if (struct_has_required_fields(tstruct)) {
     // performs various checks (e.g. check that all required fields are set)
     indent(out) << "// Required fields" << endl;
-    
+
     for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
       if (field_is_optional(*f_iter)) {
         continue;
@@ -796,9 +796,9 @@
                   << "named: \"" << (*f_iter)->get_name() << "\")" << endl;
     }
   }
-  
+
   out << endl;
-    
+
   indent(out) << "return " << tstruct->get_name() << "(";
   for (f_iter = fields.begin(); f_iter != fields.end();) {
     out << (*f_iter)->get_name() << ": " << maybe_escape_identifier((*f_iter)->get_name());
@@ -824,13 +824,13 @@
 void t_swift_generator::generate_swift_struct_writer(ofstream& out,
                                                      t_struct* tstruct,
                                                      bool is_private) {
-  
+
   string visibility = is_private ? "private" : "public";
-  
+
   indent(out) << visibility << " static func writeValue(__value: " << tstruct->get_name() << ", toProtocol __proto: TProtocol) throws";
-  
+
   block_open(out);
-  
+
   out << endl;
 
   string name = tstruct->get_name();
@@ -838,19 +838,19 @@
   vector<t_field*>::const_iterator f_iter;
 
   indent(out) << "try __proto.writeStructBeginWithName(\"" << name << "\")" << endl;
-  
+
   out << endl;
-  
+
   for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
     t_field *tfield = *f_iter;
-    
+
     bool optional = field_is_optional(tfield);
     if (optional) {
       indent(out) << "if let " << maybe_escape_identifier(tfield->get_name())
                   << " = __value." << maybe_escape_identifier(tfield->get_name());
       block_open(out);
     }
-    
+
     indent(out) << "try __proto.writeFieldValue("
                 << (optional ? "" : "__value.") << maybe_escape_identifier(tfield->get_name()) << ", "
                 << "name: \"" << tfield->get_name() << "\", "
@@ -865,7 +865,7 @@
   }
 
   indent(out) << "try __proto.writeFieldStop()" << endl << endl;
-  
+
   indent(out) << "try __proto.writeStructEnd()" << endl;
 
   block_close(out);
@@ -883,28 +883,28 @@
  * @param tstruct The structure definition
  */
 void t_swift_generator::generate_swift_struct_result_writer(ofstream& out, t_struct* tstruct) {
-  
+
   indent(out) << "private static func writeValue(__value: " << tstruct->get_name() << ", toProtocol __proto: TProtocol) throws";
-  
+
   block_open(out);
-  
+
   out << endl;
-  
+
   string name = tstruct->get_name();
   const vector<t_field*>& fields = tstruct->get_members();
   vector<t_field*>::const_iterator f_iter;
-  
+
   indent(out) << "try __proto.writeStructBeginWithName(\"" << name << "\")" << endl;
-  
+
   out << endl;
-  
+
   for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
     t_field *tfield = *f_iter;
-    
+
     indent(out) << "if let result = __value." << (*f_iter)->get_name();
-    
+
     block_open(out);
-    
+
     indent(out) << "try __proto.writeFieldValue(result, "
                 << "name: \"" << tfield->get_name() << "\", "
                 << "type: " << type_to_enum(tfield->get_type()) << ", "
@@ -914,11 +914,11 @@
   }
   // Write the struct map
   indent(out) << "try __proto.writeFieldStop()" << endl << endl;
-  
+
   indent(out) << "try __proto.writeStructEnd()" << endl;
 
   block_close(out);
-  
+
   out << endl;
 }
 
@@ -928,22 +928,22 @@
  * @param tstruct The struct definition
  */
 void t_swift_generator::generate_swift_struct_printable_extension(ofstream& out, t_struct* tstruct) {
-  
+
   // Allow use of debugDescription so the app can add description via a cateogory/extension
 
   indent(out) << "extension " << tstruct->get_name() << " : "
               << (debug_descriptions_ ? "CustomDebugStringConvertible" : "CustomStringConvertible");
 
   block_open(out);
-  
+
   out << endl;
-  
+
   indent(out) << "public var description : String";
-  
+
   block_open(out);
-  
+
   indent(out) << "var desc = \"" << tstruct->get_name() << "(\"" << endl;
-  
+
   const vector<t_field*>& fields = tstruct->get_members();
   vector<t_field*>::const_iterator f_iter;
 
@@ -959,11 +959,11 @@
   indent(out) << "return desc" << endl;
 
   block_close(out);
-  
+
   out << endl;
-  
+
   block_close(out);
-  
+
   out << endl;
 }
 
@@ -975,7 +975,7 @@
  * @param tservice The service definition
  */
 void t_swift_generator::generate_service(t_service* tservice) {
-  
+
   generate_swift_service_protocol(f_decl_, tservice);
   generate_swift_service_client(f_decl_, tservice);
   if (async_clients_) {
@@ -985,7 +985,7 @@
   generate_swift_service_server(f_decl_, tservice);
 
   generate_swift_service_helpers(tservice);
-  
+
   generate_swift_service_client_implementation(f_impl_, tservice);
   if (async_clients_) {
     generate_swift_service_client_async_implementation(f_impl_, tservice);
@@ -1002,11 +1002,11 @@
   vector<t_function*> functions = tservice->get_functions();
   vector<t_function*>::iterator f_iter;
   for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
-    
+
     t_struct* ts = (*f_iter)->get_arglist();
-    
+
     string qname = function_args_helper_struct_type(tservice, *f_iter);
-    
+
     t_struct qname_ts = t_struct(ts->get_program(), qname);
 
     const vector<t_field*>& members = ts->get_members();
@@ -1014,7 +1014,7 @@
     for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
       qname_ts.append(*m_iter);
     }
-    
+
     generate_swift_struct(f_impl_, &qname_ts, true);
     generate_swift_struct_implementation(f_impl_, &qname_ts, false, true);
     generate_function_helpers(tservice, *f_iter);
@@ -1065,7 +1065,7 @@
   // generate the result struct
   generate_swift_struct(f_impl_, &result, true);
   generate_swift_struct_implementation(f_impl_, &result, true, true);
-  
+
   for (f_iter = result.get_members().begin(); f_iter != result.get_members().end(); ++f_iter) {
     delete *f_iter;
   }
@@ -1081,10 +1081,10 @@
   indent(out) << "public protocol " << tservice->get_name();
 
   block_open(out);
-  
+
   vector<t_function*> functions = tservice->get_functions();
   vector<t_function*>::iterator f_iter;
-  
+
   for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
     out << endl;
     indent(out) << function_signature(*f_iter) << "  // exceptions: ";
@@ -1096,9 +1096,9 @@
     }
     out << endl;
   }
-  
+
   block_close(out);
-  
+
   out << endl;
 }
 
@@ -1108,14 +1108,14 @@
  * @param tservice The service to generate a protocol definition for
  */
 void t_swift_generator::generate_swift_service_protocol_async(ofstream& out, t_service* tservice) {
-  
+
   indent(out) << "public protocol " << tservice->get_name() << "Async";
 
   block_open(out);
-  
+
   vector<t_function*> functions = tservice->get_functions();
   vector<t_function*>::iterator f_iter;
-  
+
   for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
     out << endl;
     indent(out) << async_function_signature(*f_iter) << endl;
@@ -1124,9 +1124,9 @@
     }
     out << endl;
   }
-  
+
   block_close(out);
-  
+
   out << endl;
 }
 
@@ -1137,43 +1137,43 @@
  */
 void t_swift_generator::generate_swift_service_client(ofstream& out,
                                                                 t_service* tservice) {
-  
+
   indent(out) << "public class " << tservice->get_name() << "Client /* : " << tservice->get_name() << " */";
-  
+
   block_open(out);
-  
+
   out << endl;
 
   indent(out) << "let __inProtocol : TProtocol" << endl << endl;
-  
+
   indent(out) << "let __outProtocol : TProtocol" << endl << endl;
-  
+
   indent(out) << "public init(inoutProtocol: TProtocol)";
-  
+
   block_open(out);
-  
+
   indent(out) << "__inProtocol = inoutProtocol" << endl;
-         
+
   indent(out) << "__outProtocol = inoutProtocol" << endl;
-                
+
   block_close(out);
-  
+
   out << endl;
-  
+
   indent(out) << "public init(inProtocol: TProtocol, outProtocol: TProtocol)";
-  
+
   block_open(out);
-  
+
   indent(out) << "__inProtocol = inProtocol" << endl;
-  
+
   indent(out) << "__outProtocol = outProtocol" << endl;
-  
+
   block_close(out);
-  
+
   out << endl;
-  
+
   block_close(out);
-  
+
   out << endl;
 }
 
@@ -1184,49 +1184,49 @@
  */
 void t_swift_generator::generate_swift_service_client_async(ofstream& out,
                                                                       t_service* tservice) {
-  
+
   indent(out) << "public class " << tservice->get_name() << "AsyncClient /* : " << tservice->get_name() << " */";
-  
+
   block_open(out);
-  
+
   out << endl;
-  
+
   indent(out) << "let __protocolFactory : TProtocolFactory" << endl << endl;
-  
+
   indent(out) << "let __transportFactory : TAsyncTransportFactory" << endl << endl;
-  
+
   indent(out) << "public init(protocolFactory: TProtocolFactory, transportFactory: TAsyncTransportFactory)";
-  
+
   block_open(out);
-  
+
   indent(out) << "__protocolFactory = protocolFactory" << endl;
-  
+
   indent(out) << "__transportFactory = transportFactory" << endl;
-  
+
   block_close(out);
-  
+
   out << endl;
-  
+
   block_close(out);
-  
+
   out << endl;
 }
 
 /**
- * Generates a service server interface definition. In other words, 
+ * Generates a service server interface definition. In other words,
  * the TProcess implementation for the service definition.
  *
  * @param tservice The service to generate a client interface definition for
  */
 void t_swift_generator::generate_swift_service_server(ofstream& out,
                                                                 t_service* tservice) {
-  
+
   indent(out) << "public class " << tservice->get_name() << "Processor : NSObject /* " << tservice->get_name() << " */";
 
   block_open(out);
-  
+
   out << endl;
-  
+
   out << indent() << "typealias ProcessorHandlerDictionary = "
                   << "[String: (Int, TProtocol, TProtocol, " << tservice->get_name() << ") throws -> Void]" << endl
       << endl
@@ -1240,7 +1240,7 @@
   out << endl;
 
   block_close(out);
-  
+
   out << endl;
 }
 
@@ -1258,7 +1258,7 @@
                                                                                    t_service *tservice,
                                                                                    t_function* tfunction,
                                                                                    bool needs_protocol) {
-  
+
   string funname = tfunction->get_name();
 
   t_function send_function(g_type_bool,
@@ -1267,11 +1267,11 @@
 
   string argsname = function_args_helper_struct_type(tservice, tfunction);
   t_struct* arg_struct = tfunction->get_arglist();
-  
+
   // Open function
   indent(out) << "private func " << send_function.get_name() << "(" << argument_list(tfunction->get_arglist(), needs_protocol ? "__outProtocol" : "", true) << ") throws";
   block_open(out);
-  
+
   out << endl;
 
   // Serialize the request
@@ -1280,14 +1280,14 @@
               << "sequenceID: 0)" << endl;
 
   out << endl;
-  
+
   indent(out) << "let __args = " << argsname << "(";
-  
+
   // write out function parameters
-  
+
   const vector<t_field*>& fields = arg_struct->get_members();
   vector<t_field*>::const_iterator f_iter;
-  
+
   for (f_iter = fields.begin(); f_iter != fields.end();) {
     t_field *tfield = (*f_iter);
     out << tfield->get_name() << ": " << tfield->get_name();
@@ -1297,11 +1297,11 @@
   }
   out << ")" << endl;
   indent(out) << "try " << argsname << ".writeValue(__args, toProtocol: __outProtocol)" << endl << endl;
-  
+
   indent(out) << "try __outProtocol.writeMessageEnd()" << endl;
 
   block_close(out);
-  
+
   out << endl;
 }
 
@@ -1319,35 +1319,35 @@
                                                                                    t_service* tservice,
                                                                                    t_function* tfunction,
                                                                                    bool needs_protocol) {
-  
+
   // Open function
   indent(out) << "private func recv_" << tfunction->get_name() << "(";
-  
+
   if (needs_protocol) {
     out << "__inProtocol: TProtocol";
   }
-  
+
   out << ") throws";
-  
+
   if (!tfunction->get_returntype()->is_void()) {
     out << " -> " << type_name(tfunction->get_returntype());
   }
-  
+
   block_open(out);
 
   // check for an exception
-  
+
   out << endl;
-  
+
   indent(out) << "try __inProtocol.readResultMessageBegin() " << endl << endl;
-  
+
   string resultname = function_result_helper_struct_type(tservice, tfunction);
   indent(out);
   if (!tfunction->get_returntype()->is_void() || !tfunction->get_xceptions()->get_members().empty()) {
     out << "let __result = ";
   }
   out << "try " << resultname << ".readValueFromProtocol(__inProtocol)" << endl << endl;
-  
+
   indent(out) << "try __inProtocol.readMessageEnd()" << endl << endl;
 
   // Careful, only return _result if not a void function
@@ -1361,7 +1361,7 @@
   t_struct* xs = tfunction->get_xceptions();
   const vector<t_field*>& xceptions = xs->get_members();
   vector<t_field*>::const_iterator x_iter;
-  
+
   for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
     indent(out) << "if let " << (*x_iter)->get_name() << " = __result." << (*x_iter)->get_name();
     block_open(out);
@@ -1381,7 +1381,7 @@
 
   // Close function
   block_close(out);
-  
+
   out << endl;
 }
 
@@ -1393,21 +1393,21 @@
  */
 void t_swift_generator::generate_swift_service_client_send_function_invocation(ofstream& out,
                                                                                t_function* tfunction) {
-  
+
   indent(out) << "try send_" << tfunction->get_name() << "(";
-  
+
   t_struct* arg_struct = tfunction->get_arglist();
-  
+
   const vector<t_field*>& fields = arg_struct->get_members();
   vector<t_field*>::const_iterator f_iter;
-  
+
   for (f_iter = fields.begin(); f_iter != fields.end();) {
     out << (*f_iter)->get_name() << ": " << (*f_iter)->get_name();
     if (++f_iter != fields.end()) {
       out << ", ";
     }
   }
-  
+
   out << ")" << endl;
 }
 
@@ -1419,17 +1419,17 @@
  */
 void t_swift_generator::generate_swift_service_client_send_async_function_invocation(ofstream& out,
                                                                                      t_function* tfunction) {
-  
+
   t_struct* arg_struct = tfunction->get_arglist();
   const vector<t_field*>& fields = arg_struct->get_members();
   vector<t_field*>::const_iterator f_iter;
-  
+
   indent(out) << "try send_" << tfunction->get_name() << "(__protocol";
-  
+
   for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
     out << ", " << (*f_iter)->get_name() << ": " << (*f_iter)->get_name();
   }
-  
+
   out << ")" << endl;
 }
 
@@ -1440,15 +1440,15 @@
  */
 void t_swift_generator::generate_swift_service_client_implementation(ofstream& out,
                                                                      t_service* tservice) {
-  
+
   string name = tservice->get_name() + "Client";
-  
+
   indent(out) << "extension " << name << " : " << tservice->get_name();
-  
+
   block_open(out);
-  
+
   out << endl;
-  
+
   // generate client method implementations
   vector<t_function*> functions = tservice->get_functions();
   vector<t_function*>::const_iterator f_iter;
@@ -1462,17 +1462,17 @@
 
     // Open function
     indent(out) << "public " << function_signature(*f_iter);
-    
+
     block_open(out);
-    
+
     out << endl;
-    
+
     generate_swift_service_client_send_function_invocation(out, *f_iter);
 
     out << endl;
 
     indent(out) << "try __outProtocol.transport().flush()" << endl << endl;
-    
+
     if (!(*f_iter)->is_oneway()) {
       if ((*f_iter)->get_returntype()->is_void()) {
         indent(out) << "try recv_" << (*f_iter)->get_name() << "()" << endl;
@@ -1480,14 +1480,14 @@
         indent(out) << "return try recv_" << (*f_iter)->get_name() << "()" << endl;
       }
     }
-    
+
     block_close(out);
-    
+
     out << endl;
   }
 
   block_close(out);
-  
+
   out << endl;
 }
 
@@ -1498,16 +1498,16 @@
  */
 void t_swift_generator::generate_swift_service_client_async_implementation(ofstream& out,
                                                                            t_service* tservice) {
-  
+
   string name = tservice->get_name() + "AsyncClient";
   string protocol_name = tservice->get_name() + "Async";
 
   indent(out) << "extension " << name << " : " << protocol_name;
-  
+
   block_open(out);
-  
+
   out << endl;
-  
+
   // generate client method implementations
   vector<t_function*> functions = tservice->get_functions();
   vector<t_function*>::const_iterator f_iter;
@@ -1518,10 +1518,10 @@
     if (!(*f_iter)->is_oneway()) {
       generate_swift_service_client_recv_function_implementation(out, tservice, *f_iter, true);
     }
-    
+
     indent(out) << "public " << async_function_signature(*f_iter);
     block_open(out);
-    
+
     out << endl;
 
     out << indent() << "let __transport = __transportFactory.newTransport()" << endl
@@ -1529,11 +1529,11 @@
         << endl;
 
     generate_swift_service_client_send_async_function_invocation(out, *f_iter);
-    
+
     out << endl;
-    
+
     indent(out) << "__transport.flushWithCompletion(";
-    
+
     if ((*f_iter)->is_oneway()) {
       out << "success, failure: failure)" << endl;
     }
@@ -1547,13 +1547,13 @@
         out << "let result = ";
       }
       out << "try self.recv_" << (*f_iter)->get_name() << "(__protocol)" << endl;
-      
+
       out << indent() << "success(";
       if (!(*f_iter)->get_returntype()->is_void()) {
         out << "result";
       }
       out << ")" << endl;
-      
+
       block_close(out);
       indent(out) << "catch let error";
       block_open(out);
@@ -1562,29 +1562,29 @@
       block_close(out);
       indent(out) << ", failure: failure)" << endl;
     }
-    
-    
+
+
     block_close(out);
-    
+
     out << endl;
 
     // Promise function
     if (promise_kit_) {
-      
+
       indent(out) << "public " << promise_function_signature(*f_iter);
       block_open(out);
-      
+
       out << indent() << "let (__promise, __fulfill, __reject) = Promise<" << type_name((*f_iter)->get_returntype()) << ">.pendingPromise()" << endl << endl
           << indent() << "let __transport = __transportFactory.newTransport()" << endl
           << indent() << "let __protocol = __protocolFactory.newProtocolOnTransport(__transport)" << endl
           << endl;
-      
+
       generate_swift_service_client_send_async_function_invocation(out, *f_iter);
-      
+
       out << endl;
-      
+
       indent(out) << "__transport.flushWithCompletion(";
-      
+
       if ((*f_iter)->is_oneway()) {
         out << "{ __fulfill() }, failure: { __reject($0) })" << endl;
       }
@@ -1592,26 +1592,26 @@
         block_open(out);
         indent(out) << "do";
         block_open(out);
-        
+
         indent(out);
         if (!(*f_iter)->get_returntype()->is_void()) {
           out << "let result = ";
         }
         out << "try self.recv_" << (*f_iter)->get_name() << "(__protocol)" << endl;
-        
+
         out << indent() << "__fulfill(";
         if (!(*f_iter)->get_returntype()->is_void()) {
           out << "result";
         }
         out << ")" << endl;
-        
+
         block_close(out);
         indent(out) << "catch let error";
         block_open(out);
         indent(out) << "__reject(error)" << endl;
         block_close(out);
         block_close(out);
-        
+
         indent(out) << ", failure: { error in " << endl;
         indent_up();
         indent(out) << "__reject(error)" << endl;
@@ -1622,11 +1622,11 @@
       indent(out) << "return __promise" << endl;
 
       block_close(out);
-      
+
       out << endl;
-      
+
     }
-    
+
   }
 
   block_close(out);
@@ -1645,52 +1645,52 @@
  */
 void t_swift_generator::generate_swift_service_server_implementation(ofstream& out,
                                                                      t_service* tservice) {
-  
+
   string name = tservice->get_name() + "Processor";
 
   indent(out) << "extension " << name << " : TProcessor";
   block_open(out);
-  
+
   out << endl;
-  
+
   indent(out) << "static let processorHandlers : ProcessorHandlerDictionary =";
   block_open(out);
-  
+
   out << endl;
-  
+
   out << indent() << "var processorHandlers = ProcessorHandlerDictionary()" << endl << endl;
-  
+
   // generate method map for routing incoming calls
   vector<t_function*> functions = tservice->get_functions();
   vector<t_function*>::const_iterator f_iter;
   for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
-    
+
     t_function* tfunction = *f_iter;
-    
+
     string args_type = function_args_helper_struct_type(tservice, *f_iter);
-    
+
     out << indent() << "processorHandlers[\"" << tfunction->get_name() << "\"] = { sequenceID, inProtocol, outProtocol, handler in" << endl
         << endl;
-    
+
     indent_up();
     out << indent() << "let args = try " << args_type << ".readValueFromProtocol(inProtocol)" << endl
         << endl
         << indent() << "try inProtocol.readMessageEnd()" << endl
         << endl;
-    
+
     if (!tfunction->is_oneway() ) {
       string result_type = function_result_helper_struct_type(tservice, tfunction);
       indent(out) << "var result = " << result_type << "()" << endl;
-    
+
       indent(out) << "do";
       block_open(out);
-    
+
       indent(out);
       if (!tfunction->get_returntype()->is_void()) {
         out << "result.success = ";
       }
       out << "try handler." << function_name(tfunction) << "(";
-    
+
       t_struct* arg_struct = tfunction->get_arglist();
       const vector<t_field*>& fields = arg_struct->get_members();
       vector<t_field*>::const_iterator f_iter;
@@ -1705,29 +1705,29 @@
           out << ", ";
         }
       }
-      
+
       out << ")" << endl;
-      
+
       block_close(out);
-      
+
       t_struct* xs = tfunction->get_xceptions();
       const vector<t_field*>& xfields = xs->get_members();
       vector<t_field*>::const_iterator x_iter;
-      
+
       for (x_iter = xfields.begin(); x_iter != xfields.end(); ++x_iter) {
         indent(out) << "catch let error as " << (*x_iter)->get_type()->get_name();
         block_open(out);
         indent(out) << "result." << (*x_iter)->get_name() << " = error" << endl;
         block_close(out);
       }
-      
+
       indent(out) << "catch let error";
       block_open(out);
       out << indent() << "throw error" << endl;
       block_close(out);
-      
+
       out << endl;
-      
+
       if (!tfunction->is_oneway()) {
         out << indent() << "try outProtocol.writeMessageBeginWithName(\"" << tfunction->get_name() << "\", type: .REPLY, sequenceID: sequenceID)" << endl
             << indent() << "try " << result_type << ".writeValue(result, toProtocol: outProtocol)" << endl
@@ -1735,21 +1735,21 @@
       }
     }
     block_close(out);
-    
+
   }
-  
+
   indent(out) << "return processorHandlers" << endl;
-  
+
   block_close(out,false);
   out << "()" << endl;
-  
+
   out << endl;
-  
+
   indent(out) << "public func processOnInputProtocol(inProtocol: TProtocol, outputProtocol outProtocol: TProtocol) throws";
   block_open(out);
-  
+
   out << endl;
-  
+
   out << indent() << "let (messageName, _, sequenceID) = try inProtocol.readMessageBegin()" << endl
       << endl
       << indent() << "if let processorHandler = " << name << ".processorHandlers[messageName]";
@@ -1778,9 +1778,9 @@
   indent_down();
   indent_down();
   block_close(out);
-  
+
   block_close(out);
-  
+
   block_close(out);
   out << endl;
 }
@@ -1809,15 +1809,15 @@
   else {
     result = ttype->get_name();
   }
-  
+
   if (is_optional) {
     result += "?";
   }
-  
+
   if (is_forced) {
     result += "!";
   }
-  
+
   return result;
 }
 
@@ -1863,7 +1863,7 @@
                                              t_type* type,
                                              t_const_value* value) {
   type = get_true_type(type);
-  
+
   if (type->is_base_type()) {
     t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
     switch (tbase) {
@@ -1894,12 +1894,12 @@
   } else if (type->is_enum()) {
     out << value->get_identifier();
   } else if (type->is_struct() || type->is_xception()) {
-    
+
     out << type_name(type) << "(";
-    
+
     const vector<t_field*>& fields = ((t_struct*)type)->get_members();
     vector<t_field*>::const_iterator f_iter;
-    
+
     const map<t_const_value*, t_const_value*>& val = value->get_map();
     map<t_const_value*, t_const_value*>::const_iterator v_iter;
 
@@ -1911,7 +1911,7 @@
           value = v_iter->second;
         }
       }
-      
+
       if (value) {
         out << tfield->get_name() << ": ";
         render_const_value(out, tfield->get_type(), value);
@@ -1919,18 +1919,18 @@
       else if (!field_is_optional(tfield)) {
         throw "constant error: required field " + type->get_name() + "." + tfield->get_name() + " has no value";
       }
-      
+
       if (++f_iter != fields.end()) {
         out << ", ";
       }
     }
-    
+
     out << ")";
-    
+
   } else if (type->is_map()) {
-    
+
     out << "[";
-    
+
     t_type* ktype = ((t_map*)type)->get_key_type();
     t_type* vtype = ((t_map*)type)->get_val_type();
 
@@ -1938,58 +1938,58 @@
     map<t_const_value*, t_const_value*>::const_iterator v_iter;
 
     for (v_iter = val.begin(); v_iter != val.end();) {
-    
+
       render_const_value(out, ktype, v_iter->first);
       out << ": ";
       render_const_value(out, vtype, v_iter->second);
-      
+
       if (++v_iter != val.end()) {
         out << ", ";
       }
     }
-    
+
     out << "]";
-    
+
   } else if (type->is_list()) {
-    
+
     out << "[";
-    
+
     t_type* etype = ((t_list*)type)->get_elem_type();
-    
+
     const map<t_const_value*, t_const_value*>& val = value->get_map();
     map<t_const_value*, t_const_value*>::const_iterator v_iter;
-    
+
     for (v_iter = val.begin(); v_iter != val.end();) {
-      
+
       render_const_value(out, etype, v_iter->first);
-      
+
       if (++v_iter != val.end()) {
         out << ", ";
       }
     }
-    
+
     out << "]";
 
   } else if (type->is_set()) {
 
     out << "[";
-    
+
     t_type* etype = ((t_set*)type)->get_elem_type();
-    
+
     const map<t_const_value*, t_const_value*>& val = value->get_map();
     map<t_const_value*, t_const_value*>::const_iterator v_iter;
-    
+
     for (v_iter = val.begin(); v_iter != val.end();) {
-      
+
       render_const_value(out, etype, v_iter->first);
-      
+
       if (++v_iter != val.end()) {
         out << ", ";
       }
     }
-    
+
     out << "]";
-    
+
   } else {
     throw "compiler error: no const of type " + type->get_name();
   }
@@ -2002,20 +2002,20 @@
  * @param tfield The field to declare a property for
  */
 string t_swift_generator::declare_property(t_field* tfield, bool is_private) {
-  
+
   string visibility = is_private ? "private" : "public";
-  
+
   ostringstream render;
 
   render << visibility << " var " << maybe_escape_identifier(tfield->get_name());
-  
+
   if (field_is_optional(tfield)) {
     render << " : " << type_name(tfield->get_type(), true);
   }
   else {
     render << " = " << type_name(tfield->get_type(), false) << "()";
   }
-  
+
   return render.str();
 }
 
@@ -2026,16 +2026,16 @@
  * @return String of rendered function definition
  */
 string t_swift_generator::function_signature(t_function* tfunction) {
-  
+
   string result = "func " + function_name(tfunction);
-  
+
   result += "(" + argument_list(tfunction->get_arglist(), "", false) + ") throws";
-  
+
   t_type* ttype = tfunction->get_returntype();
   if (!ttype->is_void()) {
     result += " -> " + type_name(ttype);
   }
-  
+
   return result;
 }
 
@@ -2092,7 +2092,7 @@
 
   const vector<t_field*>& fields = tstruct->get_members();
   vector<t_field*>::const_iterator f_iter;
-  
+
   if (include_protocol) {
     result += protocol_name + ": TProtocol";
     if (!fields.empty()) {
@@ -2103,11 +2103,11 @@
     // Force first argument to be named
     result += fields.front()->get_name() + " ";
   }
-  
+
   for (f_iter = fields.begin(); f_iter != fields.end();) {
     t_field* arg = *f_iter;
     result += arg->get_name() + ": " + type_name(arg->get_type());
-    
+
     if (++f_iter != fields.end()) {
       result += ", ";
     }
@@ -2160,7 +2160,7 @@
  */
 string t_swift_generator::type_to_enum(t_type* type, bool qualified) {
   type = get_true_type(type);
-  
+
   string result = qualified ? "TType." : ".";
 
   if (type->is_base_type()) {
diff --git a/compiler/cpp/src/generate/t_xml_generator.cc b/compiler/cpp/src/thrift/generate/t_xml_generator.cc
similarity index 97%
rename from compiler/cpp/src/generate/t_xml_generator.cc
rename to compiler/cpp/src/thrift/generate/t_xml_generator.cc
index 5465b49..b35f351 100644
--- a/compiler/cpp/src/generate/t_xml_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_xml_generator.cc
@@ -26,8 +26,8 @@
 #include <sys/stat.h>
 #include <sstream>
 
-#include "t_generator.h"
-#include "platform.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -72,7 +72,7 @@
       } else if( iter->first.compare("no_namespaces") == 0) {
         should_use_namespaces_ = false;
       } else {
-        throw "unknown option xml:" + iter->first; 
+        throw "unknown option xml:" + iter->first;
       }
     }
 
@@ -102,7 +102,7 @@
   bool should_use_namespaces_;
 
   std::ofstream f_xml_;
- 
+
   std::set<string> programs_;
   std::stack<string> elements_;
   bool top_element_is_empty;
@@ -188,8 +188,8 @@
   close_top_element();
   // TODO: indent any EOLs that may occur with msg
   // TODO: proper msg escaping needed?
-  f_xml_ << indent() << "<!-- " << msg << " -->"  << endl;  
-  top_element_is_empty = false;  
+  f_xml_ << indent() << "<!-- " << msg << " -->"  << endl;
+  top_element_is_empty = false;
 }
 
 void t_xml_generator::close_top_element() {
@@ -238,7 +238,7 @@
   }
   close_top_element();
   top_element_is_empty = false;
-  f_xml_ << indent() 
+  f_xml_ << indent()
     << "<" << name << ">" << escape_xml_string(val) << "</" << name << ">"
     << endl;
 }
@@ -287,9 +287,9 @@
   }
 
   write_xml_comment( xml_autogen_comment());
-  
+
   iterate_program(program_);
-  
+
   write_element_end();
 
   close_generator();
@@ -297,7 +297,7 @@
 }
 
 void t_xml_generator::iterate_program(t_program* program) {
-  
+
   write_element_start("document");
   write_attribute("name", program->get_name());
   if (should_use_namespaces_) {
@@ -548,7 +548,7 @@
   }
 
   generate_annotations(tstruct->annotations_);
- 
+
   write_element_end();
 
 }
@@ -556,7 +556,7 @@
 void t_xml_generator::generate_field(t_field* field) {
   write_attribute("name", field->get_name());
   write_int_attribute("field-id", field->get_key());
-  write_doc(field); 
+  write_doc(field);
   string requiredness;
   switch (field->get_req()) {
   case t_field::T_REQUIRED:
@@ -582,7 +582,7 @@
 }
 
 void t_xml_generator::generate_service(t_service* tservice) {
- 
+
   write_element_start("service");
   write_attribute("name", tservice->get_name());
 
@@ -595,7 +595,7 @@
     write_attribute("targetNamespace", tns);
     write_attribute("xmlns:tns", tns);
   }
- 
+
   if (tservice->get_extends()) {
     const t_service* extends = tservice->get_extends();
     write_attribute("parent-module", extends->get_program()->get_name());
@@ -609,15 +609,15 @@
   for (; fn_iter != functions.end(); fn_iter++) {
     generate_function(*fn_iter);
   }
-  
+
   generate_annotations(tservice->annotations_);
-  
+
   write_element_end();
 
 }
 
 void t_xml_generator::generate_function(t_function* tfunc) {
- 
+
   write_element_start("method");
 
   write_attribute("name", tfunc->get_name());
@@ -638,7 +638,7 @@
     generate_field(*mem_iter);
     write_element_end();
   }
- 
+
   vector<t_field*> excepts = tfunc->get_xceptions()->get_members();
   vector<t_field*>::iterator ex_iter = excepts.begin();
   for (; ex_iter != excepts.end(); ex_iter++) {
@@ -648,7 +648,7 @@
   }
 
   generate_annotations(tfunc->annotations_);
-  
+
   write_element_end();
 
 }
@@ -663,9 +663,9 @@
   if (ttype->is_map()) {
     return "map";
   }
-  if ((ttype->is_enum()    )|| 
-      (ttype->is_struct()  )|| 
-      (ttype->is_typedef() )|| 
+  if ((ttype->is_enum()    )||
+      (ttype->is_struct()  )||
+      (ttype->is_typedef() )||
       (ttype->is_xception())){
     return "id";
   }
diff --git a/compiler/cpp/src/generate/t_xsd_generator.cc b/compiler/cpp/src/thrift/generate/t_xsd_generator.cc
similarity index 98%
rename from compiler/cpp/src/generate/t_xsd_generator.cc
rename to compiler/cpp/src/thrift/generate/t_xsd_generator.cc
index 2de860a..fa51ba0 100644
--- a/compiler/cpp/src/generate/t_xsd_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_xsd_generator.cc
@@ -24,9 +24,9 @@
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <sstream>
-#include "t_generator.h"
-#include "version.h"
-#include "platform.h"
+#include "thrift/version.h"
+#include "thrift/platform.h"
+#include "thrift/generate/t_generator.h"
 
 using std::map;
 using std::ofstream;
@@ -53,7 +53,7 @@
 
     /* no options yet */
     for( iter = parsed_options.begin(); iter != parsed_options.end(); ++iter) {
-      throw "unknown option xsd:" + iter->first; 
+      throw "unknown option xsd:" + iter->first;
     }
 
     out_dir_base_ = "gen-xsd";
diff --git a/compiler/cpp/src/globals.h b/compiler/cpp/src/thrift/globals.h
similarity index 100%
rename from compiler/cpp/src/globals.h
rename to compiler/cpp/src/thrift/globals.h
diff --git a/compiler/cpp/src/logging.cc b/compiler/cpp/src/thrift/logging.cc
similarity index 96%
rename from compiler/cpp/src/logging.cc
rename to compiler/cpp/src/thrift/logging.cc
index 2daaaec..f821f5f 100644
--- a/compiler/cpp/src/logging.cc
+++ b/compiler/cpp/src/thrift/logging.cc
@@ -21,8 +21,8 @@
  * Logging functions copied from main.cc to avoid link errors for plugins
  */
 
-#include "logging.h"
-#include "globals.h"
+#include "thrift/logging.h"
+#include "thrift/globals.h"
 #include <cstdarg>
 #include <cstdio>
 #include <cstdlib>
diff --git a/compiler/cpp/src/logging.h b/compiler/cpp/src/thrift/logging.h
similarity index 100%
rename from compiler/cpp/src/logging.h
rename to compiler/cpp/src/thrift/logging.h
diff --git a/compiler/cpp/src/main.cc b/compiler/cpp/src/thrift/main.cc
similarity index 98%
rename from compiler/cpp/src/main.cc
rename to compiler/cpp/src/thrift/main.cc
index 510d69f..8421840 100644
--- a/compiler/cpp/src/main.cc
+++ b/compiler/cpp/src/thrift/main.cc
@@ -44,20 +44,20 @@
 #endif
 
 // Careful: must include globals first for extern definitions
-#include "common.h"
-#include "globals.h"
+#include "thrift/common.h"
+#include "thrift/globals.h"
 
-#include "platform.h"
-#include "main.h"
-#include "parse/t_program.h"
-#include "parse/t_scope.h"
-#include "generate/t_generator.h"
-#include "audit/t_audit.h"
+#include "thrift/platform.h"
+#include "thrift/main.h"
+#include "thrift/parse/t_program.h"
+#include "thrift/parse/t_scope.h"
+#include "thrift/generate/t_generator.h"
+#include "thrift/audit/t_audit.h"
 #ifdef THRIFT_ENABLE_PLUGIN
-#include "plugin/plugin_output.h"
+#include "thrift/plugin/plugin_output.h"
 #endif
 
-#include "version.h"
+#include "thrift/version.h"
 
 using namespace std;
 
diff --git a/compiler/cpp/src/main.h b/compiler/cpp/src/thrift/main.h
similarity index 96%
rename from compiler/cpp/src/main.h
rename to compiler/cpp/src/thrift/main.h
index b0af5a7..54abb03 100644
--- a/compiler/cpp/src/main.h
+++ b/compiler/cpp/src/thrift/main.h
@@ -23,10 +23,10 @@
 #include <string>
 #include <cstdio>
 
-#include "logging.h"
+#include "thrift/logging.h"
 
-#include "parse/t_const.h"
-#include "parse/t_field.h"
+#include "thrift/parse/t_const.h"
+#include "thrift/parse/t_field.h"
 
 /**
  * Defined in the flex library
diff --git a/compiler/cpp/src/parse/parse.cc b/compiler/cpp/src/thrift/parse/parse.cc
similarity index 92%
rename from compiler/cpp/src/parse/parse.cc
rename to compiler/cpp/src/thrift/parse/parse.cc
index 81a557b..01f7637 100644
--- a/compiler/cpp/src/parse/parse.cc
+++ b/compiler/cpp/src/thrift/parse/parse.cc
@@ -17,10 +17,10 @@
  * under the License.
  */
 
-#include "t_type.h"
-#include "t_typedef.h"
+#include "thrift/parse/t_type.h"
+#include "thrift/parse/t_typedef.h"
 
-#include "main.h"
+#include "thrift/main.h"
 
 t_type* t_type::get_true_type() {
   t_type* type = this;
diff --git a/compiler/cpp/src/parse/t_base_type.h b/compiler/cpp/src/thrift/parse/t_base_type.h
similarity index 98%
rename from compiler/cpp/src/parse/t_base_type.h
rename to compiler/cpp/src/thrift/parse/t_base_type.h
index 11d73e0..32523cb 100644
--- a/compiler/cpp/src/parse/t_base_type.h
+++ b/compiler/cpp/src/thrift/parse/t_base_type.h
@@ -21,7 +21,7 @@
 #define T_BASE_TYPE_H
 
 #include <cstdlib>
-#include "t_type.h"
+#include "thrift/parse/t_type.h"
 
 /**
  * A thrift base type, which must be one of the defined enumerated types inside
diff --git a/compiler/cpp/src/parse/t_const.h b/compiler/cpp/src/thrift/parse/t_const.h
similarity index 95%
rename from compiler/cpp/src/parse/t_const.h
rename to compiler/cpp/src/thrift/parse/t_const.h
index 0f64bb1..3c08e0d 100644
--- a/compiler/cpp/src/parse/t_const.h
+++ b/compiler/cpp/src/thrift/parse/t_const.h
@@ -20,8 +20,8 @@
 #ifndef T_CONST_H
 #define T_CONST_H
 
-#include "t_type.h"
-#include "t_const_value.h"
+#include "thrift/parse/t_type.h"
+#include "thrift/parse/t_const_value.h"
 
 /**
  * A const is a constant value defined across languages that has a type and
diff --git a/compiler/cpp/src/parse/t_const_value.h b/compiler/cpp/src/thrift/parse/t_const_value.h
similarity index 98%
rename from compiler/cpp/src/parse/t_const_value.h
rename to compiler/cpp/src/thrift/parse/t_const_value.h
index 15366ad..5507803 100644
--- a/compiler/cpp/src/parse/t_const_value.h
+++ b/compiler/cpp/src/thrift/parse/t_const_value.h
@@ -20,7 +20,7 @@
 #ifndef T_CONST_VALUE_H
 #define T_CONST_VALUE_H
 
-#include "t_enum.h"
+#include "thrift/parse/t_enum.h"
 #include <stdint.h>
 #include <map>
 #include <vector>
diff --git a/compiler/cpp/src/parse/t_container.h b/compiler/cpp/src/thrift/parse/t_container.h
similarity index 97%
rename from compiler/cpp/src/parse/t_container.h
rename to compiler/cpp/src/thrift/parse/t_container.h
index 2cdcf7e..5bdab70 100644
--- a/compiler/cpp/src/parse/t_container.h
+++ b/compiler/cpp/src/thrift/parse/t_container.h
@@ -20,7 +20,7 @@
 #ifndef T_CONTAINER_H
 #define T_CONTAINER_H
 
-#include "t_type.h"
+#include "thrift/parse/t_type.h"
 
 class t_container : public t_type {
 public:
diff --git a/compiler/cpp/src/parse/t_doc.h b/compiler/cpp/src/thrift/parse/t_doc.h
similarity index 95%
rename from compiler/cpp/src/parse/t_doc.h
rename to compiler/cpp/src/thrift/parse/t_doc.h
index 621513a..7bcb8f5 100644
--- a/compiler/cpp/src/parse/t_doc.h
+++ b/compiler/cpp/src/thrift/parse/t_doc.h
@@ -20,8 +20,8 @@
 #ifndef T_DOC_H
 #define T_DOC_H
 
-#include "globals.h"
-#include "logging.h"
+#include "thrift/globals.h"
+#include "thrift/logging.h"
 
 /**
  * Documentation stubs
diff --git a/compiler/cpp/src/parse/t_enum.h b/compiler/cpp/src/thrift/parse/t_enum.h
similarity index 97%
rename from compiler/cpp/src/parse/t_enum.h
rename to compiler/cpp/src/thrift/parse/t_enum.h
index 268f89f..9e23780 100644
--- a/compiler/cpp/src/parse/t_enum.h
+++ b/compiler/cpp/src/thrift/parse/t_enum.h
@@ -22,8 +22,8 @@
 
 #include <vector>
 
-#include "t_enum_value.h"
-#include "t_type.h"
+#include "thrift/parse/t_enum_value.h"
+#include "thrift/parse/t_type.h"
 
 /**
  * An enumerated type. A list of constant objects with a name for the type.
diff --git a/compiler/cpp/src/parse/t_enum_value.h b/compiler/cpp/src/thrift/parse/t_enum_value.h
similarity index 97%
rename from compiler/cpp/src/parse/t_enum_value.h
rename to compiler/cpp/src/thrift/parse/t_enum_value.h
index 296029b..c0bf3ad 100644
--- a/compiler/cpp/src/parse/t_enum_value.h
+++ b/compiler/cpp/src/thrift/parse/t_enum_value.h
@@ -22,7 +22,7 @@
 
 #include <map>
 #include <string>
-#include "t_doc.h"
+#include "thrift/parse/t_doc.h"
 
 /**
  * A constant. These are used inside of enum definitions. Constants are just
diff --git a/compiler/cpp/src/parse/t_field.h b/compiler/cpp/src/thrift/parse/t_field.h
similarity index 97%
rename from compiler/cpp/src/parse/t_field.h
rename to compiler/cpp/src/thrift/parse/t_field.h
index 8b459a3..c5f1f80 100644
--- a/compiler/cpp/src/parse/t_field.h
+++ b/compiler/cpp/src/thrift/parse/t_field.h
@@ -24,8 +24,8 @@
 #include <string>
 #include <sstream>
 
-#include "t_doc.h"
-#include "t_type.h"
+#include "thrift/parse/t_doc.h"
+#include "thrift/parse/t_type.h"
 
 // Forward declare for xsd_attrs
 class t_struct;
diff --git a/compiler/cpp/src/parse/t_function.h b/compiler/cpp/src/thrift/parse/t_function.h
similarity index 95%
rename from compiler/cpp/src/parse/t_function.h
rename to compiler/cpp/src/thrift/parse/t_function.h
index 96886f3..05dc930 100644
--- a/compiler/cpp/src/parse/t_function.h
+++ b/compiler/cpp/src/thrift/parse/t_function.h
@@ -21,9 +21,9 @@
 #define T_FUNCTION_H
 
 #include <string>
-#include "t_type.h"
-#include "t_struct.h"
-#include "t_doc.h"
+#include "thrift/parse/t_type.h"
+#include "thrift/parse/t_struct.h"
+#include "thrift/parse/t_doc.h"
 
 /**
  * Representation of a function. Key parts are return type, function name,
diff --git a/compiler/cpp/src/parse/t_list.h b/compiler/cpp/src/thrift/parse/t_list.h
similarity index 96%
rename from compiler/cpp/src/parse/t_list.h
rename to compiler/cpp/src/thrift/parse/t_list.h
index ac0d981..acf6865 100644
--- a/compiler/cpp/src/parse/t_list.h
+++ b/compiler/cpp/src/thrift/parse/t_list.h
@@ -20,7 +20,7 @@
 #ifndef T_LIST_H
 #define T_LIST_H
 
-#include "t_container.h"
+#include "thrift/parse/t_container.h"
 
 /**
  * A list is a lightweight container type that just wraps another data type.
diff --git a/compiler/cpp/src/parse/t_map.h b/compiler/cpp/src/thrift/parse/t_map.h
similarity index 96%
rename from compiler/cpp/src/parse/t_map.h
rename to compiler/cpp/src/thrift/parse/t_map.h
index 269aeab..dd3f089 100644
--- a/compiler/cpp/src/parse/t_map.h
+++ b/compiler/cpp/src/thrift/parse/t_map.h
@@ -20,7 +20,7 @@
 #ifndef T_MAP_H
 #define T_MAP_H
 
-#include "t_container.h"
+#include "thrift/parse/t_container.h"
 
 /**
  * A map is a lightweight container type that just wraps another two data
diff --git a/compiler/cpp/src/parse/t_program.h b/compiler/cpp/src/thrift/parse/t_program.h
similarity index 96%
rename from compiler/cpp/src/parse/t_program.h
rename to compiler/cpp/src/thrift/parse/t_program.h
index 563e9e0..43dd45a 100644
--- a/compiler/cpp/src/parse/t_program.h
+++ b/compiler/cpp/src/thrift/parse/t_program.h
@@ -25,21 +25,21 @@
 #include <vector>
 
 // For program_name()
-#include "main.h"
+#include "thrift/main.h"
 
-#include "t_doc.h"
-#include "t_scope.h"
-#include "t_base_type.h"
-#include "t_typedef.h"
-#include "t_enum.h"
-#include "t_const.h"
-#include "t_struct.h"
-#include "t_service.h"
-#include "t_list.h"
-#include "t_map.h"
-#include "t_set.h"
-#include "generate/t_generator_registry.h"
-//#include "t_doc.h"
+#include "thrift/parse/t_doc.h"
+#include "thrift/parse/t_scope.h"
+#include "thrift/parse/t_base_type.h"
+#include "thrift/parse/t_typedef.h"
+#include "thrift/parse/t_enum.h"
+#include "thrift/parse/t_const.h"
+#include "thrift/parse/t_struct.h"
+#include "thrift/parse/t_service.h"
+#include "thrift/parse/t_list.h"
+#include "thrift/parse/t_map.h"
+#include "thrift/parse/t_set.h"
+#include "thrift/generate/t_generator_registry.h"
+//#include "thrift/parse/t_doc.h"
 
 /**
  * Top level class representing an entire thrift program. A program consists
diff --git a/compiler/cpp/src/parse/t_scope.h b/compiler/cpp/src/thrift/parse/t_scope.h
similarity index 96%
rename from compiler/cpp/src/parse/t_scope.h
rename to compiler/cpp/src/thrift/parse/t_scope.h
index 565fd8f..e196200 100644
--- a/compiler/cpp/src/parse/t_scope.h
+++ b/compiler/cpp/src/thrift/parse/t_scope.h
@@ -24,13 +24,13 @@
 #include <string>
 #include <sstream>
 
-#include "t_type.h"
-#include "t_service.h"
-#include "t_const.h"
-#include "t_const_value.h"
-#include "t_base_type.h"
-#include "t_map.h"
-#include "t_list.h"
+#include "thrift/parse/t_type.h"
+#include "thrift/parse/t_service.h"
+#include "thrift/parse/t_const.h"
+#include "thrift/parse/t_const_value.h"
+#include "thrift/parse/t_base_type.h"
+#include "thrift/parse/t_map.h"
+#include "thrift/parse/t_list.h"
 
 namespace plugin_output {
 template <typename From, typename To>
diff --git a/compiler/cpp/src/parse/t_service.h b/compiler/cpp/src/thrift/parse/t_service.h
similarity index 97%
rename from compiler/cpp/src/parse/t_service.h
rename to compiler/cpp/src/thrift/parse/t_service.h
index 6fa8398..e2204ca 100644
--- a/compiler/cpp/src/parse/t_service.h
+++ b/compiler/cpp/src/thrift/parse/t_service.h
@@ -20,7 +20,7 @@
 #ifndef T_SERVICE_H
 #define T_SERVICE_H
 
-#include "t_function.h"
+#include "thrift/parse/t_function.h"
 #include <vector>
 
 class t_program;
diff --git a/compiler/cpp/src/parse/t_set.h b/compiler/cpp/src/thrift/parse/t_set.h
similarity index 96%
rename from compiler/cpp/src/parse/t_set.h
rename to compiler/cpp/src/thrift/parse/t_set.h
index 8a46480..f913be4 100644
--- a/compiler/cpp/src/parse/t_set.h
+++ b/compiler/cpp/src/thrift/parse/t_set.h
@@ -20,7 +20,7 @@
 #ifndef T_SET_H
 #define T_SET_H
 
-#include "t_container.h"
+#include "thrift/parse/t_container.h"
 
 /**
  * A set is a lightweight container type that just wraps another data type.
diff --git a/compiler/cpp/src/parse/t_struct.h b/compiler/cpp/src/thrift/parse/t_struct.h
similarity index 98%
rename from compiler/cpp/src/parse/t_struct.h
rename to compiler/cpp/src/thrift/parse/t_struct.h
index 1f48f91..4102da7 100644
--- a/compiler/cpp/src/parse/t_struct.h
+++ b/compiler/cpp/src/thrift/parse/t_struct.h
@@ -25,8 +25,8 @@
 #include <utility>
 #include <string>
 
-#include "t_type.h"
-#include "t_field.h"
+#include "thrift/parse/t_type.h"
+#include "thrift/parse/t_field.h"
 
 // Forward declare that puppy
 class t_program;
diff --git a/compiler/cpp/src/parse/t_type.h b/compiler/cpp/src/thrift/parse/t_type.h
similarity index 98%
rename from compiler/cpp/src/parse/t_type.h
rename to compiler/cpp/src/thrift/parse/t_type.h
index bea4ee1..30f8c1f 100644
--- a/compiler/cpp/src/parse/t_type.h
+++ b/compiler/cpp/src/thrift/parse/t_type.h
@@ -24,7 +24,7 @@
 #include <map>
 #include <cstring>
 #include <stdint.h>
-#include "t_doc.h"
+#include "thrift/parse/t_doc.h"
 
 class t_program;
 
diff --git a/compiler/cpp/src/parse/t_typedef.cc b/compiler/cpp/src/thrift/parse/t_typedef.cc
similarity index 93%
rename from compiler/cpp/src/parse/t_typedef.cc
rename to compiler/cpp/src/thrift/parse/t_typedef.cc
index ddbe749..99ffdb8 100644
--- a/compiler/cpp/src/parse/t_typedef.cc
+++ b/compiler/cpp/src/thrift/parse/t_typedef.cc
@@ -18,8 +18,8 @@
  */
 #include <cstdio>
 
-#include "t_typedef.h"
-#include "t_program.h"
+#include "thrift/parse/t_typedef.h"
+#include "thrift/parse/t_program.h"
 
 t_type* t_typedef::get_type() const {
   if (type_ == NULL) {
diff --git a/compiler/cpp/src/parse/t_typedef.h b/compiler/cpp/src/thrift/parse/t_typedef.h
similarity index 98%
rename from compiler/cpp/src/parse/t_typedef.h
rename to compiler/cpp/src/thrift/parse/t_typedef.h
index a39a246..0cccc26 100644
--- a/compiler/cpp/src/parse/t_typedef.h
+++ b/compiler/cpp/src/thrift/parse/t_typedef.h
@@ -21,7 +21,7 @@
 #define T_TYPEDEF_H
 
 #include <string>
-#include "t_type.h"
+#include "thrift/parse/t_type.h"
 
 /**
  * A typedef is a mapping from a symbolic name to another type. In dymanically
diff --git a/compiler/cpp/src/platform.h b/compiler/cpp/src/thrift/platform.h
similarity index 96%
rename from compiler/cpp/src/platform.h
rename to compiler/cpp/src/thrift/platform.h
index 8cbe9db..7a8edae 100644
--- a/compiler/cpp/src/platform.h
+++ b/compiler/cpp/src/thrift/platform.h
@@ -23,7 +23,7 @@
  */
 
 #ifdef _MSC_VER
-#include "windows/config.h"
+#include "thrift/windows/config.h"
 #endif
 
 #ifdef _WIN32
diff --git a/compiler/cpp/src/plugin/Makefile.am b/compiler/cpp/src/thrift/plugin/Makefile.am
similarity index 93%
rename from compiler/cpp/src/plugin/Makefile.am
rename to compiler/cpp/src/thrift/plugin/Makefile.am
index 7e3c82d..e84cdbd 100644
--- a/compiler/cpp/src/plugin/Makefile.am
+++ b/compiler/cpp/src/thrift/plugin/Makefile.am
@@ -30,10 +30,10 @@
              plugin_constants.cpp
 
 BUILT_SOURCES = $(plugin_gen)
-gen.stamp: plugin.thrift $(top_builddir)/compiler/cpp/src/thrift-bootstrap
+gen.stamp: plugin.thrift $(top_builddir)/compiler/cpp/src/thrift/thrift-bootstrap
 	@$(RM) -f gen.tmp
 	@touch gen.tmp
-	$(top_builddir)/compiler/cpp/src/thrift-bootstrap -gen cpp -out . $<
+	$(top_builddir)/compiler/cpp/src/thrift/thrift-bootstrap -gen cpp -out . $<
 	@mv -f gen.tmp $@
 
 $(plugin_gen): gen.stamp
diff --git a/compiler/cpp/src/plugin/plugin.cc b/compiler/cpp/src/thrift/plugin/plugin.cc
similarity index 98%
rename from compiler/cpp/src/plugin/plugin.cc
rename to compiler/cpp/src/thrift/plugin/plugin.cc
index d969f50..1d45d89 100644
--- a/compiler/cpp/src/plugin/plugin.cc
+++ b/compiler/cpp/src/thrift/plugin/plugin.cc
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-#include "plugin/plugin.h"
+#include "thrift/plugin/plugin.h"
 
 #ifdef _WIN32
 #include <fcntl.h>
@@ -32,13 +32,13 @@
 #include <boost/range/algorithm/for_each.hpp>
 #include <boost/smart_ptr.hpp>
 
-#include "generate/t_generator.h"
-#include "plugin/type_util.h"
+#include "thrift/generate/t_generator.h"
+#include "thrift/plugin/type_util.h"
 #include "thrift/protocol/TBinaryProtocol.h"
 #include "thrift/transport/TBufferTransports.h"
 #include "thrift/transport/TFDTransport.h"
 
-#include "plugin/plugin_types.h"
+#include "thrift/plugin/plugin_types.h"
 
 namespace apache {
 namespace thrift {
diff --git a/compiler/cpp/src/plugin/plugin.h b/compiler/cpp/src/thrift/plugin/plugin.h
similarity index 100%
rename from compiler/cpp/src/plugin/plugin.h
rename to compiler/cpp/src/thrift/plugin/plugin.h
diff --git a/compiler/cpp/src/plugin/plugin.thrift b/compiler/cpp/src/thrift/plugin/plugin.thrift
similarity index 100%
rename from compiler/cpp/src/plugin/plugin.thrift
rename to compiler/cpp/src/thrift/plugin/plugin.thrift
diff --git a/compiler/cpp/src/plugin/plugin_output.cc b/compiler/cpp/src/thrift/plugin/plugin_output.cc
similarity index 98%
rename from compiler/cpp/src/plugin/plugin_output.cc
rename to compiler/cpp/src/thrift/plugin/plugin_output.cc
index 1ab015e..168a4a6 100644
--- a/compiler/cpp/src/plugin/plugin_output.cc
+++ b/compiler/cpp/src/thrift/plugin/plugin_output.cc
@@ -29,21 +29,21 @@
 #define THRIFT_PCLOSE pclose
 #endif
 
-#include "plugin/plugin_output.h"
+#include "thrift/plugin/plugin_output.h"
 
 #include <boost/range/adaptor/map.hpp>
 #include <boost/range/algorithm/copy.hpp>
 #include <boost/range/algorithm/transform.hpp>
 #include <boost/smart_ptr.hpp>
 
-#include "generate/t_generator.h"
-#include "plugin/plugin.h"
-#include "plugin/type_util.h"
+#include "thrift/generate/t_generator.h"
+#include "thrift/plugin/plugin.h"
+#include "thrift/plugin/type_util.h"
 #include "thrift/protocol/TBinaryProtocol.h"
 #include "thrift/transport/TBufferTransports.h"
 #include "thrift/transport/TFDTransport.h"
 
-#include "plugin/plugin_types.h"
+#include "thrift/plugin/plugin_types.h"
 
 namespace plugin_output {
 
diff --git a/compiler/cpp/src/plugin/plugin_output.h b/compiler/cpp/src/thrift/plugin/plugin_output.h
similarity index 100%
rename from compiler/cpp/src/plugin/plugin_output.h
rename to compiler/cpp/src/thrift/plugin/plugin_output.h
diff --git a/compiler/cpp/src/plugin/type_util.h b/compiler/cpp/src/thrift/plugin/type_util.h
similarity index 100%
rename from compiler/cpp/src/plugin/type_util.h
rename to compiler/cpp/src/thrift/plugin/type_util.h
diff --git a/compiler/cpp/src/thriftl.ll b/compiler/cpp/src/thrift/thriftl.ll
similarity index 98%
rename from compiler/cpp/src/thriftl.ll
rename to compiler/cpp/src/thrift/thriftl.ll
index f479280..bf7e8a5 100644
--- a/compiler/cpp/src/thriftl.ll
+++ b/compiler/cpp/src/thrift/thriftl.ll
@@ -53,21 +53,21 @@
 #include <stdlib.h>
 
 #ifdef _MSC_VER
-#include "windows/config.h"
+#include "thrift/windows/config.h"
 #endif
-#include "main.h"
-#include "common.h"
-#include "globals.h"
-#include "parse/t_program.h"
+#include "thrift/main.h"
+#include "thrift/common.h"
+#include "thrift/globals.h"
+#include "thrift/parse/t_program.h"
 
 /**
  * Must be included AFTER parse/t_program.h, but I can't remember why anymore
  * because I wrote this a while ago.
  */
 #if defined(BISON_USE_PARSER_H_EXTENSION)
-#include "thrifty.h"
+#include "thrift/thrifty.h"
 #else
-#include "thrifty.hh"
+#include "thrift/thrifty.hh"
 #endif
 
 void thrift_reserved_keyword(char* keyword) {
@@ -223,7 +223,7 @@
 "include"            { return tok_include;              }
 "void"               { return tok_void;                 }
 "bool"               { return tok_bool;                 }
-"byte"               { 
+"byte"               {
   emit_byte_type_warning();
   return tok_i8;
 }
diff --git a/compiler/cpp/src/thrifty.yy b/compiler/cpp/src/thrift/thrifty.yy
similarity index 99%
rename from compiler/cpp/src/thrifty.yy
rename to compiler/cpp/src/thrift/thrifty.yy
index 51de58f..b7a7f72 100644
--- a/compiler/cpp/src/thrifty.yy
+++ b/compiler/cpp/src/thrift/thrifty.yy
@@ -35,13 +35,13 @@
 #endif
 #include <limits.h>
 #ifdef _MSC_VER
-#include "windows/config.h"
+#include "thrift/windows/config.h"
 #endif
-#include "main.h"
-#include "common.h"
-#include "globals.h"
-#include "parse/t_program.h"
-#include "parse/t_scope.h"
+#include "thrift/main.h"
+#include "thrift/common.h"
+#include "thrift/globals.h"
+#include "thrift/parse/t_program.h"
+#include "thrift/parse/t_scope.h"
 
 #ifdef _MSC_VER
 //warning C4065: switch statement contains 'default' but no 'case' labels
diff --git a/compiler/cpp/src/version.h.in b/compiler/cpp/src/thrift/version.h.in
similarity index 100%
rename from compiler/cpp/src/version.h.in
rename to compiler/cpp/src/thrift/version.h.in
diff --git a/compiler/cpp/src/windows/config.h b/compiler/cpp/src/thrift/windows/config.h
similarity index 100%
rename from compiler/cpp/src/windows/config.h
rename to compiler/cpp/src/thrift/windows/config.h
diff --git a/compiler/cpp/src/windows/version.h.in b/compiler/cpp/src/thrift/windows/version.h.in
similarity index 100%
rename from compiler/cpp/src/windows/version.h.in
rename to compiler/cpp/src/thrift/windows/version.h.in
diff --git a/compiler/cpp/test/CMakeLists.txt b/compiler/cpp/test/CMakeLists.txt
index 047e23e..c1fe914 100644
--- a/compiler/cpp/test/CMakeLists.txt
+++ b/compiler/cpp/test/CMakeLists.txt
@@ -43,7 +43,7 @@
     add_test(NAME PluginUnitTest COMMAND plugintest)
 
     set(thrift-gen-mycpp_SOURCES
-        ../src/generate/t_cpp_generator.cc
+        ../src/thrift/generate/t_cpp_generator.cc
         plugin/cpp_plugin.cc
     )
     add_executable(thrift-gen-mycpp ${thrift-gen-mycpp_SOURCES})
diff --git a/compiler/cpp/test/plugin/conversion_test.cc b/compiler/cpp/test/plugin/conversion_test.cc
index f2d1407..5159ba4 100644
--- a/compiler/cpp/test/plugin/conversion_test.cc
+++ b/compiler/cpp/test/plugin/conversion_test.cc
@@ -17,9 +17,9 @@
  * under the License.
  */
 
-#include "parse/t_program.h"
-#include "plugin/type_util.h"
-#include "plugin/plugin_types.h"
+#include "thrift/parse/t_program.h"
+#include "thrift/plugin/type_util.h"
+#include "thrift/plugin/plugin_types.h"
 
 #include <map>
 #include <vector>
diff --git a/compiler/cpp/test/plugin/cpp_plugin.cc b/compiler/cpp/test/plugin/cpp_plugin.cc
index 43a62d4..6cc19f2 100644
--- a/compiler/cpp/test/plugin/cpp_plugin.cc
+++ b/compiler/cpp/test/plugin/cpp_plugin.cc
@@ -17,8 +17,8 @@
  * under the License.
  */
 
-#include "plugin/plugin.h"
-#include "generate/t_generator.h"
+#include "thrift/plugin/plugin.h"
+#include "thrift/generate/t_generator.h"
 
 namespace apache {
 namespace thrift {
