diff --git a/test/ThriftTest.thrift b/test/ThriftTest.thrift
index c93fed5..fe3eba1 100644
--- a/test/ThriftTest.thrift
+++ b/test/ThriftTest.thrift
@@ -103,7 +103,7 @@
   Xtruct testMultiException(string arg0, string arg1) throws(Xception err1, Xception2 err2)
 
   /* Test oneway void */
-  async void testAsync(1:i32 secondsToSleep)
+  async void testOneway(1:i32 secondsToSleep)
 }
 
 service SecondService
diff --git a/test/cpp/src/TestClient.cpp b/test/cpp/src/TestClient.cpp
index b12a4b5..232bca2 100644
--- a/test/cpp/src/TestClient.cpp
+++ b/test/cpp/src/TestClient.cpp
@@ -422,10 +422,10 @@
 
     /* test oneway void */
     {
-        printf("testClient.testAsync(3) =>");
-        uint64_t startAsync = now();
-        testClient.testAsync(3);
-        uint64_t elapsed = now() - startAsync;
+        printf("testClient.testOneway(3) =>");
+        uint64_t startOneway = now();
+        testClient.testOneway(3);
+        uint64_t elapsed = now() - startOneway;
         if (elapsed > 200 * 1000) { // 0.2 seconds
             printf("  FAILURE - took %.2f ms\n", (double)elapsed/1000.0);
         } else {
diff --git a/test/cpp/src/TestServer.cpp b/test/cpp/src/TestServer.cpp
index 56068f1..a579db8 100644
--- a/test/cpp/src/TestServer.cpp
+++ b/test/cpp/src/TestServer.cpp
@@ -261,10 +261,10 @@
     }
   }
 
-  void testAsync(int sleepFor) {
-    printf("testAsync(%d): Sleeping...\n", sleepFor);
+  void testOneway(int sleepFor) {
+    printf("testOneway(%d): Sleeping...\n", sleepFor);
     sleep(sleepFor);
-    printf("testAsync(%d): done sleeping!\n", sleepFor);
+    printf("testOneway(%d): done sleeping!\n", sleepFor);
   }
 };
 
diff --git a/test/csharp/ThriftTest/TestClient.cs b/test/csharp/ThriftTest/TestClient.cs
index 42b21b8..becfb4c 100644
--- a/test/csharp/ThriftTest/TestClient.cs
+++ b/test/csharp/ThriftTest/TestClient.cs
@@ -399,8 +399,8 @@
 			Console.Write(" = Xtruct(byte_thing:" + multiResponse.Byte_thing + ",String_thing:" + multiResponse.String_thing
 						+ ",i32_thing:" + multiResponse.I32_thing + ",i64_thing:" + multiResponse.I64_thing + ")\n");
 
-			Console.WriteLine("Test Async(1)");
-			client.testAsync(1);
+			Console.WriteLine("Test Oneway(1)");
+			client.testOneway(1);
 		}
 	}
 }
diff --git a/test/csharp/ThriftTest/TestServer.cs b/test/csharp/ThriftTest/TestServer.cs
index 18952d4..dd16bf4 100644
--- a/test/csharp/ThriftTest/TestServer.cs
+++ b/test/csharp/ThriftTest/TestServer.cs
@@ -269,11 +269,11 @@
 				}
 			}
 
-			public void testAsync(int arg)
+			public void testOneway(int arg)
 			{
-				Console.WriteLine("testAsync(" + arg + "), sleeping...");
+				Console.WriteLine("testOneway(" + arg + "), sleeping...");
 				System.Threading.Thread.Sleep(arg * 1000);
-				Console.WriteLine("testAsync finished");
+				Console.WriteLine("testOneway finished");
 			}
 
 		} // class TestHandler
diff --git a/test/erl/src/test_disklog.erl b/test/erl/src/test_disklog.erl
index 0cc03bc..3036682 100644
--- a/test/erl/src/test_disklog.erl
+++ b/test/erl/src/test_disklog.erl
@@ -16,12 +16,12 @@
 
     % We have to make oneway calls into this client only since otherwise it will try
     % to read from the disklog and go boom.
