diff --git a/compiler/cpp/src/parse/t_function.h b/compiler/cpp/src/parse/t_function.h
index c437d0e..c2de77e 100644
--- a/compiler/cpp/src/parse/t_function.h
+++ b/compiler/cpp/src/parse/t_function.h
@@ -43,7 +43,7 @@
     oneway_(oneway)
   {
     if (oneway_ && !xceptions_->get_members().empty()) {
-      throw std::string("Async methods can't throw exceptions.");
+      throw std::string("Oneway methods can't throw exceptions.");
     }
   }
 
diff --git a/lib/erl/README b/lib/erl/README
index 7147381..815e1fb 100644
--- a/lib/erl/README
+++ b/lib/erl/README
@@ -9,7 +9,7 @@
 {error,{bad_args,testVoid,[asdf]}}
 121> thrift_client:call(C, testI32, [123]).
 {ok,123}
-122> thrift_client:call(C, testAsync, [1]).
+122> thrift_client:call(C, testOneway, [1]).
 {ok,ok}
 123> catch thrift_client:call(C, testXception, ["foo"]).
 {error,{no_function,testXception}}
diff --git a/lib/erl/src/thrift_processor.erl b/lib/erl/src/thrift_processor.erl
index 2f5a81b..3344666 100644
--- a/lib/erl/src/thrift_processor.erl
+++ b/lib/erl/src/thrift_processor.erl
@@ -62,13 +62,13 @@
 
 handle_function_catch(State = #thrift_processor{service = Service},
                       Function, ErrType, ErrData) ->
-    IsAsync = Service:function_info(Function, reply_type) =:= async_void,
+    IsOneway = Service:function_info(Function, reply_type) =:= async_void,
 
     case {ErrType, ErrData} of
-        _ when IsAsync ->
+        _ when IsOneway ->
             Stack = erlang:get_stacktrace(),
             error_logger:warning_msg(
-              "async void ~p threw error which must be ignored: ~p",
+              "oneway void ~p threw error which must be ignored: ~p",
               [Function, {ErrType, ErrData, Stack}]),
             ok;
 
diff --git a/lib/java/test/org/apache/thrift/test/TestClient.java b/lib/java/test/org/apache/thrift/test/TestClient.java
index 91b3ec5..324bc92 100644
--- a/lib/java/test/org/apache/thrift/test/TestClient.java
+++ b/lib/java/test/org/apache/thrift/test/TestClient.java
@@ -354,17 +354,17 @@
         System.out.print("}\n");
 
         // Test oneway
-        System.out.print("testAsync(3)...");
-        long startAsync = System.nanoTime();
-        testClient.testAsync(3);
-        long asyncElapsedMillis = (System.nanoTime() - startAsync) / 1000000;
-        if (asyncElapsedMillis > 200) {
-          throw new Exception("Async test failed: took " +
-                              Long.toString(asyncElapsedMillis) +
+        System.out.print("testOneway(3)...");
+        long startOneway = System.nanoTime();
+        testClient.testOneway(3);
+        long onewayElapsedMillis = (System.nanoTime() - startOneway) / 1000000;
+        if (onewayElapsedMillis > 200) {
+          throw new Exception("Oneway test failed: took " +
+                              Long.toString(onewayElapsedMillis) +
                               "ms");
         } else {
           System.out.println("Success - took " +
-                             Long.toString(asyncElapsedMillis) +
+                             Long.toString(onewayElapsedMillis) +
                              "ms");
         }
 
diff --git a/lib/java/test/org/apache/thrift/test/TestServer.java b/lib/java/test/org/apache/thrift/test/TestServer.java
index 989fbe6..2b36ad0 100644
--- a/lib/java/test/org/apache/thrift/test/TestServer.java
+++ b/lib/java/test/org/apache/thrift/test/TestServer.java
@@ -233,8 +233,8 @@
       return result;
     }
 
-    public void testAsync(int sleepFor) {
-      System.out.println("testAsync(" + Integer.toString(sleepFor) +
+    public void testOneway(int sleepFor) {
+      System.out.println("testOneway(" + Integer.toString(sleepFor) +
                          ") => sleeping...");
       try {
         Thread.sleep(sleepFor * 1000);
diff --git a/lib/py/src/server/TNonblockingServer.py b/lib/py/src/server/TNonblockingServer.py
index 816827c..2f8b76b 100644
--- a/lib/py/src/server/TNonblockingServer.py
+++ b/lib/py/src/server/TNonblockingServer.py
@@ -148,7 +148,7 @@
         This function is the only function witch can be called asynchronous.
         
         The ready can switch Connection to three states:
-            WAIT_LEN if request was async.
+            WAIT_LEN if request was oneway.
             SEND_ANSWER if request was processed in normal way.
             CLOSED if request throws unexpected exception.
         
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'
 
