diff --git a/test/php/Handler.php b/test/php/Handler.php
index 3ea1f58..a03554c 100644
--- a/test/php/Handler.php
+++ b/test/php/Handler.php
@@ -89,31 +89,87 @@
 
     public function testMapMap($hello)
     {
-        return $hello;
+        return [
+            -4 => [
+                -4 => -4,
+                -3 => -3,
+                -2 => -2,
+                -1 => -1,
+            ],
+            4 => [
+                4 => 4,
+                3 => 3,
+                2 => 2,
+                1 => 1,
+            ],
+        ];
     }
 
     public function testInsanity(\ThriftTest\Insanity $argument)
     {
-        return $argument;
+        $looney = new \ThriftTest\Insanity();
+
+        return [
+            1 => [
+                \ThriftTest\Numberz::TWO => $argument,
+                \ThriftTest\Numberz::THREE => $argument,
+            ],
+            2 => [
+                \ThriftTest\Numberz::SIX => $looney,
+            ],
+        ];
     }
 
     public function testMulti($arg0, $arg1, $arg2, array $arg3, $arg4, $arg5)
     {
-        // TODO: Implement testMulti() method.
+        $result = new \ThriftTest\Xtruct();
+        $result->string_thing = 'Hello2';
+        $result->byte_thing = $arg0;
+        $result->i32_thing = $arg1;
+        $result->i64_thing = $arg2;
+
+        return $result;
     }
 
     public function testException($arg)
     {
-        throw new \Exception($arg);
+        if ($arg === 'Xception') {
+            $exception = new \ThriftTest\Xception();
+            $exception->errorCode = 1001;
+            $exception->message = $arg;
+            throw $exception;
+        }
+
+        if ($arg === 'TException') {
+            throw new \Thrift\Exception\TException('This is a TException');
+        }
     }
 
     public function testMultiException($arg0, $arg1)
     {
-        throw new \Exception($arg0, $arg1);
+        if ($arg0 === 'Xception') {
+            $exception = new \ThriftTest\Xception();
+            $exception->errorCode = 1001;
+            $exception->message = 'This is an Xception';
+            throw $exception;
+        }
+
+        if ($arg0 === 'Xception2') {
+            $exception = new \ThriftTest\Xception2();
+            $exception->errorCode = 2002;
+            $exception->struct_thing = new \ThriftTest\Xtruct();
+            $exception->struct_thing->string_thing = 'This is an Xception2';
+            throw $exception;
+        }
+
+        $result = new \ThriftTest\Xtruct();
+        $result->string_thing = $arg1;
+
+        return $result;
     }
 
     public function testOneway($secondsToSleep)
     {
-        sleep($secondsToSleep);
+        usleep($secondsToSleep * 300000);
     }
 }
