diff --git a/tutorial/py.tornado/PythonClient.py b/tutorial/py.tornado/PythonClient.py
index 005ad3c..426146f 100755
--- a/tutorial/py.tornado/PythonClient.py
+++ b/tutorial/py.tornado/PythonClient.py
@@ -19,18 +19,17 @@
 # under the License.
 #
 
-import sys
 import glob
+import logging
+import sys
+
 sys.path.append('gen-py.tornado')
 sys.path.insert(0, glob.glob('../../lib/py/build/lib*')[0])
 
-import logging
-
 from tutorial import Calculator
 from tutorial.ttypes import Operation, Work, InvalidOperation
 
 from thrift import TTornado
-from thrift.transport import TSocket
 from thrift.transport import TTransport
 from thrift.protocol import TBinaryProtocol
 
@@ -38,29 +37,28 @@
 from tornado import ioloop
 
 
-@gen.engine
-def communicate(callback=None):
+@gen.coroutine
+def communicate():
     # create client
     transport = TTornado.TTornadoStreamTransport('localhost', 9090)
+    # open the transport, bail on error
+    try:
+        yield transport.open()
+        print('Transport is opened')
+    except TTransport.TTransportException as ex:
+        logging.error(ex)
+        raise gen.Return()
+
     pfactory = TBinaryProtocol.TBinaryProtocolFactory()
     client = Calculator.Client(transport, pfactory)
 
-    # open the transport, bail on error
-    try:
-        yield gen.Task(transport.open)
-    except TTransport.TTransportException as ex:
-        logging.error(ex)
-        if callback:
-            callback()
-        return
-
     # ping
-    yield gen.Task(client.ping)
+    yield client.ping()
     print("ping()")
 
     # add
-    sum_ = yield gen.Task(client.add, 1, 1)
-    print("1 + 1 = {}".format(sum_))
+    sum_ = yield client.add(1, 1)
+    print("1 + 1 = {0}".format(sum_))
 
     # make a oneway call without a callback (schedule the write and continue
     # without blocking)
@@ -69,7 +67,7 @@
 
     # make a oneway call with a callback (we'll wait for the stream write to
     # complete before continuing)
-    yield gen.Task(client.zip)
+    client.zip()
     print("zip() with callback")
 
     # calculate 1/0
@@ -79,37 +77,31 @@
     work.num2 = 0
 
     try:
-        quotient = yield gen.Task(client.calculate, 1, work)
-        print("Whoa? You know how to divide by zero?")
+        quotient = yield client.calculate(1, work)
+        print("Whoa? You know how to divide by zero ? -> {0}".format(quotient))
     except InvalidOperation as io:
-        print("InvalidOperation: {}".format(io))
+        print("InvalidOperation: {0}".format(io))
 
     # calculate 15-10
     work.op = Operation.SUBTRACT
     work.num1 = 15
     work.num2 = 10
 
-    diff = yield gen.Task(client.calculate, 1, work)
-    print("15 - 10 = {}".format(diff))
+    diff = yield client.calculate(1, work)
+    print("15 - 10 = {0}".format(diff))
 
     # getStruct
-    log = yield gen.Task(client.getStruct, 1)
-    print("Check log: {}".format(log.value))
+    log = yield client.getStruct(1)
+    print("Check log: {0}".format(log.value))
 
     # close the transport
     client._transport.close()
-
-    if callback:
-        callback()
+    raise gen.Return()
 
 
 def main():
     # create an ioloop, do the above, then stop
-    io_loop = ioloop.IOLoop.instance()
-    def this_joint():
-        communicate(callback=io_loop.stop)
-    io_loop.add_callback(this_joint)
-    io_loop.start()
+    ioloop.IOLoop.current().run_sync(communicate)
 
 
 if __name__ == "__main__":
diff --git a/tutorial/py.tornado/PythonServer.py b/tutorial/py.tornado/PythonServer.py
index 4198214..7b750e4 100755
--- a/tutorial/py.tornado/PythonServer.py
+++ b/tutorial/py.tornado/PythonServer.py
@@ -19,8 +19,9 @@
 # under the License.
 #
 
-import sys
 import glob
+import sys
+
 sys.path.append('gen-py.tornado')
 sys.path.insert(0, glob.glob('../../lib/py/build/lib*')[0])
 
@@ -42,15 +43,14 @@
     def __init__(self):
         self.log = {}
 
-    def ping(self, callback):
+    def ping(self):
         print("ping()")
-        callback()
 
-    def add(self, n1, n2, callback):
+    def add(self, n1, n2):
         print("add({}, {})".format(n1, n2))
-        callback(n1 + n2)
+        return n1 + n2
 
-    def calculate(self, logid, work, callback):
+    def calculate(self, logid, work):
         print("calculate({}, {})".format(logid, work))
 
         if work.op == Operation.ADD:
@@ -76,15 +76,14 @@
         log.key = logid
         log.value = '%d' % (val)
         self.log[logid] = log
-        callback(val)
+        return val
 
-    def getStruct(self, key, callback):
+    def getStruct(self, key):
         print("getStruct({})".format(key))
-        callback(self.log[key])
+        return self.log[key]
 
-    def zip(self, callback):
+    def zip(self):
         print("zip()")
-        callback()
 
 
 def main():
diff --git a/tutorial/tutorial.thrift b/tutorial/tutorial.thrift
index 1149edf..c4a96f0 100644
--- a/tutorial/tutorial.thrift
+++ b/tutorial/tutorial.thrift
@@ -32,7 +32,7 @@
  * The first thing to know about are types. The available types in Thrift are:
  *
  *  bool        Boolean, one byte
- *  byte        Signed byte
+ *  i8 (byte)   Signed 8-bit integer
  *  i16         Signed 16-bit integer
  *  i32         Signed 32-bit integer
  *  i64         Signed 64-bit integer
