diff --git a/lib/lua/TBufferedTransport.lua b/lib/lua/TBufferedTransport.lua
new file mode 100644
index 0000000..2b0b946
--- /dev/null
+++ b/lib/lua/TBufferedTransport.lua
@@ -0,0 +1,91 @@
+--
+-- 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 'TTransport'
+
+TBufferedTransport = TTransportBase:new{
+  __type = 'TBufferedTransport',
+  rBufSize = 2048,
+  wBufSize = 2048,
+  wBuf = '',
+  rBuf = ''
+}
+
+function TBufferedTransport:new(obj)
+  if ttype(obj) ~= 'table' then
+    error(ttype(self) .. 'must be initialized with a table')
+  end
+
+  -- Ensure a transport is provided
+  if not obj.trans then
+    error('You must provide ' .. ttype(self) .. ' with a trans')
+  end
+
+  return TTransportBase:new(obj)
+end
+
+function TBufferedTransport:isOpen()
+  return self.trans:isOpen()
+end
+
+function TBufferedTransport:open()
+  return self.trans:open()
+end
+
+function TBufferedTransport:close()
+  return self.trans:close()
+end
+
+function TBufferedTransport:read(len)
+  return self.trans:read(len)
+end
+
+function TBufferedTransport:readAll(len)
+  return self.trans:readAll(len)
+end
+
+function TBufferedTransport:write(buf)
+  self.wBuf = self.wBuf .. buf
+  if string.len(self.wBuf) >= self.wBufSize then
+    self.trans:write(self.wBuf)
+    self.wBuf = ''
+  end
+end
+
+function TBufferedTransport:flush()
+  if string.len(self.wBuf) > 0 then
+    self.trans:write(self.wBuf)
+    self.wBuf = ''
+  end
+end
+
+TBufferedTransportFactory = TTransportFactoryBase:new{
+  __type = 'TBufferedTransportFactory'
+}
+
+function TBufferedTransportFactory:getTransport(trans)
+  if not trans then
+    terror(TTransportException:new{
+      message = 'Must supply a transport to ' .. ttype(self)
+    })
+  end
+  return TBufferedTransport:new{
+    trans = trans
+  }
+end
