diff --git a/.gitignore b/.gitignore
index 94e8519..9a0e275 100644
--- a/.gitignore
+++ b/.gitignore
@@ -48,28 +48,28 @@
 /autoscan.log
 /autoscan-*.log
 /compiler/cpp/test/plugin/t_cpp_generator.cc
-/compiler/cpp/src/plugin/plugin_constants.cpp
-/compiler/cpp/src/plugin/plugin_constants.h
-/compiler/cpp/src/plugin/plugin_types.cpp
-/compiler/cpp/src/plugin/plugin_types.h
+/compiler/cpp/src/thrift/plugin/plugin_constants.cpp
+/compiler/cpp/src/thrift/plugin/plugin_constants.h
+/compiler/cpp/src/thrift/plugin/plugin_types.cpp
+/compiler/cpp/src/thrift/plugin/plugin_types.h
 /compiler/cpp/test/*test
 /compiler/cpp/test/thrift-gen-*
-/compiler/cpp/src/thrift-bootstrap
-/compiler/cpp/src/plugin/gen.stamp
+/compiler/cpp/src/thrift/thrift-bootstrap
+/compiler/cpp/src/thrift/plugin/gen.stamp
 /compiler/cpp/Debug
 /compiler/cpp/Release
-/compiler/cpp/src/libparse.a
-/compiler/cpp/src/thriftl.cc
-/compiler/cpp/src/thrifty.cc
-/compiler/cpp/src/thrifty.hh
-/compiler/cpp/src/windows/version.h
+/compiler/cpp/src/thrift/libparse.a
+/compiler/cpp/src/thrift/thriftl.cc
+/compiler/cpp/src/thrift/thrifty.cc
+/compiler/cpp/src/thrift/thrifty.hh
+/compiler/cpp/src/thrift/windows/version.h
 /compiler/cpp/thrift
 /compiler/cpp/thriftl.cc
 /compiler/cpp/thrifty.cc
 /compiler/cpp/lex.yythriftl.cc
 /compiler/cpp/thrifty.h
 /compiler/cpp/thrifty.hh
-/compiler/cpp/src/version.h
+/compiler/cpp/src/thrift/version.h
 /config.*
 /configure
 /configure.lineno
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 {
diff --git a/configure.ac b/configure.ac
index e11636f..94e7a8b 100755
--- a/configure.ac
+++ b/configure.ac
@@ -528,7 +528,7 @@
   have_plugin="no"
 fi
 if test "$have_plugin" = "yes" ; then
-  AC_CONFIG_LINKS([compiler/cpp/test/plugin/t_cpp_generator.cc:compiler/cpp/src/generate/t_cpp_generator.cc])
+  AC_CONFIG_LINKS([compiler/cpp/test/plugin/t_cpp_generator.cc:compiler/cpp/src/thrift/generate/t_cpp_generator.cc])
 fi
 AM_CONDITIONAL(WITH_PLUGIN, [test "$have_plugin" = "yes"])
 
@@ -729,10 +729,10 @@
   Makefile
   compiler/cpp/Makefile
   compiler/cpp/src/Makefile
-  compiler/cpp/src/plugin/Makefile
+  compiler/cpp/src/thrift/plugin/Makefile
   compiler/cpp/test/Makefile
-  compiler/cpp/src/version.h
-  compiler/cpp/src/windows/version.h
+  compiler/cpp/src/thrift/version.h
+  compiler/cpp/src/thrift/windows/version.h
   lib/Makefile
   lib/cpp/Makefile
   lib/cpp/test/Makefile
