diff --git a/tutorial/php/PhpServer.php b/tutorial/php/PhpServer.php
index 235b15b..4af70a4 100755
--- a/tutorial/php/PhpServer.php
+++ b/tutorial/php/PhpServer.php
@@ -1,5 +1,22 @@
 #!/usr/bin/env php
 <?php
+
+namespace tutorial\php;
+
+error_reporting(E_ALL);
+
+require_once __DIR__.'/../../lib/php/lib/Thrift/ClassLoader/ThriftClassLoader.php';
+
+use Thrift\ClassLoader\ThriftClassLoader;
+
+$GEN_DIR = realpath(dirname(__FILE__).'/..').'/gen-php';
+
+$loader = new ThriftClassLoader();
+$loader->registerNamespace('Thrift', __DIR__ . '/../../lib/php/lib');
+$loader->registerDefinition('shared', $GEN_DIR);
+$loader->registerDefinition('tutorial', $GEN_DIR);
+$loader->register();
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements. See the NOTICE file
@@ -31,30 +48,11 @@
   ini_set("display_errors", "stderr");
 }
 
-$GLOBALS['THRIFT_ROOT'] = realpath(dirname(__FILE__).'/../..').'/lib/php/src';
+use Thrift\Protocol\TBinaryProtocol;
+use Thrift\Transport\TPhpStream;
+use Thrift\Transport\TBufferedTransport;
 
-require_once $GLOBALS['THRIFT_ROOT'].'/Thrift.php';
-require_once $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php';
-require_once $GLOBALS['THRIFT_ROOT'].'/transport/TPhpStream.php';
-require_once $GLOBALS['THRIFT_ROOT'].'/transport/TBufferedTransport.php';
-
-/**
- * Suppress errors in here, which happen because we have not installed into
- * $GLOBALS['THRIFT_ROOT'].'/packages/tutorial' like we are supposed to!
- *
- * Normally we would only have to include Calculator.php which would properly
- * include the other files from their packages/ folder locations, but we
- * include everything here due to the bogus path setup.
- */
-error_reporting(E_NONE);
-$GEN_DIR = realpath(dirname(__FILE__).'/..').'/gen-php';
-require_once $GEN_DIR.'/shared/SharedService.php';
-require_once $GEN_DIR.'/shared/shared_types.php';
-require_once $GEN_DIR.'/tutorial/Calculator.php';
-require_once $GEN_DIR.'/tutorial/tutorial_types.php';
-error_reporting(E_ALL);
-
-class CalculatorHandler implements CalculatorIf {
+class CalculatorHandler implements \tutorial\CalculatorIf {
   protected $log = array();
 
   public function ping() {
@@ -66,21 +64,21 @@
     return $num1 + $num2;
   }
 
-  public function calculate($logid, $w) {
+  public function calculate($logid, \tutorial\Work $w) {
     error_log("calculate({$logid}, {{$w->op}, {$w->num1}, {$w->num2}})");
     switch ($w->op) {
-      case tutorial_Operation::ADD:
+      case \tutorial\Operation::ADD:
         $val = $w->num1 + $w->num2;
         break;
-      case tutorial_Operation::SUBTRACT:
+      case \tutorial\Operation::SUBTRACT:
         $val = $w->num1 - $w->num2;
         break;
-      case tutorial_Operation::MULTIPLY:
+      case \tutorial\Operation::MULTIPLY:
         $val = $w->num1 * $w->num2;
         break;
-      case tutorial_Operation::DIVIDE:
+      case \tutorial\Operation::DIVIDE:
         if ($w->num2 == 0) {
-          $io = new tutorial_InvalidOperation();
+          $io = new \tutorial\InvalidOperation();
           $io->what = $w->op;
           $io->why = "Cannot divide by 0";
           throw $io;
@@ -88,13 +86,13 @@
         $val = $w->num1 / $w->num2;
         break;
       default:
-        $io = new tutorial_InvalidOperation();
+        $io = new \tutorial\InvalidOperation();
         $io->what = $w->op;
         $io->why = "Invalid Operation";
         throw $io;
     }
 
-    $log = new SharedStruct();
+    $log = new \shared\SharedStruct();
     $log->key = $logid;
     $log->value = (string)$val;
     $this->log[$logid] = $log;
@@ -107,7 +105,7 @@
     // This actually doesn't work because the PHP interpreter is
     // restarted for every request.
     //return $this->log[$key];
-    return new SharedStruct(array("key" => $key, "value" => "PHP is stateless!"));
+    return new \shared\SharedStruct(array("key" => $key, "value" => "PHP is stateless!"));
   }
 
   public function zip() {
@@ -122,7 +120,7 @@
 }
 
 $handler = new CalculatorHandler();
-$processor = new CalculatorProcessor($handler);
+$processor = new \tutorial\CalculatorProcessor($handler);
 
 $transport = new TBufferedTransport(new TPhpStream(TPhpStream::MODE_R | TPhpStream::MODE_W));
 $protocol = new TBinaryProtocol($transport, true, true);