-    {ok, ok} = thrift_client:call(Client, testAsync, [16#deadbeef]),
+    {ok, ok} = thrift_client:call(Client, testOneway, [16#deadbeef]),
     io:format("Call written~n"),
 
     % Use the send_call method to write a non-oneway call into the log
     ok = thrift_client:send_call(Client, testString, [<<"hello world">>]),
-    io:format("Non-async call sent~n"),
+    io:format("Non-oneway call sent~n"),
 
     ok = thrift_client:close(Client),
     io:format("Client closed~n"),
@@ -48,12 +48,12 @@
 
     % We have to make oneway calls into this client only since otherwise it will try
     % to read from the disklog and go boom.
-    {ok, ok} = thrift_client:call(Client, testAsync, [16#deadbeef]),
+    {ok, ok} = thrift_client:call(Client, testOneway, [16#deadbeef]),
     io:format("Call written~n"),
 
     % Use the send_call method to write a non-oneway call into the log
     ok = thrift_client:send_call(Client, testString, [<<"hello world">>]),
-    io:format("Non-async call sent~n"),
+    io:format("Non-oneway call sent~n"),
 
     ok = thrift_client:close(Client),
     io:format("Client closed~n"),
diff --git a/test/erl/src/test_server.erl b/test/erl/src/test_server.erl
index c4326aa..45143b7 100644
--- a/test/erl/src/test_server.erl
+++ b/test/erl/src/test_server.erl
@@ -150,6 +150,6 @@
             {reply, #xtruct{string_thing = Arg1}}
     end;
 
-handle_function(testAsync, {Seconds}) ->
+handle_function(testOneway, {Seconds}) ->
     timer:sleep(1000 * Seconds),
     ok.
diff --git a/test/hs/Server.hs b/test/hs/Server.hs
index 511d01e..69b1fc9 100644
--- a/test/hs/Server.hs
+++ b/test/hs/Server.hs
@@ -28,7 +28,7 @@
     testMulti a a1 a2 a3 a4 a5 a6 = return (Xtruct Nothing Nothing Nothing Nothing)
     testException a c = throwDyn (Xception (Just 1) (Just "bya"))
     testMultiException a c1 c2 = return (Xtruct Nothing Nothing Nothing Nothing)
-    testAsync a (Just i) = do print i
+    testOneway a (Just i) = do print i
 
 
 main = do (run_basic_server TestHandler process 9090) `catchDyn` (\(TransportExn s t) -> print s)
diff --git a/test/ocaml/server/TestServer.ml b/test/ocaml/server/TestServer.ml
index 6715738..1118a55 100644
--- a/test/ocaml/server/TestServer.ml
+++ b/test/ocaml/server/TestServer.ml
@@ -97,7 +97,7 @@
     let res = new xtruct in
       res#set_string_thing (sod a1);
       res
-  method testAsync i =
+  method testOneway i =
     Unix.sleep (sod i)
 end;;
 
diff --git a/test/py/TestClient.py b/test/py/TestClient.py
index 944e384..c5c8bdc 100755
--- a/test/py/TestClient.py
+++ b/test/py/TestClient.py
@@ -104,12 +104,12 @@
     except Exception: # type is undefined
       pass
 
-  def testAsync(self):
+  def testOneway(self):
     start = time.time()
-    self.client.testAsync(0.5)
+    self.client.testOneway(0.5)
     end = time.time()
     self.assertTrue(end - start < 0.2,
-                    "async sleep took %f sec" % (end - start))
+                    "oneway sleep took %f sec" % (end - start))
 
 class NormalBinaryTest(AbstractTest):
   protocol_factory = TBinaryProtocol.TBinaryProtocolFactory()
diff --git a/test/py/TestServer.py b/test/py/TestServer.py
index 7abb624..ab96666 100755
--- a/test/py/TestServer.py
+++ b/test/py/TestServer.py
@@ -54,8 +54,8 @@
     elif str == "throw_undeclared":
       raise ValueError("foo")
 
-  def testAsync(self, seconds):
-    print 'testAsync(%d) => sleeping...' % seconds
+  def testOneway(self, seconds):
+    print 'testOneway(%d) => sleeping...' % seconds
     time.sleep(seconds)
     print 'done sleeping'
 
