diff --git a/compiler/cpp/src/generate/t_rb_generator.cc b/compiler/cpp/src/generate/t_rb_generator.cc
index 5f9aa68..f3f11ec 100644
--- a/compiler/cpp/src/generate/t_rb_generator.cc
+++ b/compiler/cpp/src/generate/t_rb_generator.cc
@@ -155,7 +155,6 @@
    */
 
   std::string rb_autogen_comment();
-  std::string rb_imports();
   std::string render_includes();
   std::string declare_field(t_field* tfield);
   std::string type_name(t_type* ttype);
@@ -214,13 +213,11 @@
   // Print header
   f_types_ <<
     rb_autogen_comment() << endl <<
-    rb_imports() << endl <<
     render_includes() << endl;
     begin_namespace(f_types_, ruby_modules(program_));
 
   f_consts_ <<
     rb_autogen_comment() << endl <<
-    rb_imports() << endl <<
     "require File.dirname(__FILE__) + '/" << program_name_ << "_types'" << endl <<
     endl;
     begin_namespace(f_consts_, ruby_modules(program_));
@@ -255,14 +252,6 @@
 }
 
 /**
- * Prints standard thrift imports
- */
-string t_rb_generator::rb_imports() {
-  return
-    string("require 'thrift/protocol'");
-}
-
-/**
  * Closes the type files
  */
 void t_rb_generator::close_generator() {
@@ -638,8 +627,7 @@
 
   f_service_ <<
     rb_autogen_comment() << endl <<
-    "require 'thrift'" << endl <<
-    rb_imports() << endl;
+    "require 'thrift'" << endl;
 
   if (tservice->get_extends() != NULL) {
     f_service_ <<
diff --git a/lib/rb/Manifest b/lib/rb/Manifest
index 17439ed..d952c50 100644
--- a/lib/rb/Manifest
+++ b/lib/rb/Manifest
@@ -1,9 +1,6 @@
 benchmark/benchmark.rb
 benchmark/Benchmark.thrift
 benchmark/client.rb
-benchmark/gen-rb/Benchmark_constants.rb
-benchmark/gen-rb/Benchmark_types.rb
-benchmark/gen-rb/BenchmarkService.rb
 benchmark/server.rb
 benchmark/thin_server.rb
 CHANGELOG
@@ -26,36 +23,45 @@
 lib/thrift/core_ext.rb
 lib/thrift/exceptions.rb
 lib/thrift/processor.rb
-lib/thrift/protocol/binaryprotocol.rb
-lib/thrift/protocol/binaryprotocolaccelerated.rb
+lib/thrift/protocol/binary_protocol_accelerated.rb
+lib/thrift/protocol/binary_protocol.rb
 lib/thrift/protocol/compact_protocol.rb
 lib/thrift/protocol.rb
-lib/thrift/serializer.rb
-lib/thrift/server/httpserver.rb
-lib/thrift/server/nonblockingserver.rb
+lib/thrift/serializer/serializer.rb
+lib/thrift/serializer/deserializer.rb
+lib/thrift/server/mongrel_http_server.rb
+lib/thrift/server/nonblocking_server.rb
 lib/thrift/server.rb
 lib/thrift/struct.rb
 lib/thrift/thrift_native.rb
-lib/thrift/transport/httpclient.rb
-lib/thrift/transport/socket.rb
-lib/thrift/transport/unixsocket.rb
+lib/thrift/transport/buffered_transport.rb
+lib/thrift/transport/framed_transport.rb
+lib/thrift/transport/http_client_transport.rb
+lib/thrift/transport/io_stream_transport.rb
+lib/thrift/transport/memory_buffer_transport.rb
 lib/thrift/transport.rb
 lib/thrift/types.rb
 lib/thrift.rb
 Manifest
+Rakefile
 README
-spec/binaryprotocol_spec.rb
-spec/binaryprotocol_spec_shared.rb
-spec/binaryprotocolaccelerated_spec.rb
+script/proto_benchmark.rb
+script/read_struct.rb
+script/write_struct.rb
+setup.rb
+spec/binary_protocol_accelerated_spec.rb
+spec/binary_protocol_spec.rb
+spec/binary_protocol_spec_shared.rb
 spec/client_spec.rb
 spec/compact_protocol_spec.rb
 spec/exception_spec.rb
-spec/httpclient_spec.rb
-spec/httpserver_spec.rb
-spec/nonblockingserver_spec.rb
+spec/http_client_spec.rb
+spec/mongrel_http_server_spec.rb
+spec/nonblocking_server_spec.rb
 spec/processor_spec.rb
 spec/protocol_spec.rb
 spec/serializer_spec.rb
+spec/server_socket_spec.rb
 spec/server_spec.rb
 spec/socket_spec.rb
 spec/socket_spec_shared.rb
@@ -64,4 +70,4 @@
 spec/ThriftSpec.thrift
 spec/transport_spec.rb
 spec/types_spec.rb
-spec/unixsocket_spec.rb
+spec/unix_socket_spec.rb
diff --git a/lib/rb/benchmark/benchmark.rb b/lib/rb/benchmark/benchmark.rb
index f5fe323..3dc67dd 100644
--- a/lib/rb/benchmark/benchmark.rb
+++ b/lib/rb/benchmark/benchmark.rb
@@ -20,8 +20,6 @@
 require 'rubygems'
 $:.unshift File.dirname(__FILE__) + '/../lib'
 require 'thrift'
-require 'thrift/server/nonblockingserver'
-require 'thrift/transport/unixsocket'
 require 'stringio'
 
 HOST = '127.0.0.1'
diff --git a/lib/rb/benchmark/client.rb b/lib/rb/benchmark/client.rb
index bd92bde..948f08d 100644
--- a/lib/rb/benchmark/client.rb
+++ b/lib/rb/benchmark/client.rb
@@ -19,7 +19,6 @@
 
 $:.unshift File.dirname(__FILE__) + '/../lib'
 require 'thrift'
-require 'thrift/server/nonblockingserver'
 $:.unshift File.dirname(__FILE__) + "/gen-rb"
 require 'BenchmarkService'
 
diff --git a/lib/rb/benchmark/server.rb b/lib/rb/benchmark/server.rb
index 5b7da7e..d44fa88 100644
--- a/lib/rb/benchmark/server.rb
+++ b/lib/rb/benchmark/server.rb
@@ -19,7 +19,6 @@
 
 $:.unshift File.dirname(__FILE__) + '/../lib'
 require 'thrift'
-require 'thrift/server/nonblockingserver'
 $:.unshift File.dirname(__FILE__) + "/gen-rb"
 require 'BenchmarkService'
 
@@ -41,8 +40,8 @@
     handler = BenchmarkHandler.new
     processor = ThriftBenchmark::BenchmarkService::Processor.new(handler)
     transport = ServerSocket.new(host, port)
-    transportFactory = FramedTransportFactory.new
-    args = [processor, transport, transportFactory, nil, 20]
+    transport_factory = FramedTransportFactory.new
+    args = [processor, transport, transport_factory, nil, 20]
     if serverClass == NonblockingServer
       logger = Logger.new(STDERR)
       logger.level = Logger::WARN
diff --git a/lib/rb/benchmark/thin_server.rb b/lib/rb/benchmark/thin_server.rb
index ab8db9f..47126ad 100644
--- a/lib/rb/benchmark/thin_server.rb
+++ b/lib/rb/benchmark/thin_server.rb
@@ -19,7 +19,6 @@
 
 $:.unshift File.dirname(__FILE__) + '/../lib'
 require 'thrift'
-require 'thrift/server/nonblockingserver'
 $:.unshift File.dirname(__FILE__) + "/gen-rb"
 require 'BenchmarkService'
 HOST = 'localhost'
@@ -39,7 +38,7 @@
 handler = BenchmarkHandler.new
 processor = ThriftBenchmark::BenchmarkService::Processor.new(handler)
 transport = Thrift::ServerSocket.new(HOST, PORT)
-transportFactory = Thrift::FramedTransportFactory.new
+transport_factory = Thrift::FramedTransportFactory.new
 logger = Logger.new(STDERR)
 logger.level = Logger::WARN
-Thrift::NonblockingServer.new(processor, transport, transportFactory, nil, 20, logger).serve
+Thrift::NonblockingServer.new(processor, transport, transport_factory, nil, 20, logger).serve
diff --git a/lib/rb/ext/memory_buffer.c b/lib/rb/ext/memory_buffer.c
index 12dab31..624012d 100644
--- a/lib/rb/ext/memory_buffer.c
+++ b/lib/rb/ext/memory_buffer.c
@@ -59,7 +59,7 @@
 }
 
 void Init_memory_buffer() {
-  VALUE thrift_memory_buffer_class = rb_const_get(thrift_module, rb_intern("MemoryBuffer"));
+  VALUE thrift_memory_buffer_class = rb_const_get(thrift_module, rb_intern("MemoryBufferTransport"));
   rb_define_method(thrift_memory_buffer_class, "write", rb_thrift_memory_buffer_write, 1);
   rb_define_method(thrift_memory_buffer_class, "read", rb_thrift_memory_buffer_read, 1);
   
diff --git a/lib/rb/ext/protocol.c b/lib/rb/ext/protocol.c
index 756f8b2..c187654 100644
--- a/lib/rb/ext/protocol.c
+++ b/lib/rb/ext/protocol.c
@@ -144,7 +144,7 @@
 }
 
 void Init_protocol() {
-  VALUE c_protocol = rb_const_get(thrift_module, rb_intern("Protocol"));
+  VALUE c_protocol = rb_const_get(thrift_module, rb_intern("BaseProtocol"));
   
   rb_define_method(c_protocol, "skip", rb_thrift_protocol_skip, 1);
   rb_define_method(c_protocol, "write_message_end", rb_thrift_write_message_end, 0);
diff --git a/lib/rb/lib/thrift.rb b/lib/rb/lib/thrift.rb
index ec15adc..88562e1 100644
--- a/lib/rb/lib/thrift.rb
+++ b/lib/rb/lib/thrift.rb
@@ -25,10 +25,35 @@
 require 'thrift/processor'
 require 'thrift/client'
 require 'thrift/struct'
-require 'thrift/protocol'
-require 'thrift/protocol/binaryprotocol'
+
+# serializer
+require 'thrift/serializer/serializer'
+require 'thrift/serializer/deserializer'
+
+# protocol
+require 'thrift/protocol/base_protocol'
+require 'thrift/protocol/binary_protocol'
+require 'thrift/protocol/binary_protocol_accelerated'
 require 'thrift/protocol/compact_protocol'
-require 'thrift/transport'
+
+# transport
+require 'thrift/transport/base_transport'
+require 'thrift/transport/base_server_transport'
 require 'thrift/transport/socket'
-require 'thrift/server'
-require "thrift/thrift_native"
\ No newline at end of file
+require 'thrift/transport/server_socket'
+require 'thrift/transport/unix_socket'
+require 'thrift/transport/unix_server_socket'
+require 'thrift/transport/buffered_transport'
+require 'thrift/transport/framed_transport'
+require 'thrift/transport/http_client_transport'
+require 'thrift/transport/io_stream_transport'
+require 'thrift/transport/memory_buffer_transport'
+
+# server
+require 'thrift/server/base_server'
+require 'thrift/server/nonblocking_server'
+require 'thrift/server/simple_server'
+require 'thrift/server/threaded_server'
+require 'thrift/server/thread_pool_server'
+
+require 'thrift/thrift_native'
\ No newline at end of file
diff --git a/lib/rb/lib/thrift/protocol.rb b/lib/rb/lib/thrift/protocol/base_protocol.rb
similarity index 98%
rename from lib/rb/lib/thrift/protocol.rb
rename to lib/rb/lib/thrift/protocol/base_protocol.rb
index adeddef..b19909d 100644
--- a/lib/rb/lib/thrift/protocol.rb
+++ b/lib/rb/lib/thrift/protocol/base_protocol.rb
@@ -35,10 +35,9 @@
       super(message)
       @type = type
     end
-
   end
 
-  class Protocol
+  class BaseProtocol
 
     attr_reader :trans
 
@@ -281,12 +280,11 @@
         read_list_end
       end
     end
-
   end
 
-  class ProtocolFactory
+  class BaseProtocolFactory
     def get_protocol(trans)
       raise NotImplementedError
     end
   end
-end
+end
\ No newline at end of file
diff --git a/lib/rb/lib/thrift/protocol/binaryprotocol.rb b/lib/rb/lib/thrift/protocol/binary_protocol.rb
similarity index 97%
rename from lib/rb/lib/thrift/protocol/binaryprotocol.rb
rename to lib/rb/lib/thrift/protocol/binary_protocol.rb
index ca9ffea..04d149a 100644
--- a/lib/rb/lib/thrift/protocol/binaryprotocol.rb
+++ b/lib/rb/lib/thrift/protocol/binary_protocol.rb
@@ -17,10 +17,8 @@
 # under the License.
 # 
 
-require 'thrift/protocol'
-
 module Thrift
-  class BinaryProtocol < Protocol
+  class BinaryProtocol < BaseProtocol
     VERSION_MASK = 0xffff0000
     VERSION_1 = 0x80010000
     TYPE_MASK = 0x000000ff
@@ -219,7 +217,7 @@
 
   end
 
-  class BinaryProtocolFactory < ProtocolFactory
+  class BinaryProtocolFactory < BaseProtocolFactory
     def get_protocol(trans)
       return Thrift::BinaryProtocol.new(trans)
     end
diff --git a/lib/rb/lib/thrift/protocol/binaryprotocolaccelerated.rb b/lib/rb/lib/thrift/protocol/binary_protocol_accelerated.rb
similarity index 80%
rename from lib/rb/lib/thrift/protocol/binaryprotocolaccelerated.rb
rename to lib/rb/lib/thrift/protocol/binary_protocol_accelerated.rb
index 9bb690d..eaf64f6 100644
--- a/lib/rb/lib/thrift/protocol/binaryprotocolaccelerated.rb
+++ b/lib/rb/lib/thrift/protocol/binary_protocol_accelerated.rb
@@ -17,20 +17,17 @@
 # under the License.
 # 
 
-require 'thrift/protocol/binaryprotocol'
-require 'thrift_native'
-
 =begin
-The only change required for a transport to support TBinaryProtocolAccelerated is to implement 2 methods:
+The only change required for a transport to support BinaryProtocolAccelerated is to implement 2 methods:
   * borrow(size), which takes an optional argument and returns atleast _size_ bytes from the transport, 
                   or the default buffer size if no argument is given
   * consume!(size), which removes size bytes from the front of the buffer
 
-See TMemoryBuffer and TBufferedTransport for examples.
+See MemoryBuffer and BufferedTransport for examples.
 =end
 
 module Thrift
-  class BinaryProtocolAcceleratedFactory < ProtocolFactory
+  class BinaryProtocolAcceleratedFactory < BaseProtocolFactory
     def get_protocol(trans)
       BinaryProtocolAccelerated.new(trans)
     end
diff --git a/lib/rb/lib/thrift/protocol/compact_protocol.rb b/lib/rb/lib/thrift/protocol/compact_protocol.rb
index 1f8ec5b..c8f4365 100644
--- a/lib/rb/lib/thrift/protocol/compact_protocol.rb
+++ b/lib/rb/lib/thrift/protocol/compact_protocol.rb
@@ -17,10 +17,8 @@
 # under the License.
 # 
 
-require 'thrift/protocol'
-
 module Thrift
-  class CompactProtocol < Protocol
+  class CompactProtocol < BaseProtocol
 
     PROTOCOL_ID = [0x82].pack('c').unpack('c').first
     VERSION = 1
@@ -416,7 +414,7 @@
     end
   end
 
-  class CompactProtocolFactory < ProtocolFactory
+  class CompactProtocolFactory < BaseProtocolFactory
     def get_protocol(trans)
       CompactProtocol.new(trans)
     end
diff --git a/lib/rb/lib/thrift/serializer.rb b/lib/rb/lib/thrift/serializer/deserializer.rb
similarity index 66%
copy from lib/rb/lib/thrift/serializer.rb
copy to lib/rb/lib/thrift/serializer/deserializer.rb
index 11c754c..d2ee325 100644
--- a/lib/rb/lib/thrift/serializer.rb
+++ b/lib/rb/lib/thrift/serializer/deserializer.rb
@@ -18,23 +18,10 @@
 # 
 
 module Thrift
-  class Serializer
-    def initialize(protocolFactory = BinaryProtocolFactory.new)
-      @transport = MemoryBuffer.new
-      @protocol = protocolFactory.get_protocol(@transport)
-    end
-
-    def serialize(base)
-      @transport.reset_buffer
-      base.write(@protocol)
-      @transport.read(@transport.available)
-    end
-  end
-
   class Deserializer
-    def initialize(protocolFactory = BinaryProtocolFactory.new)
-      @transport = MemoryBuffer.new
-      @protocol = protocolFactory.get_protocol(@transport)
+    def initialize(protocol_factory = BinaryProtocolFactory.new)
+      @transport = MemoryBufferTransport.new
+      @protocol = protocol_factory.get_protocol(@transport)
     end
 
     def deserialize(base, buffer)
@@ -43,4 +30,4 @@
       base
     end
   end
-end
+end
\ No newline at end of file
diff --git a/lib/rb/lib/thrift/serializer.rb b/lib/rb/lib/thrift/serializer/serializer.rb
similarity index 67%
rename from lib/rb/lib/thrift/serializer.rb
rename to lib/rb/lib/thrift/serializer/serializer.rb
index 11c754c..2231639 100644
--- a/lib/rb/lib/thrift/serializer.rb
+++ b/lib/rb/lib/thrift/serializer/serializer.rb
@@ -19,9 +19,9 @@
 
 module Thrift
   class Serializer
-    def initialize(protocolFactory = BinaryProtocolFactory.new)
-      @transport = MemoryBuffer.new
-      @protocol = protocolFactory.get_protocol(@transport)
+    def initialize(protocol_factory = BinaryProtocolFactory.new)
+      @transport = MemoryBufferTransport.new
+      @protocol = protocol_factory.get_protocol(@transport)
     end
 
     def serialize(base)
@@ -30,17 +30,5 @@
       @transport.read(@transport.available)
     end
   end
-
-  class Deserializer
-    def initialize(protocolFactory = BinaryProtocolFactory.new)
-      @transport = MemoryBuffer.new
-      @protocol = protocolFactory.get_protocol(@transport)
-    end
-
-    def deserialize(base, buffer)
-      @transport.reset_buffer(buffer)
-      base.read(@protocol)
-      base
-    end
-  end
 end
+
diff --git a/lib/rb/lib/thrift/server.rb b/lib/rb/lib/thrift/server.rb
deleted file mode 100644
index bd42854..0000000
--- a/lib/rb/lib/thrift/server.rb
+++ /dev/null
@@ -1,142 +0,0 @@
-# 
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-# 
-#   http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-# 
-
-require 'thrift/protocol'
-require 'thrift/protocol/binaryprotocol'
-require 'thrift/transport'
-
-module Thrift
-  class Server
-    def initialize(processor, serverTransport, transportFactory=nil, protocolFactory=nil)
-      @processor = processor
-      @serverTransport = serverTransport
-      @transportFactory = transportFactory ? transportFactory : Thrift::TransportFactory.new
-      @protocolFactory = protocolFactory ? protocolFactory : Thrift::BinaryProtocolFactory.new
-    end
-
-    def serve; nil; end
-  end
-
-  class SimpleServer < Server
-    def serve
-      begin
-        @serverTransport.listen
-        loop do
-          client = @serverTransport.accept
-          trans = @transportFactory.get_transport(client)
-          prot = @protocolFactory.get_protocol(trans)
-          begin
-            loop do
-              @processor.process(prot, prot)
-            end
-          rescue Thrift::TransportException, Thrift::ProtocolException
-          ensure
-            trans.close
-          end
-        end
-      ensure
-        @serverTransport.close
-      end
-    end
-  end
-end
-
-# do *not* use fastthread
-# it has a bug that triggers on NonblockingServer
-require 'thread'
-
-module Thrift
-  class ThreadedServer < Server
-    def serve
-      begin
-        @serverTransport.listen
-        loop do
-          client = @serverTransport.accept
-          trans = @transportFactory.get_transport(client)
-          prot = @protocolFactory.get_protocol(trans)
-          Thread.new(prot, trans) do |p, t|
-            begin
-              loop do
-                @processor.process(p, p)
-              end
-            rescue Thrift::TransportException, Thrift::ProtocolException
-            ensure
-              t.close
-            end
-          end
-        end
-      ensure
-        @serverTransport.close
-      end
-    end
-  end
-
-  class ThreadPoolServer < Server
-    def initialize(processor, serverTransport, transportFactory=nil, protocolFactory=nil, num=20)
-      super(processor, serverTransport, transportFactory, protocolFactory)
-      @thread_q = SizedQueue.new(num)
-      @exception_q = Queue.new
-      @running = false
-    end
-
-    ## exceptions that happen in worker threads will be relayed here and
-    ## must be caught. 'retry' can be used to continue. (threads will
-    ## continue to run while the exception is being handled.)
-    def rescuable_serve
-      Thread.new { serve } unless @running
-      @running = true
-      raise @exception_q.pop
-    end
-
-    ## exceptions that happen in worker threads simply cause that thread
-    ## to die and another to be spawned in its place.
-    def serve
-      @serverTransport.listen
-
-      begin
-        loop do
-          @thread_q.push(:token)
-          Thread.new do
-            begin
-              loop do
-                client = @serverTransport.accept
-                trans = @transportFactory.get_transport(client)
-                prot = @protocolFactory.get_protocol(trans)
-                begin
-                  loop do
-                    @processor.process(prot, prot)
-                  end
-                rescue Thrift::TransportException, Thrift::ProtocolException => e
-                ensure
-                  trans.close
-                end
-              end
-            rescue => e
-              @exception_q.push(e)
-            ensure
-              @thread_q.pop # thread died!
-            end
-          end
-        end
-      ensure
-        @serverTransport.close
-      end
-    end
-  end
-end
diff --git a/lib/rb/lib/thrift/server/base_server.rb b/lib/rb/lib/thrift/server/base_server.rb
new file mode 100644
index 0000000..1ee1213
--- /dev/null
+++ b/lib/rb/lib/thrift/server/base_server.rb
@@ -0,0 +1,31 @@
+# 
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+module Thrift
+  class BaseServer
+    def initialize(processor, server_transport, transport_factory=nil, protocol_factory=nil)
+      @processor = processor
+      @server_transport = server_transport
+      @transport_factory = transport_factory ? transport_factory : Thrift::BaseTransportFactory.new
+      @protocol_factory = protocol_factory ? protocol_factory : Thrift::BinaryProtocolFactory.new
+    end
+
+    def serve; nil; end
+  end
+end
\ No newline at end of file
diff --git a/lib/rb/lib/thrift/server/httpserver.rb b/lib/rb/lib/thrift/server/mongrel_http_server.rb
similarity index 93%
rename from lib/rb/lib/thrift/server/httpserver.rb
rename to lib/rb/lib/thrift/server/mongrel_http_server.rb
index f26329f..84eacf0 100644
--- a/lib/rb/lib/thrift/server/httpserver.rb
+++ b/lib/rb/lib/thrift/server/mongrel_http_server.rb
@@ -17,15 +17,11 @@
 # under the License.
 # 
 
-require 'thrift/protocol'
-require 'thrift/protocol/binaryprotocol'
-require 'thrift/transport'
-
 require 'mongrel'
 
 ## Sticks a service on a URL, using mongrel to do the HTTP work
 module Thrift
-  class SimpleMongrelHTTPServer
+  class MongrelHTTPServer < BaseServer
     class Handler < Mongrel::HttpHandler
       def initialize(processor, protocol_factory)
         @processor = processor
diff --git a/lib/rb/lib/thrift/server/nonblockingserver.rb b/lib/rb/lib/thrift/server/nonblocking_server.rb
similarity index 83%
rename from lib/rb/lib/thrift/server/nonblockingserver.rb
rename to lib/rb/lib/thrift/server/nonblocking_server.rb
index 9689b8f..5425f6d 100644
--- a/lib/rb/lib/thrift/server/nonblockingserver.rb
+++ b/lib/rb/lib/thrift/server/nonblocking_server.rb
@@ -17,15 +17,14 @@
 # under the License.
 # 
 
-require 'thrift/server'
 require 'logger'
 require 'thread'
 
 module Thrift
   # this class expects to always use a FramedTransport for reading messages
-  class NonblockingServer < Server
-    def initialize(processor, serverTransport, transportFactory=nil, protocolFactory=nil, num=20, logger = nil)
-      super(processor, serverTransport, transportFactory, protocolFactory)
+  class NonblockingServer < BaseServer
+    def initialize(processor, server_transport, transport_factory=nil, protocol_factory=nil, num=20, logger=nil)
+      super(processor, server_transport, transport_factory, protocol_factory)
       @num_threads = num
       if logger.nil?
         @logger = Logger.new(STDERR)
@@ -39,15 +38,15 @@
 
     def serve
       @logger.info "Starting #{self}"
-      @serverTransport.listen
+      @server_transport.listen
       @io_manager = start_io_manager
 
       begin
         loop do
-          break if @serverTransport.closed?
-          rd, = select([@serverTransport], nil, nil, 0.1)
+          break if @server_transport.closed?
+          rd, = select([@server_transport], nil, nil, 0.1)
           next if rd.nil?
-          socket = @serverTransport.accept
+          socket = @server_transport.accept
           @logger.debug "Accepted socket: #{socket.inspect}"
           @io_manager.add_connection socket
         end
@@ -57,7 +56,7 @@
       @logger.info "#{self} is shutting down, goodbye"
     ensure
       @transport_semaphore.synchronize do
-        @serverTransport.close
+        @server_transport.close
       end
       @io_manager.ensure_closed unless @io_manager.nil?
     end
@@ -72,7 +71,7 @@
       shutdown_proc = lambda do
         @io_manager.shutdown(timeout)
         @transport_semaphore.synchronize do
-          @serverTransport.close # this will break the accept loop
+          @server_transport.close # this will break the accept loop
         end
       end
       if block
@@ -85,7 +84,7 @@
     private
 
     def start_io_manager
-      iom = IOManager.new(@processor, @serverTransport, @transportFactory, @protocolFactory, @num_threads, @logger)
+      iom = IOManager.new(@processor, @server_transport, @transport_factory, @protocol_factory, @num_threads, @logger)
       iom.spawn
       iom
     end
@@ -93,11 +92,11 @@
     class IOManager # :nodoc:
       DEFAULT_BUFFER = 2**20
       
-      def initialize(processor, serverTransport, transportFactory, protocolFactory, num, logger)
+      def initialize(processor, server_transport, transport_factory, protocol_factory, num, logger)
         @processor = processor
-        @serverTransport = serverTransport
-        @transportFactory = transportFactory
-        @protocolFactory = protocolFactory
+        @server_transport = server_transport
+        @transport_factory = transport_factory
+        @protocol_factory = protocol_factory
         @num_threads = num
         @logger = logger
         @connections = []
@@ -177,7 +176,7 @@
       end
 
       def spin_thread
-        Worker.new(@processor, @transportFactory, @protocolFactory, @logger, @worker_queue).spawn
+        Worker.new(@processor, @transport_factory, @protocol_factory, @logger, @worker_queue).spawn
       end
 
       def signal(msg)
@@ -252,10 +251,10 @@
       end
 
       class Worker # :nodoc:
-        def initialize(processor, transportFactory, protocolFactory, logger, queue)
+        def initialize(processor, transport_factory, protocol_factory, logger, queue)
           @processor = processor
-          @transportFactory = transportFactory
-          @protocolFactory = protocolFactory
+          @transport_factory = transport_factory
+          @protocol_factory = protocol_factory
           @logger = logger
           @queue = queue
         end
@@ -279,11 +278,11 @@
             when :frame
               fd, frame = args
               begin
-                otrans = @transportFactory.get_transport(fd)
-                oprot = @protocolFactory.get_protocol(otrans)
-                membuf = MemoryBuffer.new(frame)
-                itrans = @transportFactory.get_transport(membuf)
-                iprot = @protocolFactory.get_protocol(itrans)
+                otrans = @transport_factory.get_transport(fd)
+                oprot = @protocol_factory.get_protocol(otrans)
+                membuf = MemoryBufferTransport.new(frame)
+                itrans = @transport_factory.get_transport(membuf)
+                iprot = @protocol_factory.get_protocol(itrans)
                 @processor.process(iprot, oprot)
               rescue => e
                 @logger.error "#{Thread.current.inspect} raised error: #{e.inspect}\n#{e.backtrace.join("\n")}"
diff --git a/lib/rb/lib/thrift/server/simple_server.rb b/lib/rb/lib/thrift/server/simple_server.rb
new file mode 100644
index 0000000..21e8659
--- /dev/null
+++ b/lib/rb/lib/thrift/server/simple_server.rb
@@ -0,0 +1,43 @@
+# 
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+module Thrift
+  class SimpleServer < BaseServer
+    def serve
+      begin
+        @server_transport.listen
+        loop do
+          client = @server_transport.accept
+          trans = @transport_factory.get_transport(client)
+          prot = @protocol_factory.get_protocol(trans)
+          begin
+            loop do
+              @processor.process(prot, prot)
+            end
+          rescue Thrift::TransportException, Thrift::ProtocolException
+          ensure
+            trans.close
+          end
+        end
+      ensure
+        @server_transport.close
+      end
+    end
+  end
+end
\ No newline at end of file
diff --git a/lib/rb/lib/thrift/server/thread_pool_server.rb b/lib/rb/lib/thrift/server/thread_pool_server.rb
new file mode 100644
index 0000000..8cec805
--- /dev/null
+++ b/lib/rb/lib/thrift/server/thread_pool_server.rb
@@ -0,0 +1,75 @@
+# 
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# 
+
+require 'thread'
+
+module Thrift
+  class ThreadPoolServer < BaseServer
+    def initialize(processor, server_transport, transport_factory=nil, protocol_factory=nil, num=20)
+      super(processor, server_transport, transport_factory, protocol_factory)
+      @thread_q = SizedQueue.new(num)
+      @exception_q = Queue.new
+      @running = false
+    end
+
+    ## exceptions that happen in worker threads will be relayed here and
+    ## must be caught. 'retry' can be used to continue. (threads will
+    ## continue to run while the exception is being handled.)
+    def rescuable_serve
+      Thread.new { serve } unless @running
+      @running = true
+      raise @exception_q.pop
+    end
+
+    ## exceptions that happen in worker threads simply cause that thread
+    ## to die and another to be spawned in its place.
+    def serve
+      @server_transport.listen
+
+      begin
+        loop do
+          @thread_q.push(:token)
+          Thread.new do
+            begin
+              loop do
+                client = @server_transport.accept
+                trans = @transport_factory.get_transport(client)
+                prot = @protocol_factory.get_protocol(trans)
+                begin
+                  loop do
+                    @processor.process(prot, prot)
+                  end
+                rescue Thrift::TransportException, Thrift::ProtocolException => e
+                ensure
+                  trans.close
+                end
+              end
+            rescue => e
+              @exception_q.push(e)
+            ensure
+              @thread_q.pop # thread died!
+            end
+          end
+        end
+      ensure
+        @server_transport.close
+      end
+    end
+  end
+end
\ No newline at end of file
diff --git a/lib/rb/lib/thrift/server/threaded_server.rb b/lib/rb/lib/thrift/server/threaded_server.rb
new file mode 100644
index 0000000..a2c917c
--- /dev/null
+++ b/lib/rb/lib/thrift/server/threaded_server.rb
@@ -0,0 +1,47 @@
+# 
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+require 'thread'
+
+module Thrift
+  class ThreadedServer < BaseServer
+    def serve
+      begin
+        @server_transport.listen
+        loop do
+          client = @server_transport.accept
+          trans = @transport_factory.get_transport(client)
+          prot = @protocol_factory.get_protocol(trans)
+          Thread.new(prot, trans) do |p, t|
+            begin
+              loop do
+                @processor.process(p, p)
+              end
+            rescue Thrift::TransportException, Thrift::ProtocolException
+            ensure
+              t.close
+            end
+          end
+        end
+      ensure
+        @server_transport.close
+      end
+    end
+  end
+end
\ No newline at end of file
diff --git a/lib/rb/lib/thrift/struct.rb b/lib/rb/lib/thrift/struct.rb
index 9789a41..01aae56 100644
--- a/lib/rb/lib/thrift/struct.rb
+++ b/lib/rb/lib/thrift/struct.rb
@@ -17,7 +17,6 @@
 # under the License.
 # 
 
-require 'thrift/types'
 require 'set'
 
 module Thrift
diff --git a/lib/rb/lib/thrift/transport.rb b/lib/rb/lib/thrift/transport.rb
deleted file mode 100644
index 4aa50d0..0000000
--- a/lib/rb/lib/thrift/transport.rb
+++ /dev/null
@@ -1,300 +0,0 @@
-# encoding: ascii-8bit
-# 
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-# 
-#   http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-# 
-
-module Thrift
-  class TransportException < Exception
-    UNKNOWN = 0
-    NOT_OPEN = 1
-    ALREADY_OPEN = 2
-    TIMED_OUT = 3
-    END_OF_FILE = 4
-
-    attr_reader :type
-
-    def initialize(type=UNKNOWN, message=nil)
-      super(message)
-      @type = type
-    end
-  end
-
-  class Transport
-    def open?; end
-    
-    def open; end
-
-    def close; end
-
-    def read(sz)
-      raise NotImplementedError
-    end
-
-    def read_all(size)
-      buf = ''
-    
-      while (buf.length < size)
-        chunk = read(size - buf.length)
-        buf << chunk
-      end
-    
-      buf
-    end
-  
-    def write(buf); end
-    alias_method :<<, :write
-
-    def flush; end
-  end
-
-  class ServerTransport
-    def listen
-      raise NotImplementedError
-    end
-
-    def accept
-      raise NotImplementedError
-    end
-      
-    def close; nil; end
-
-    def closed?
-      raise NotImplementedError
-    end
-  end
-
-  class TransportFactory
-    def get_transport(trans)
-      return trans
-    end
-  end
-
-  class BufferedTransport < Transport
-    DEFAULT_BUFFER = 4096
-    
-    def initialize(transport)
-      @transport = transport
-      @wbuf = ''
-      @rbuf = ''
-      @index = 0
-    end
-
-    def open?
-      return @transport.open?
-    end
-
-    def open
-      @transport.open
-    end
-
-    def close
-      flush
-      @transport.close
-    end
-
-    def read(sz)
-      @index += sz
-      ret = @rbuf.slice(@index - sz, sz) || ''
-
-      if ret.length == 0
-        @rbuf = @transport.read([sz, DEFAULT_BUFFER].max)
-        @index = sz
-        ret = @rbuf.slice(0, sz) || ''
-      end
-
-      ret
-    end
-
-    def write(buf)
-      @wbuf << buf
-    end
-
-    def flush
-      if @wbuf != ''
-        @transport.write(@wbuf)
-        @wbuf = ''
-      end
-      
-      @transport.flush
-    end
-  end
-
-  class BufferedTransportFactory < TransportFactory
-    def get_transport(transport)
-      return BufferedTransport.new(transport)
-    end
-  end
-
-  class FramedTransport < Transport
-    def initialize(transport, read=true, write=true)
-      @transport = transport
-      @rbuf      = ''
-      @wbuf      = ''
-      @read      = read
-      @write     = write
-      @index      = 0
-    end
-
-    def open?
-      @transport.open?
-    end
-
-    def open
-      @transport.open
-    end
-
-    def close
-      @transport.close
-    end
-
-    def read(sz)
-      return @transport.read(sz) unless @read
-
-      return '' if sz <= 0
-
-      read_frame if @index >= @rbuf.length
-
-      @index += sz
-      @rbuf.slice(@index - sz, sz) || ''
-    end
-
-    def write(buf,sz=nil)
-      return @transport.write(buf) unless @write
-
-      @wbuf << (sz ? buf[0...sz] : buf)
-    end
-
-    #
-    # Writes the output buffer to the stream in the format of a 4-byte length
-    # followed by the actual data.
-    #
-    def flush
-      return @transport.flush unless @write
-
-      out = [@wbuf.length].pack('N')
-      out << @wbuf
-      @transport.write(out)
-      @transport.flush
-      @wbuf = ''
-    end
-
-    private
-
-    def read_frame
-      sz = @transport.read_all(4).unpack('N').first
-
-      @index = 0
-      @rbuf = @transport.read_all(sz)
-    end
-  end
-
-  class FramedTransportFactory < TransportFactory
-    def get_transport(transport)
-      return FramedTransport.new(transport)
-    end
-  end
-
-  class MemoryBuffer < Transport
-    GARBAGE_BUFFER_SIZE = 4*(2**10) # 4kB
-
-    # If you pass a string to this, you should #dup that string
-    # unless you want it to be modified by #read and #write
-    #--
-    # this behavior is no longer required. If you wish to change it
-    # go ahead, just make sure the specs pass
-    def initialize(buffer = nil)
-      @buf = buffer || ''
-      @index = 0
-    end
-
-    def open?
-      return true
-    end
-
-    def open
-    end
-
-    def close
-    end
-
-    def peek
-      @index < @buf.size
-    end
-
-    # this method does not use the passed object directly but copies it
-    def reset_buffer(new_buf = '')
-      @buf.replace new_buf
-      @index = 0
-    end
-
-    def available
-      @buf.length - @index
-    end
-
-    def read(len)
-      data = @buf.slice(@index, len)
-      @index += len
-      @index = @buf.size if @index > @buf.size
-      if @index >= GARBAGE_BUFFER_SIZE
-        @buf = @buf.slice(@index..-1)
-        @index = 0
-      end
-      data
-    end
-
-    def write(wbuf)
-      @buf << wbuf
-    end
-
-    def flush
-    end
-
-    def inspect_buffer
-      out = []
-      for idx in 0...(@buf.size)
-        # if idx != 0
-        #   out << " "
-        # end
-        
-        if idx == @index
-          out << ">"
-        end
-        
-        out << @buf[idx].to_s(16)
-      end
-      out.join(" ")
-    end
-  end
-
-  ## Very very simple implementation of wrapping two objects, one with a #read
-  ## method and one with a #write method, into a transport for thrift.
-  ##
-  ## Assumes both objects are open, remain open, don't require flushing, etc.
-  class IOStreamTransport < Transport
-    def initialize(input, output)
-      @input = input
-      @output = output
-    end
-
-    def open?; not @input.closed? or not @output.closed? end
-    def read(sz); @input.read(sz) end
-    def write(buf); @output.write(buf) end
-    def close; @input.close; @output.close end
-    def to_io; @input end # we're assuming this is used in a IO.select for reading
-  end
-end
diff --git a/lib/rb/lib/thrift/transport/base_server_transport.rb b/lib/rb/lib/thrift/transport/base_server_transport.rb
new file mode 100644
index 0000000..68c5af0
--- /dev/null
+++ b/lib/rb/lib/thrift/transport/base_server_transport.rb
@@ -0,0 +1,37 @@
+# encoding: ascii-8bit
+# 
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# 
+
+module Thrift
+  class BaseServerTransport
+    def listen
+      raise NotImplementedError
+    end
+
+    def accept
+      raise NotImplementedError
+    end
+      
+    def close; nil; end
+
+    def closed?
+      raise NotImplementedError
+    end
+  end
+end
\ No newline at end of file
diff --git a/lib/rb/lib/thrift/transport/base_transport.rb b/lib/rb/lib/thrift/transport/base_transport.rb
new file mode 100644
index 0000000..08a71da
--- /dev/null
+++ b/lib/rb/lib/thrift/transport/base_transport.rb
@@ -0,0 +1,70 @@
+# encoding: ascii-8bit
+# 
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# 
+
+module Thrift
+  class TransportException < Exception
+    UNKNOWN = 0
+    NOT_OPEN = 1
+    ALREADY_OPEN = 2
+    TIMED_OUT = 3
+    END_OF_FILE = 4
+
+    attr_reader :type
+
+    def initialize(type=UNKNOWN, message=nil)
+      super(message)
+      @type = type
+    end
+  end
+
+  class BaseTransport
+    def open?; end
+    
+    def open; end
+
+    def close; end
+
+    def read(sz)
+      raise NotImplementedError
+    end
+
+    def read_all(size)
+      buf = ''
+    
+      while (buf.length < size)
+        chunk = read(size - buf.length)
+        buf << chunk
+      end
+    
+      buf
+    end
+  
+    def write(buf); end
+    alias_method :<<, :write
+
+    def flush; end
+  end
+  
+  class BaseTransportFactory
+    def get_transport(trans)
+      return trans
+    end
+  end
+end
\ No newline at end of file
diff --git a/lib/rb/lib/thrift/transport/buffered_transport.rb b/lib/rb/lib/thrift/transport/buffered_transport.rb
new file mode 100644
index 0000000..8dead4e
--- /dev/null
+++ b/lib/rb/lib/thrift/transport/buffered_transport.rb
@@ -0,0 +1,77 @@
+# encoding: ascii-8bit
+# 
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+module Thrift
+  class BufferedTransport < BaseTransport
+    DEFAULT_BUFFER = 4096
+    
+    def initialize(transport)
+      @transport = transport
+      @wbuf = ''
+      @rbuf = ''
+      @index = 0
+    end
+
+    def open?
+      return @transport.open?
+    end
+
+    def open
+      @transport.open
+    end
+
+    def close
+      flush
+      @transport.close
+    end
+
+    def read(sz)
+      @index += sz
+      ret = @rbuf.slice(@index - sz, sz) || ''
+
+      if ret.length == 0
+        @rbuf = @transport.read([sz, DEFAULT_BUFFER].max)
+        @index = sz
+        ret = @rbuf.slice(0, sz) || ''
+      end
+
+      ret
+    end
+
+    def write(buf)
+      @wbuf << buf
+    end
+
+    def flush
+      if @wbuf != ''
+        @transport.write(@wbuf)
+        @wbuf = ''
+      end
+      
+      @transport.flush
+    end
+  end
+
+  class BufferedTransportFactory < BaseTransportFactory
+    def get_transport(transport)
+      return BufferedTransport.new(transport)
+    end
+  end
+end
\ No newline at end of file
diff --git a/lib/rb/lib/thrift/transport/framed_transport.rb b/lib/rb/lib/thrift/transport/framed_transport.rb
new file mode 100644
index 0000000..558af74
--- /dev/null
+++ b/lib/rb/lib/thrift/transport/framed_transport.rb
@@ -0,0 +1,90 @@
+# encoding: ascii-8bit
+# 
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+module Thrift
+  class FramedTransport < BaseTransport
+    def initialize(transport, read=true, write=true)
+      @transport = transport
+      @rbuf      = ''
+      @wbuf      = ''
+      @read      = read
+      @write     = write
+      @index      = 0
+    end
+
+    def open?
+      @transport.open?
+    end
+
+    def open
+      @transport.open
+    end
+
+    def close
+      @transport.close
+    end
+
+    def read(sz)
+      return @transport.read(sz) unless @read
+
+      return '' if sz <= 0
+
+      read_frame if @index >= @rbuf.length
+
+      @index += sz
+      @rbuf.slice(@index - sz, sz) || ''
+    end
+
+    def write(buf,sz=nil)
+      return @transport.write(buf) unless @write
+
+      @wbuf << (sz ? buf[0...sz] : buf)
+    end
+
+    #
+    # Writes the output buffer to the stream in the format of a 4-byte length
+    # followed by the actual data.
+    #
+    def flush
+      return @transport.flush unless @write
+
+      out = [@wbuf.length].pack('N')
+      out << @wbuf
+      @transport.write(out)
+      @transport.flush
+      @wbuf = ''
+    end
+
+    private
+
+    def read_frame
+      sz = @transport.read_all(4).unpack('N').first
+
+      @index = 0
+      @rbuf = @transport.read_all(sz)
+    end
+  end
+
+  class FramedTransportFactory < BaseTransportFactory
+    def get_transport(transport)
+      return FramedTransport.new(transport)
+    end
+  end
+end
\ No newline at end of file
diff --git a/lib/rb/lib/thrift/transport/httpclient.rb b/lib/rb/lib/thrift/transport/http_client_transport.rb
similarity index 93%
rename from lib/rb/lib/thrift/transport/httpclient.rb
rename to lib/rb/lib/thrift/transport/http_client_transport.rb
index 8a62ca2..a190a98 100644
--- a/lib/rb/lib/thrift/transport/httpclient.rb
+++ b/lib/rb/lib/thrift/transport/http_client_transport.rb
@@ -1,3 +1,4 @@
+# encoding: ascii-8bit
 # 
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements. See the NOTICE file
@@ -17,16 +18,13 @@
 # under the License.
 # 
 
-require 'thrift/transport'
-
 require 'net/http'
 require 'net/https'
 require 'uri'
 require 'stringio'
 
-## Very simple HTTP client
 module Thrift
-  class HTTPClient < Transport
+  class HTTPClientTransport < BaseTransport
     def initialize(url)
       @url = URI url
       @outbuf = ""
diff --git a/lib/rb/lib/thrift/transport/io_stream_transport.rb b/lib/rb/lib/thrift/transport/io_stream_transport.rb
new file mode 100644
index 0000000..be348aa
--- /dev/null
+++ b/lib/rb/lib/thrift/transport/io_stream_transport.rb
@@ -0,0 +1,39 @@
+# encoding: ascii-8bit
+# 
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# Very very simple implementation of wrapping two objects, one with a #read
+# method and one with a #write method, into a transport for thrift.
+#
+# Assumes both objects are open, remain open, don't require flushing, etc.
+#
+module Thrift
+  class IOStreamTransport < BaseTransport
+    def initialize(input, output)
+      @input = input
+      @output = output
+    end
+
+    def open?; not @input.closed? or not @output.closed? end
+    def read(sz); @input.read(sz) end
+    def write(buf); @output.write(buf) end
+    def close; @input.close; @output.close end
+    def to_io; @input end # we're assuming this is used in a IO.select for reading
+  end
+end
\ No newline at end of file
diff --git a/lib/rb/lib/thrift/transport/memory_buffer_transport.rb b/lib/rb/lib/thrift/transport/memory_buffer_transport.rb
new file mode 100644
index 0000000..33d732d
--- /dev/null
+++ b/lib/rb/lib/thrift/transport/memory_buffer_transport.rb
@@ -0,0 +1,93 @@
+# encoding: ascii-8bit
+# 
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+module Thrift
+  class MemoryBufferTransport < BaseTransport
+    GARBAGE_BUFFER_SIZE = 4*(2**10) # 4kB
+
+    # If you pass a string to this, you should #dup that string
+    # unless you want it to be modified by #read and #write
+    #--
+    # this behavior is no longer required. If you wish to change it
+    # go ahead, just make sure the specs pass
+    def initialize(buffer = nil)
+      @buf = buffer || ''
+      @index = 0
+    end
+
+    def open?
+      return true
+    end
+
+    def open
+    end
+
+    def close
+    end
+
+    def peek
+      @index < @buf.size
+    end
+
+    # this method does not use the passed object directly but copies it
+    def reset_buffer(new_buf = '')
+      @buf.replace new_buf
+      @index = 0
+    end
+
+    def available
+      @buf.length - @index
+    end
+
+    def read(len)
+      data = @buf.slice(@index, len)
+      @index += len
+      @index = @buf.size if @index > @buf.size
+      if @index >= GARBAGE_BUFFER_SIZE
+        @buf = @buf.slice(@index..-1)
+        @index = 0
+      end
+      data
+    end
+
+    def write(wbuf)
+      @buf << wbuf
+    end
+
+    def flush
+    end
+
+    def inspect_buffer
+      out = []
+      for idx in 0...(@buf.size)
+        # if idx != 0
+        #   out << " "
+        # end
+      
+        if idx == @index
+          out << ">"
+        end
+      
+        out << @buf[idx].to_s(16)
+      end
+      out.join(" ")
+    end
+  end
+end
\ No newline at end of file
diff --git a/lib/rb/lib/thrift/transport/server_socket.rb b/lib/rb/lib/thrift/transport/server_socket.rb
new file mode 100644
index 0000000..7feb9ab
--- /dev/null
+++ b/lib/rb/lib/thrift/transport/server_socket.rb
@@ -0,0 +1,63 @@
+# encoding: ascii-8bit
+# 
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# 
+
+require 'socket'
+
+module Thrift
+  class ServerSocket < BaseServerTransport
+    # call-seq: initialize(host = nil, port)
+    def initialize(host_or_port, port = nil)
+      if port
+        @host = host_or_port
+        @port = port
+      else
+        @host = nil
+        @port = host_or_port
+      end
+      @handle = nil
+    end
+
+    attr_reader :handle
+
+    def listen
+      @handle = TCPServer.new(@host, @port)
+    end
+
+    def accept
+      unless @handle.nil?
+        sock = @handle.accept
+        trans = Socket.new
+        trans.handle = sock
+        trans
+      end
+    end
+
+    def close
+     @handle.close unless @handle.nil? or @handle.closed?
+     @handle = nil
+    end
+
+    def closed?
+      @handle.nil? or @handle.closed?
+    end
+
+    alias to_io handle
+  end
+end
\ No newline at end of file
diff --git a/lib/rb/lib/thrift/transport/socket.rb b/lib/rb/lib/thrift/transport/socket.rb
index 49247ce..06c937e 100644
--- a/lib/rb/lib/thrift/transport/socket.rb
+++ b/lib/rb/lib/thrift/transport/socket.rb
@@ -1,3 +1,4 @@
+# encoding: ascii-8bit
 # 
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements. See the NOTICE file
@@ -16,11 +17,11 @@
 # specific language governing permissions and limitations
 # under the License.
 # 
-require 'thrift/transport'
+
 require 'socket'
 
 module Thrift
-  class Socket < Transport
+  class Socket < BaseTransport
     def initialize(host='localhost', port=9090, timeout=nil)
       @host = host
       @port = port
@@ -132,44 +133,4 @@
       @handle
     end
   end
-
-  class ServerSocket < ServerTransport
-    # call-seq: initialize(host = nil, port)
-    def initialize(host_or_port, port = nil)
-      if port
-        @host = host_or_port
-        @port = port
-      else
-        @host = nil
-        @port = host_or_port
-      end
-      @handle = nil
-    end
-
-    attr_reader :handle
-
-    def listen
-      @handle = TCPServer.new(@host, @port)
-    end
-
-    def accept
-      unless @handle.nil?
-        sock = @handle.accept
-        trans = Socket.new
-        trans.handle = sock
-        trans
-      end
-    end
-
-    def close
-     @handle.close unless @handle.nil? or @handle.closed?
-     @handle = nil
-    end
-
-    def closed?
-      @handle.nil? or @handle.closed?
-    end
-
-    alias to_io handle
-  end
-end
+end
\ No newline at end of file
diff --git a/lib/rb/lib/thrift/transport/unixsocket.rb b/lib/rb/lib/thrift/transport/unix_server_socket.rb
similarity index 75%
rename from lib/rb/lib/thrift/transport/unixsocket.rb
rename to lib/rb/lib/thrift/transport/unix_server_socket.rb
index 60931b9..a135d25 100644
--- a/lib/rb/lib/thrift/transport/unixsocket.rb
+++ b/lib/rb/lib/thrift/transport/unix_server_socket.rb
@@ -1,3 +1,4 @@
+# encoding: ascii-8bit
 # 
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements. See the NOTICE file
@@ -17,28 +18,10 @@
 # under the License.
 # 
 
-require 'thrift/transport'
 require 'socket'
 
 module Thrift
-  class UNIXSocket < Socket
-    def initialize(path, timeout=nil)
-      @path = path
-      @timeout = timeout
-      @desc = @path # for read()'s error
-      @handle = nil
-    end
-
-    def open
-      begin
-        @handle = ::UNIXSocket.new(@path)
-      rescue StandardError
-        raise TransportException.new(TransportException::NOT_OPEN, "Could not open UNIX socket at #{@path}")
-      end
-    end
-  end
-
-  class UNIXServerSocket < ServerTransport
+  class UNIXServerSocket < BaseServerTransport
     def initialize(path)
       @path = path
       @handle = nil
@@ -74,4 +57,4 @@
 
     alias to_io handle
   end
-end
+end
\ No newline at end of file
diff --git a/lib/rb/lib/thrift/transport/unixsocket.rb b/lib/rb/lib/thrift/transport/unix_socket.rb
similarity index 63%
copy from lib/rb/lib/thrift/transport/unixsocket.rb
copy to lib/rb/lib/thrift/transport/unix_socket.rb
index 60931b9..8f692e4 100644
--- a/lib/rb/lib/thrift/transport/unixsocket.rb
+++ b/lib/rb/lib/thrift/transport/unix_socket.rb
@@ -1,3 +1,4 @@
+# encoding: ascii-8bit
 # 
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements. See the NOTICE file
@@ -17,7 +18,6 @@
 # under the License.
 # 
 
-require 'thrift/transport'
 require 'socket'
 
 module Thrift
@@ -37,41 +37,4 @@
       end
     end
   end
-
-  class UNIXServerSocket < ServerTransport
-    def initialize(path)
-      @path = path
-      @handle = nil
-    end
-
-    attr_accessor :handle
-
-    def listen
-      @handle = ::UNIXServer.new(@path)
-    end
-
-    def accept
-      unless @handle.nil?
-        sock = @handle.accept
-        trans = UNIXSocket.new(nil)
-        trans.handle = sock
-        trans
-      end
-    end
-
-    def close
-      if @handle
-        @handle.close unless @handle.closed?
-        @handle = nil
-        # UNIXServer doesn't delete the socket file, so we have to do it ourselves
-        File.delete(@path)
-      end
-    end
-
-    def closed?
-      @handle.nil? or @handle.closed?
-    end
-
-    alias to_io handle
-  end
-end
+end
\ No newline at end of file
diff --git a/lib/rb/script/proto_benchmark.rb b/lib/rb/script/proto_benchmark.rb
index 09adf81..4ff6a55 100644
--- a/lib/rb/script/proto_benchmark.rb
+++ b/lib/rb/script/proto_benchmark.rb
@@ -19,7 +19,7 @@
 
 require File.dirname(__FILE__) + "/../spec/spec_helper.rb"
 require "lib/thrift/serializer"
-require "lib/thrift/protocol/binaryprotocolaccelerated"
+require "lib/thrift/protocol/binary_protocol_accelerated"
 
 require "benchmark"
 # require "ruby-prof"
@@ -83,7 +83,7 @@
 
 
   # f = File.new("/tmp/testfile", "w")
-  # proto = Thrift::BinaryProtocolAccelerated.new(Thrift::IOStreamTransport.new(Thrift::MemoryBuffer.new, f))
+  # proto = Thrift::BinaryProtocolAccelerated.new(Thrift::IOStreamTransport.new(Thrift::MemoryBufferTransport.new, f))
   # reporter.report("accelerated binary protocol, write (to disk)") do
   #   HOW_MANY.times do
   #     obj.write(proto)
@@ -93,7 +93,7 @@
   # f.close
   #   
   # f = File.new("/tmp/testfile", "r")
-  # proto = Thrift::BinaryProtocolAccelerated.new(Thrift::IOStreamTransport.new(f, Thrift::MemoryBuffer.new))
+  # proto = Thrift::BinaryProtocolAccelerated.new(Thrift::IOStreamTransport.new(f, Thrift::MemoryBufferTransport.new))
   # reporter.report("accelerated binary protocol, read (from disk)") do
   #   HOW_MANY.times do
   #     obj.read(proto)
@@ -103,7 +103,7 @@
   # 
   # f = File.new("/tmp/testfile", "w")
   # reporter.report("compact protocol, write (to disk)") do
-  #   proto = Thrift::CompactProtocol.new(Thrift::IOStreamTransport.new(Thrift::MemoryBuffer.new, f))
+  #   proto = Thrift::CompactProtocol.new(Thrift::IOStreamTransport.new(Thrift::MemoryBufferTransport.new, f))
   #   HOW_MANY.times do
   #     obj.write(proto)
   #   end
@@ -113,7 +113,7 @@
   # 
   # f = File.new("/tmp/testfile", "r")
   # reporter.report("compact protocol, read (from disk)") do
-  #   proto = Thrift::CompactProtocol.new(Thrift::IOStreamTransport.new(f, Thrift::MemoryBuffer.new))
+  #   proto = Thrift::CompactProtocol.new(Thrift::IOStreamTransport.new(f, Thrift::MemoryBufferTransport.new))
   #   HOW_MANY.times do
   #     obj.read(proto)
   #   end
diff --git a/lib/rb/script/read_struct.rb b/lib/rb/script/read_struct.rb
index fd2dfbe..831fcec 100644
--- a/lib/rb/script/read_struct.rb
+++ b/lib/rb/script/read_struct.rb
@@ -18,7 +18,6 @@
 #
 
 require "spec/spec_helper"
-require "lib/thrift/serializer"
 
 path, factory_class = ARGV
 
diff --git a/lib/rb/script/write_struct.rb b/lib/rb/script/write_struct.rb
index b4bdec1..da14219 100644
--- a/lib/rb/script/write_struct.rb
+++ b/lib/rb/script/write_struct.rb
@@ -18,7 +18,6 @@
 #
 
 require "spec/spec_helper"
-require "lib/thrift/serializer"
 
 path, factory_class = ARGV
 
diff --git a/lib/rb/spec/protocol_spec.rb b/lib/rb/spec/base_protocol_spec.rb
similarity index 95%
rename from lib/rb/spec/protocol_spec.rb
rename to lib/rb/spec/base_protocol_spec.rb
index 57b64ab..efb16d8 100644
--- a/lib/rb/spec/protocol_spec.rb
+++ b/lib/rb/spec/base_protocol_spec.rb
@@ -19,15 +19,15 @@
 
 require File.dirname(__FILE__) + '/spec_helper'
 
-class ThriftProtocolSpec < Spec::ExampleGroup
+class ThriftBaseProtocolSpec < Spec::ExampleGroup
   include Thrift
 
   before(:each) do
     @trans = mock("MockTransport")
-    @prot = Protocol.new(@trans)
+    @prot = BaseProtocol.new(@trans)
   end
 
-  describe Protocol do
+  describe BaseProtocol do
     # most of the methods are stubs, so we can ignore them
 
     it "should make trans accessible" do
@@ -151,10 +151,10 @@
     end
   end
 
-  describe ProtocolFactory do
+  describe BaseProtocolFactory do
     it "should raise NotImplementedError" do
       # returning nil since Protocol is just an abstract class
-      lambda {ProtocolFactory.new.get_protocol(mock("MockTransport"))}.should raise_error(NotImplementedError)
+      lambda {BaseProtocolFactory.new.get_protocol(mock("MockTransport"))}.should raise_error(NotImplementedError)
     end
   end
 end
diff --git a/lib/rb/spec/transport_spec.rb b/lib/rb/spec/base_transport_spec.rb
similarity index 94%
rename from lib/rb/spec/transport_spec.rb
rename to lib/rb/spec/base_transport_spec.rb
index 709a93e..7189775 100644
--- a/lib/rb/spec/transport_spec.rb
+++ b/lib/rb/spec/base_transport_spec.rb
@@ -19,7 +19,7 @@
 
 require File.dirname(__FILE__) + '/spec_helper'
 
-class ThriftTransportSpec < Spec::ExampleGroup
+class ThriftBaseTransportSpec < Spec::ExampleGroup
   include Thrift
 
   describe TransportException do
@@ -30,9 +30,9 @@
     end
   end
 
-  describe Transport do
+  describe BaseTransport do
     it "should read the specified size" do
-      transport = Transport.new
+      transport = BaseTransport.new
       transport.should_receive(:read).with(40).ordered.and_return("10 letters")
       transport.should_receive(:read).with(30).ordered.and_return("fifteen letters")
       transport.should_receive(:read).with(15).ordered.and_return("more characters")
@@ -42,27 +42,27 @@
     it "should stub out the rest of the methods" do
       # can't test for stubbiness, so just make sure they're defined
       [:open?, :open, :close, :read, :write, :flush].each do |sym|
-        Transport.method_defined?(sym).should be_true
+        BaseTransport.method_defined?(sym).should be_true
       end
     end
 
     it "should alias << to write" do
-      Transport.instance_method(:<<).should == Transport.instance_method(:write)
+      BaseTransport.instance_method(:<<).should == BaseTransport.instance_method(:write)
     end
   end
 
-  describe ServerTransport do
+  describe BaseServerTransport do
     it "should stub out its methods" do
       [:listen, :accept, :close].each do |sym|
-        ServerTransport.method_defined?(sym).should be_true
+        BaseServerTransport.method_defined?(sym).should be_true
       end
     end
   end
 
-  describe TransportFactory do
+  describe BaseTransportFactory do
     it "should return the transport it's given" do
       transport = mock("Transport")
-      TransportFactory.new.get_transport(transport).should eql(transport)
+      BaseTransportFactory.new.get_transport(transport).should eql(transport)
     end
   end
 
@@ -250,14 +250,14 @@
     end
   end
 
-  describe MemoryBuffer do
+  describe MemoryBufferTransport do
     before(:each) do
-      @buffer = MemoryBuffer.new
+      @buffer = MemoryBufferTransport.new
     end
 
     it "should accept a buffer on input and use it directly" do
       s = "this is a test"
-      @buffer = MemoryBuffer.new(s)
+      @buffer = MemoryBufferTransport.new(s)
       @buffer.read(4).should == "this"
       s.slice!(-4..-1)
       @buffer.read(@buffer.available).should == " is a "
diff --git a/lib/rb/spec/binaryprotocolaccelerated_spec.rb b/lib/rb/spec/binary_protocol_accelerated_spec.rb
similarity index 92%
rename from lib/rb/spec/binaryprotocolaccelerated_spec.rb
rename to lib/rb/spec/binary_protocol_accelerated_spec.rb
index f8f9b90..a834f7c 100644
--- a/lib/rb/spec/binaryprotocolaccelerated_spec.rb
+++ b/lib/rb/spec/binary_protocol_accelerated_spec.rb
@@ -18,8 +18,7 @@
 #
 
 require File.dirname(__FILE__) + '/spec_helper'
-require 'thrift/protocol/binaryprotocolaccelerated'
-require File.dirname(__FILE__) + '/binaryprotocol_spec_shared'
+require File.dirname(__FILE__) + '/binary_protocol_spec_shared'
 require File.dirname(__FILE__) + '/gen-rb/ThriftSpec_types'
 
 class ThriftBinaryProtocolAcceleratedSpec < Spec::ExampleGroup
diff --git a/lib/rb/spec/binaryprotocol_spec.rb b/lib/rb/spec/binary_protocol_spec.rb
similarity index 95%
rename from lib/rb/spec/binaryprotocol_spec.rb
rename to lib/rb/spec/binary_protocol_spec.rb
index 3a0d691..0abccb8 100644
--- a/lib/rb/spec/binaryprotocol_spec.rb
+++ b/lib/rb/spec/binary_protocol_spec.rb
@@ -18,8 +18,7 @@
 #
 
 require File.dirname(__FILE__) + '/spec_helper'
-require 'thrift/protocol/binaryprotocol'
-require File.dirname(__FILE__) + '/binaryprotocol_spec_shared'
+require File.dirname(__FILE__) + '/binary_protocol_spec_shared'
 
 class ThriftBinaryProtocolSpec < Spec::ExampleGroup
   include Thrift
diff --git a/lib/rb/spec/binaryprotocol_spec_shared.rb b/lib/rb/spec/binary_protocol_spec_shared.rb
similarity index 94%
rename from lib/rb/spec/binaryprotocol_spec_shared.rb
rename to lib/rb/spec/binary_protocol_spec_shared.rb
index 18ea8e8..c6608e0 100644
--- a/lib/rb/spec/binaryprotocol_spec_shared.rb
+++ b/lib/rb/spec/binary_protocol_spec_shared.rb
@@ -21,7 +21,7 @@
 
 shared_examples_for 'a binary protocol' do
   before(:each) do
-    @trans = Thrift::MemoryBuffer.new
+    @trans = Thrift::MemoryBufferTransport.new
     @prot = protocol_class.new(@trans)
   end
 
@@ -203,17 +203,18 @@
     lambda { @prot.write_string(nil) }.should raise_error
   end
   
-  it "should read message header correctly" do
-    @trans.write([protocol_class.const_get(:VERSION_1) | Thrift::MessageTypes::CALL, "testMessage".size, "testMessage", 17].pack("NNa11N"))
-    @prot.read_message_begin().should == ['testMessage', Thrift::MessageTypes::CALL, 17]
+  it "should write the message header without version when writes are not strict" do
+    @prot = protocol_class.new(@trans, true, false) # no strict write
+    @prot.write_message_begin('testMessage', Thrift::MessageTypes::CALL, 17)
+    @trans.read(1000).should == "\000\000\000\vtestMessage\001\000\000\000\021"
+  end
+    
+  it "should write the message header with a version when writes are strict" do
+    @prot = protocol_class.new(@trans) # strict write
+    @prot.write_message_begin('testMessage', Thrift::MessageTypes::CALL, 17)
+    @trans.read(1000).should == "\200\001\000\001\000\000\000\vtestMessage\000\000\000\021"
   end
   
-  it "should read the message header without version when writes are not strict" do
-    @prot = protocol_class.new(@trans, false, true) # no strict write
-    @trans.write("\000\000\000\vtestMessage\001\000\000\000\021")
-    @prot.read_message_begin().should == ['testMessage', Thrift::MessageTypes::CALL, 17]
-  end
-
   # message footer is a noop
   
   it "should read a field header" do
@@ -345,7 +346,7 @@
     processor = Srv::Processor.new(SrvHandler.new)
 
     client = Srv::Client.new(clientproto, clientproto)
-    
+
     # first block
     firstblock.call(client)
     
@@ -371,5 +372,4 @@
       Fixtures::COMPACT_PROTOCOL_TEST_STRUCT
     end
   end
-
 end
diff --git a/lib/rb/spec/compact_protocol_spec.rb b/lib/rb/spec/compact_protocol_spec.rb
index 9071fb1..78b1a2a 100644
--- a/lib/rb/spec/compact_protocol_spec.rb
+++ b/lib/rb/spec/compact_protocol_spec.rb
@@ -18,7 +18,6 @@
 #
 
 require File.dirname(__FILE__) + '/spec_helper'
-require "thrift/protocol/compact_protocol"
 
 describe Thrift::CompactProtocol do
   TESTS = {
@@ -36,7 +35,7 @@
     TESTS.each_pair do |primitive_type, test_values|
       test_values.each do |value|
         # puts "testing #{value}" if primitive_type == :i64
-        trans = Thrift::MemoryBuffer.new
+        trans = Thrift::MemoryBufferTransport.new
         proto = Thrift::CompactProtocol.new(trans)
         
         proto.send(writer(primitive_type), value)
@@ -53,7 +52,7 @@
       thrift_type = Thrift::Types.const_get(final_primitive_type.to_s.upcase)
       # puts primitive_type
       test_values.each do |value|
-        trans = Thrift::MemoryBuffer.new
+        trans = Thrift::MemoryBufferTransport.new
         proto = Thrift::CompactProtocol.new(trans)
 
         proto.write_field_begin(nil, thrift_type, 15)
@@ -72,7 +71,7 @@
   end
 
   it "should encode and decode a monster struct correctly" do
-    trans = Thrift::MemoryBuffer.new
+    trans = Thrift::MemoryBufferTransport.new
     proto = Thrift::CompactProtocol.new(trans)
 
     struct = CompactProtoTestStruct.new
@@ -96,10 +95,10 @@
   end
 
   it "should make method calls correctly" do
-    client_out_trans = Thrift::MemoryBuffer.new
+    client_out_trans = Thrift::MemoryBufferTransport.new
     client_out_proto = Thrift::CompactProtocol.new(client_out_trans)
     
-    client_in_trans = Thrift::MemoryBuffer.new
+    client_in_trans = Thrift::MemoryBufferTransport.new
     client_in_proto = Thrift::CompactProtocol.new(client_in_trans)
     
     processor = Srv::Processor.new(JankyHandler.new)
diff --git a/lib/rb/spec/httpclient_spec.rb b/lib/rb/spec/http_client_spec.rb
similarity index 89%
rename from lib/rb/spec/httpclient_spec.rb
rename to lib/rb/spec/http_client_spec.rb
index d48073f..94526de 100644
--- a/lib/rb/spec/httpclient_spec.rb
+++ b/lib/rb/spec/http_client_spec.rb
@@ -18,14 +18,13 @@
 #
 
 require File.dirname(__FILE__) + '/spec_helper'
-require 'thrift/transport/httpclient'
 
-class ThriftHTTPClientSpec < Spec::ExampleGroup
+class ThriftHTTPClientTransportSpec < Spec::ExampleGroup
   include Thrift
 
-  describe HTTPClient do
+  describe HTTPClientTransport do
     before(:each) do
-      @client = HTTPClient.new("http://my.domain.com/path/to/service")
+      @client = HTTPClientTransport.new("http://my.domain.com/path/to/service")
     end
 
     it "should always be open" do
diff --git a/lib/rb/spec/httpserver_spec.rb b/lib/rb/spec/mongrel_http_server_spec.rb
similarity index 92%
rename from lib/rb/spec/httpserver_spec.rb
rename to lib/rb/spec/mongrel_http_server_spec.rb
index e03f1c1..c994491 100644
--- a/lib/rb/spec/httpserver_spec.rb
+++ b/lib/rb/spec/mongrel_http_server_spec.rb
@@ -18,14 +18,14 @@
 #
 
 require File.dirname(__FILE__) + '/spec_helper'
-require 'thrift/server/httpserver'
+require 'thrift/server/mongrel_http_server'
 
 class ThriftHTTPServerSpec < Spec::ExampleGroup
   include Thrift
 
-  Handler = SimpleMongrelHTTPServer::Handler
+  Handler = MongrelHTTPServer::Handler
 
-  describe SimpleMongrelHTTPServer do
+  describe MongrelHTTPServer do
     it "should have appropriate defaults" do
       mock_factory = mock("BinaryProtocolFactory")
       mock_proc = mock("Processor")
@@ -37,7 +37,7 @@
           mock.should_receive(:register).with("/", handler)
         end
       end
-      SimpleMongrelHTTPServer.new(mock_proc)
+      MongrelHTTPServer.new(mock_proc)
     end
 
     it "should understand :ip, :port, :path, and :protocol_factory" do
@@ -50,7 +50,7 @@
           mock.should_receive(:register).with("/foo", handler)
         end
       end
-      SimpleMongrelHTTPServer.new(mock_proc, :ip => "1.2.3.4", :port => 1234, :path => "foo",
+      MongrelHTTPServer.new(mock_proc, :ip => "1.2.3.4", :port => 1234, :path => "foo",
                                              :protocol_factory => mock_factory)
     end
 
@@ -67,11 +67,11 @@
           end
         end
       end
-      SimpleMongrelHTTPServer.new(nil).serve
+      MongrelHTTPServer.new(nil).serve
     end
   end
 
-  describe SimpleMongrelHTTPServer::Handler do
+  describe MongrelHTTPServer::Handler do
     before(:each) do
       @processor = mock("Processor")
       @factory = mock("ProtocolFactory")
diff --git a/lib/rb/spec/nonblockingserver_spec.rb b/lib/rb/spec/nonblocking_server_spec.rb
similarity index 97%
rename from lib/rb/spec/nonblockingserver_spec.rb
rename to lib/rb/spec/nonblocking_server_spec.rb
index 02666db..22c9280 100644
--- a/lib/rb/spec/nonblockingserver_spec.rb
+++ b/lib/rb/spec/nonblocking_server_spec.rb
@@ -18,7 +18,6 @@
 #
 
 require File.dirname(__FILE__) + '/spec_helper'
-require 'thrift/server/nonblockingserver'
 require File.dirname(__FILE__) + '/gen-rb/NonblockingService'
 
 class ThriftNonblockingServerSpec < Spec::ExampleGroup
@@ -57,7 +56,7 @@
     end
   end
 
-  class SpecTransport < Transport
+  class SpecTransport < BaseTransport
     def initialize(transport, queue)
       @transport = transport
       @queue = queue
@@ -110,10 +109,10 @@
       processor = NonblockingService::Processor.new(handler)
       queue = Queue.new
       @transport = SpecServerSocket.new('localhost', @port, queue)
-      transportFactory = FramedTransportFactory.new
+      transport_factory = FramedTransportFactory.new
       logger = Logger.new(STDERR)
       logger.level = Logger::WARN
-      @server = NonblockingServer.new(processor, @transport, transportFactory, nil, 5, logger)
+      @server = NonblockingServer.new(processor, @transport, transport_factory, nil, 5, logger)
       handler.server = @server
       @server_thread = Thread.new(Thread.current) do |master_thread|
         begin
diff --git a/lib/rb/spec/serializer_spec.rb b/lib/rb/spec/serializer_spec.rb
index 3411c53..db52133 100644
--- a/lib/rb/spec/serializer_spec.rb
+++ b/lib/rb/spec/serializer_spec.rb
@@ -18,7 +18,6 @@
 #
 
 require File.dirname(__FILE__) + '/spec_helper'
-require 'thrift/serializer'
 require File.dirname(__FILE__) + '/gen-rb/ThriftSpec_types'
 
 class ThriftSerializerSpec < Spec::ExampleGroup
@@ -33,16 +32,16 @@
     end
 
     it "should serialize structs to the given protocol" do
-      protocol = Protocol.new(mock("transport"))
+      protocol = BaseProtocol.new(mock("transport"))
       protocol.should_receive(:write_struct_begin).with("SpecNamespace::Hello")
       protocol.should_receive(:write_field_begin).with("greeting", Types::STRING, 1)
       protocol.should_receive(:write_string).with("Good day")
       protocol.should_receive(:write_field_end)
       protocol.should_receive(:write_field_stop)
       protocol.should_receive(:write_struct_end)
-      protocolFactory = mock("ProtocolFactory")
-      protocolFactory.stub!(:get_protocol).and_return(protocol)
-      serializer = Serializer.new(protocolFactory)
+      protocol_factory = mock("ProtocolFactory")
+      protocol_factory.stub!(:get_protocol).and_return(protocol)
+      serializer = Serializer.new(protocol_factory)
       serializer.serialize(Hello.new(:greeting => "Good day"))
     end
   end
@@ -55,16 +54,16 @@
     end
 
     it "should deserialize structs from the given protocol" do
-      protocol = Protocol.new(mock("transport"))
+      protocol = BaseProtocol.new(mock("transport"))
       protocol.should_receive(:read_struct_begin).and_return("SpecNamespace::Hello")
       protocol.should_receive(:read_field_begin).and_return(["greeting", Types::STRING, 1],
                                                             [nil, Types::STOP, 0])
       protocol.should_receive(:read_string).and_return("Good day")
       protocol.should_receive(:read_field_end)
       protocol.should_receive(:read_struct_end)
-      protocolFactory = mock("ProtocolFactory")
-      protocolFactory.stub!(:get_protocol).and_return(protocol)
-      deserializer = Deserializer.new(protocolFactory)
+      protocol_factory = mock("ProtocolFactory")
+      protocol_factory.stub!(:get_protocol).and_return(protocol)
+      deserializer = Deserializer.new(protocol_factory)
       deserializer.deserialize(Hello.new, "").should == Hello.new(:greeting => "Good day")
     end
   end
diff --git a/lib/rb/spec/server_socket_spec.rb b/lib/rb/spec/server_socket_spec.rb
new file mode 100644
index 0000000..fce5013
--- /dev/null
+++ b/lib/rb/spec/server_socket_spec.rb
@@ -0,0 +1,80 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+require File.dirname(__FILE__) + '/spec_helper'
+require File.dirname(__FILE__) + "/socket_spec_shared"
+
+class ThriftServerSocketSpec < Spec::ExampleGroup
+  include Thrift
+
+  describe ServerSocket do
+    before(:each) do
+      @socket = ServerSocket.new(1234)
+    end
+
+    it "should create a handle when calling listen" do
+      TCPServer.should_receive(:new).with(nil, 1234)
+      @socket.listen
+    end
+
+    it "should accept an optional host argument" do
+      @socket = ServerSocket.new('localhost', 1234)
+      TCPServer.should_receive(:new).with('localhost', 1234)
+      @socket.listen
+    end
+
+    it "should create a Thrift::Socket to wrap accepted sockets" do
+      handle = mock("TCPServer")
+      TCPServer.should_receive(:new).with(nil, 1234).and_return(handle)
+      @socket.listen
+      sock = mock("sock")
+      handle.should_receive(:accept).and_return(sock)
+      trans = mock("Socket")
+     Socket.should_receive(:new).and_return(trans)
+      trans.should_receive(:handle=).with(sock)
+      @socket.accept.should == trans
+    end
+
+    it "should close the handle when closed" do
+      handle = mock("TCPServer", :closed? => false)
+      TCPServer.should_receive(:new).with(nil, 1234).and_return(handle)
+      @socket.listen
+      handle.should_receive(:close)
+      @socket.close
+    end
+
+    it "should return nil when accepting if there is no handle" do
+      @socket.accept.should be_nil
+    end
+
+    it "should return true for closed? when appropriate" do
+      handle = mock("TCPServer", :closed? => false)
+      TCPServer.stub!(:new).and_return(handle)
+      @socket.listen
+      @socket.should_not be_closed
+      handle.stub!(:close)
+      @socket.close
+      @socket.should be_closed
+      @socket.listen
+      @socket.should_not be_closed
+      handle.stub!(:closed?).and_return(true)
+      @socket.should be_closed
+    end
+  end
+end
diff --git a/lib/rb/spec/server_spec.rb b/lib/rb/spec/server_spec.rb
index 7c6ebd4..ffe9bff 100644
--- a/lib/rb/spec/server_spec.rb
+++ b/lib/rb/spec/server_spec.rb
@@ -22,11 +22,11 @@
 class ThriftServerSpec < Spec::ExampleGroup
   include Thrift
 
-  describe Server do
-    it "should default to TransportFactory and BinaryProtocolFactory when not specified" do
-      server = Server.new(mock("Processor"), mock("ServerTransport"))
-      server.instance_variable_get(:'@transportFactory').should be_an_instance_of(TransportFactory)
-      server.instance_variable_get(:'@protocolFactory').should be_an_instance_of(BinaryProtocolFactory)
+  describe BaseServer do
+    it "should default to BaseTransportFactory and BinaryProtocolFactory when not specified" do
+      server = BaseServer.new(mock("Processor"), mock("BaseServerTransport"))
+      server.instance_variable_get(:'@transport_factory').should be_an_instance_of(BaseTransportFactory)
+      server.instance_variable_get(:'@protocol_factory').should be_an_instance_of(BinaryProtocolFactory)
     end
 
     # serve is a noop, so can't test that
@@ -36,8 +36,8 @@
     before(:each) do
       @processor = mock("Processor")
       @serverTrans = mock("ServerTransport")
-      @trans = mock("Transport")
-      @prot = mock("Protocol")
+      @trans = mock("BaseTransport")
+      @prot = mock("BaseProtocol")
       @client = mock("Client")
       @server = server_type.new(@processor, @serverTrans, @trans, @prot)
     end
diff --git a/lib/rb/spec/socket_spec.rb b/lib/rb/spec/socket_spec.rb
index 30b4648..dd8b0f9 100644
--- a/lib/rb/spec/socket_spec.rb
+++ b/lib/rb/spec/socket_spec.rb
@@ -58,59 +58,4 @@
       Socket.new('localhost', 8080, 5).timeout.should == 5
     end
   end
-
-  describe ServerSocket do
-    before(:each) do
-      @socket = ServerSocket.new(1234)
-    end
-
-    it "should create a handle when calling listen" do
-      TCPServer.should_receive(:new).with(nil, 1234)
-      @socket.listen
-    end
-
-    it "should accept an optional host argument" do
-      @socket = ServerSocket.new('localhost', 1234)
-      TCPServer.should_receive(:new).with('localhost', 1234)
-      @socket.listen
-    end
-
-    it "should create a Thrift::Socket to wrap accepted sockets" do
-      handle = mock("TCPServer")
-      TCPServer.should_receive(:new).with(nil, 1234).and_return(handle)
-      @socket.listen
-      sock = mock("sock")
-      handle.should_receive(:accept).and_return(sock)
-      trans = mock("Socket")
-      Socket.should_receive(:new).and_return(trans)
-      trans.should_receive(:handle=).with(sock)
-      @socket.accept.should == trans
-    end
-
-    it "should close the handle when closed" do
-      handle = mock("TCPServer", :closed? => false)
-      TCPServer.should_receive(:new).with(nil, 1234).and_return(handle)
-      @socket.listen
-      handle.should_receive(:close)
-      @socket.close
-    end
-
-    it "should return nil when accepting if there is no handle" do
-      @socket.accept.should be_nil
-    end
-
-    it "should return true for closed? when appropriate" do
-      handle = mock("TCPServer", :closed? => false)
-      TCPServer.stub!(:new).and_return(handle)
-      @socket.listen
-      @socket.should_not be_closed
-      handle.stub!(:close)
-      @socket.close
-      @socket.should be_closed
-      @socket.listen
-      @socket.should_not be_closed
-      handle.stub!(:closed?).and_return(true)
-      @socket.should be_closed
-    end
-  end
 end
diff --git a/lib/rb/spec/spec_helper.rb b/lib/rb/spec/spec_helper.rb
index d099491..41bf631 100644
--- a/lib/rb/spec/spec_helper.rb
+++ b/lib/rb/spec/spec_helper.rb
@@ -24,7 +24,7 @@
 
 $:.unshift File.join(File.dirname(__FILE__), *%w[.. ext])
 
-# pretend we already loaded fastthread, otherwise the nonblockingserver_spec
+# pretend we already loaded fastthread, otherwise the nonblocking_server_spec
 # will get screwed up
 # $" << 'fastthread.bundle'
 
diff --git a/lib/rb/spec/struct_spec.rb b/lib/rb/spec/struct_spec.rb
index 69826e7..bfcf0ea 100644
--- a/lib/rb/spec/struct_spec.rb
+++ b/lib/rb/spec/struct_spec.rb
@@ -20,8 +20,6 @@
 require File.dirname(__FILE__) + '/spec_helper'
 require File.dirname(__FILE__) + '/gen-rb/ThriftSpec_types'
 
-# require "binaryprotocolaccelerated"
-
 class ThriftStructSpec < Spec::ExampleGroup
   include Thrift
   include SpecNamespace
@@ -67,7 +65,7 @@
 
     it "should read itself off the wire" do
       struct = Foo.new
-      prot = Protocol.new(mock("transport"))
+      prot = BaseProtocol.new(mock("transport"))
       prot.should_receive(:read_struct_begin).twice
       prot.should_receive(:read_struct_end).twice
       prot.should_receive(:read_field_begin).and_return(
@@ -113,7 +111,7 @@
 
     it "should skip unexpected fields in structs and use default values" do
       struct = Foo.new
-      prot = Protocol.new(mock("transport"))
+      prot = BaseProtocol.new(mock("transport"))
       prot.should_receive(:read_struct_begin)
       prot.should_receive(:read_struct_end)
       prot.should_receive(:read_field_begin).and_return(
@@ -143,7 +141,7 @@
     end
 
     it "should write itself to the wire" do
-      prot = Protocol.new(mock("transport")) #mock("Protocol")
+      prot = BaseProtocol.new(mock("transport")) #mock("Protocol")
       prot.should_receive(:write_struct_begin).with("SpecNamespace::Foo")
       prot.should_receive(:write_struct_begin).with("SpecNamespace::Hello")
       prot.should_receive(:write_struct_end).twice
@@ -218,7 +216,7 @@
         e.message.should == "something happened"
         e.code.should == 1
         # ensure it gets serialized properly, this is the really important part
-        prot = Protocol.new(mock("trans"))
+        prot = BaseProtocol.new(mock("trans"))
         prot.should_receive(:write_struct_begin).with("SpecNamespace::Xception")
         prot.should_receive(:write_struct_end)
         prot.should_receive(:write_field_begin).with('message', Types::STRING, 1)#, "something happened")
@@ -238,7 +236,7 @@
       rescue Thrift::Exception => e
         e.message.should == "something happened"
         e.code.should == 5
-        prot = Protocol.new(mock("trans"))
+        prot = BaseProtocol.new(mock("trans"))
         prot.should_receive(:write_struct_begin).with("SpecNamespace::Xception")
         prot.should_receive(:write_struct_end)
         prot.should_receive(:write_field_begin).with('message', Types::STRING, 1)
diff --git a/lib/rb/spec/unixsocket_spec.rb b/lib/rb/spec/unix_socket_spec.rb
similarity index 98%
rename from lib/rb/spec/unixsocket_spec.rb
rename to lib/rb/spec/unix_socket_spec.rb
index 574e2bb..df239d7 100644
--- a/lib/rb/spec/unixsocket_spec.rb
+++ b/lib/rb/spec/unix_socket_spec.rb
@@ -18,7 +18,6 @@
 #
 
 require File.dirname(__FILE__) + '/spec_helper'
-require 'thrift/transport/unixsocket'
 require File.dirname(__FILE__) + "/socket_spec_shared"
 
 class ThriftUNIXSocketSpec < Spec::ExampleGroup
