diff --git a/src/Lunr/Core/Autoloader.php b/src/Lunr/Core/Autoloader.php
index 1adc96bf33c5da9d433eae7b905ae81051c97346..dcc71dd94a9e2cfaeeb891f6aca04dbc5d3fca2c 100644
--- a/src/Lunr/Core/Autoloader.php
+++ b/src/Lunr/Core/Autoloader.php
@@ -3,7 +3,7 @@
 /**
  * This file contains a PHP Class autoloader.
  *
- * PHP Version 5.3
+ * PHP Version 5.6
  *
  * @package    Lunr\Core
  * @author     Heinz Wiesinger <heinz@m2mobi.com>
@@ -29,11 +29,19 @@ class Autoloader
     private $controllers;
 
     /**
+     * An array of prefixes for namespaces
+     *
+     * @var
+     */
+    private $prefixes;
+
+    /**
      * Constructor.
      */
     public function __construct()
     {
-        $this->controllers = array();
+        $this->controllers = [];
+        $this->prefixes = [];
     }
 
     /**
@@ -53,7 +61,17 @@ class Autoloader
      */
     public function load($class)
     {
-        $file = $this->get_class_filepath($class);
+        $this->set_psr4_namespace('Lunr', '/');
+
+        $file = $this->get_psr4_class_filepath($class);
+
+        if (stream_resolve_include_path($file))
+        {
+            include_once $file;
+            return;
+        }
+
+        $file = $this->get_psr0_class_filepath($class);
 
         if (stream_resolve_include_path($file))
         {
@@ -102,7 +120,7 @@ class Autoloader
      */
     public function register()
     {
-        return spl_autoload_register(array($this, 'load'));
+        return spl_autoload_register([$this, 'load']);
     }
 
     /**
@@ -112,7 +130,7 @@ class Autoloader
      */
     public function unregister()
     {
-        return spl_autoload_unregister(array($this, 'load'));
+        return spl_autoload_unregister([$this, 'load']);
     }
 
     /**
@@ -124,7 +142,7 @@ class Autoloader
      *
      * @return String $filepath Path and filename
      */
-    public function get_class_filepath($class)
+    public function get_psr0_class_filepath($class)
     {
         $class = str_replace('\\', DIRECTORY_SEPARATOR, $class);
 
@@ -140,6 +158,36 @@ class Autoloader
     /**
      * Convert namespaced classname to filepath.
      *
+     * Rules according to PSR-0.
+     *
+     * @param String $class namespaced classname
+     *
+     * @return String $filepath Path and filename
+     */
+    public function get_psr4_class_filepath($class)
+    {
+        $class = (strpos($class, '\\')===0) ? substr($class, 1):$class;
+        $pos = strpos($class, '\\');
+
+        $class_prefix = substr($class, 0, $pos);
+
+        $base_path = '';
+
+        if(isset($this->prefixes[$class_prefix]))
+        {
+            $base_path .= $this->prefixes[$class_prefix];
+            $class = str_replace('\\', DIRECTORY_SEPARATOR, $class);
+
+            $class = basename($class);
+            $class = str_replace('_', DIRECTORY_SEPARATOR, $class);
+
+            return $base_path . $class . '.php';
+        }
+    }
+
+    /**
+     * Convert namespaced classname to filepath.
+     *
      * Rules according to Lunr 0.1 specifics.
      *
      * @param String $class namespaced classname
@@ -214,6 +262,12 @@ class Autoloader
         }
     }
 
+    public function set_psr4_namespace($class_prefix, $filepath)
+    {
+        $this->prefixes[$class_prefix] = $filepath;
+        $this->add_include_path($filepath);
+    }
+
 }
 
 ?>
diff --git a/src/Lunr/Core/Tests/AutoloaderTest.php b/src/Lunr/Core/Tests/AutoloaderTest.php
index 2a31cc62241836aa7457fd7a6b55da1333d9e9c4..e71e11ee45988a45961859eb2f478d4fdda0525b 100644
--- a/src/Lunr/Core/Tests/AutoloaderTest.php
+++ b/src/Lunr/Core/Tests/AutoloaderTest.php
@@ -136,7 +136,7 @@ class AutoloaderTest extends PHPUnit_Framework_TestCase
         $method = $this->autoloader_reflection->getMethod('get_legacy_class_filename');
         $method->setAccessible(TRUE);
 
-        $this->assertEquals($filename, $method->invokeArgs($this->autoloader, array($class)));
+        $this->assertEquals($filename, $method->invokeArgs($this->autoloader, [$class]));
     }
 
     /**
@@ -146,14 +146,14 @@ class AutoloaderTest extends PHPUnit_Framework_TestCase
      * @param String $filename name of the file that contains the class
      *
      * @dataProvider psr0Provider
-     * @covers       Lunr\Core\Autoloader::get_class_filepath
+     * @covers       Lunr\Core\Autoloader::get_psr0_class_filepath
      */
     public function testGetFilePath($class, $filename)
     {
-        $method = $this->autoloader_reflection->getMethod('get_class_filepath');
+        $method = $this->autoloader_reflection->getMethod('get_psr0_class_filepath');
         $method->setAccessible(TRUE);
 
-        $this->assertEquals($filename, $method->invokeArgs($this->autoloader, array($class)));
+        $this->assertEquals($filename, $method->invokeArgs($this->autoloader, [$class]));
     }
 
     /**
@@ -198,7 +198,7 @@ class AutoloaderTest extends PHPUnit_Framework_TestCase
         $this->autoloader->register_project_controller($basename);
         $method = $this->autoloader_reflection->getMethod('get_legacy_class_filename');
         $method->setAccessible(TRUE);
-        $this->assertEquals($filename, $method->invokeArgs($this->autoloader, array($class)));
+        $this->assertEquals($filename, $method->invokeArgs($this->autoloader, [$class]));
     }
 
     /**
@@ -215,7 +215,7 @@ class AutoloaderTest extends PHPUnit_Framework_TestCase
     {
         $method = $this->autoloader_reflection->getMethod('get_legacy_class_filepath');
         $method->setAccessible(TRUE);
-        $this->assertEquals($filepath, $method->invokeArgs($this->autoloader, array($class)));
+        $this->assertEquals($filepath, $method->invokeArgs($this->autoloader, [$class]));
     }
 
     /**
@@ -255,15 +255,55 @@ class AutoloaderTest extends PHPUnit_Framework_TestCase
     }
 
     /**
+     * Test loading of classes according to PSR-4 specifics.
+     *
+     * @covers Lunr\Core\Autoloader::load
+     */
+    public function testLoadOfPSR4Classes()
+    {
+        $this->autoloader->set_psr4_namespace('PSR4', TEST_STATICS . '/Core/');
+
+        $filename = TEST_STATICS.'/Core/PSR4TestFile.php';
+        $class    = 'PSR4\PSR4TestFile';
+
+        $this->assertNotContains($filename, get_included_files());
+        $this->autoloader->load($class);
+
+        $this->assertContains($filename, get_included_files());
+    }
+
+    /**
+     * Test colliding of classes according to PSR-4 specifics.
+     *
+     * @depends testLoadOfPSR4Classes
+     * @covers Lunr\Core\Autoloader::load
+     */
+    public function testLoadOfCollidingPSR4Classes()
+    {
+        xdebug_disable();
+
+        $this->autoloader->set_psr4_namespace('PSR4Test', TEST_STATICS . '/Core/PSR-4/');
+
+        $filename_test = TEST_STATICS.'/Core/PSR-4/PSR4TestFile.php';
+        $class_test    = 'PSR4Test\PSR4TestFile';
+
+        $this->assertNotContains($filename_test, get_included_files());
+
+        $this->autoloader->load($class_test);
+
+        $this->assertContains($filename_test, get_included_files());
+    }
+
+    /**
      * Unit Test Data Provider for Abstract Controller names.
      *
      * @return array $controllers Array of Controller basenames
      */
     public function controllerProvider()
     {
-        $controllers   = array();
-        $controllers[] = array('lunr', 'lunr');
-        $controllers[] = array('Lunr2', 'lunr2');
+        $controllers   = [];
+        $controllers[] = ['lunr', 'lunr'];
+        $controllers[] = ['Lunr2', 'lunr2'];
 
         return $controllers;
     }
@@ -275,15 +315,15 @@ class AutoloaderTest extends PHPUnit_Framework_TestCase
      */
     public function normalClassProvider()
     {
-        $classes   = array();
-        $classes[] = array('DateTime', 'class.datetime.inc.php');
-        $classes[] = array('StubView', 'view.stub.inc.php');
-        $classes[] = array('JsonInterface', 'interface.json.inc.php');
-        $classes[] = array('StubModel', 'model.stub.inc.php');
-        $classes[] = array('StubController', 'controller.stub.inc.php');
-        $classes[] = array('MockView', 'class.view.mock.php');
-        $classes[] = array('DateTimeTest', 'class.datetime.test.php');
-        $classes[] = array('View', 'class.view.inc.php');
+        $classes   = [];
+        $classes[] = ['DateTime', 'class.datetime.inc.php'];
+        $classes[] = ['StubView', 'view.stub.inc.php'];
+        $classes[] = ['JsonInterface', 'interface.json.inc.php'];
+        $classes[] = ['StubModel', 'model.stub.inc.php'];
+        $classes[] = ['StubController', 'controller.stub.inc.php'];
+        $classes[] = ['MockView', 'class.view.mock.php'];
+        $classes[] = ['DateTimeTest', 'class.datetime.test.php'];
+        $classes[] = ['View', 'class.view.inc.php'];
 
         return $classes;
     }
@@ -295,8 +335,8 @@ class AutoloaderTest extends PHPUnit_Framework_TestCase
      */
     public function namespacedClassProvider()
     {
-        $classes   = array();
-        $classes[] = array('Lunr\Libraries\Core\Lunr01TestFile', 'libraries/core/class.lunr01testfile.inc.php');
+        $classes   = [];
+        $classes[] = ['Lunr\Libraries\Core\Lunr01TestFile', 'libraries/core/class.lunr01testfile.inc.php'];
 
         return $classes;
     }
@@ -308,15 +348,15 @@ class AutoloaderTest extends PHPUnit_Framework_TestCase
      */
     public function psr0Provider()
     {
-        $classes   = array();
-        $classes[] = array('\Doctrine\Common\IsolatedClassLoader', 'Doctrine/Common/IsolatedClassLoader.php');
-        $classes[] = array('\Symfony\Core\Request', 'Symfony/Core/Request.php');
-        $classes[] = array('\Zend\Acl', 'Zend/Acl.php');
-        $classes[] = array('\Zend\Mail\Message', 'Zend/Mail/Message.php');
-        $classes[] = array('\namespace\package\Class_Name', 'namespace/package/Class/Name.php');
-        $classes[] = array('\namespace\package_name\Class_Name', 'namespace/package_name/Class/Name.php');
-        $classes[] = array('Lunr\Core\Tests\PSR0TestFile', 'Lunr/Core/Tests/PSR0TestFile.php');
-        $classes[] = array('Resque', 'Resque.php');
+        $classes   = [];
+        $classes[] = ['\Doctrine\Common\IsolatedClassLoader', 'Doctrine/Common/IsolatedClassLoader.php'];
+        $classes[] = ['\Symfony\Core\Request', 'Symfony/Core/Request.php'];
+        $classes[] = ['\Zend\Acl', 'Zend/Acl.php'];
+        $classes[] = ['\Zend\Mail\Message', 'Zend/Mail/Message.php'];
+        $classes[] = ['\namespace\package\Class_Name', 'namespace/package/Class/Name.php'];
+        $classes[] = ['\namespace\package_name\Class_Name', 'namespace/package_name/Class/Name.php'];
+        $classes[] = ['Lunr\Core\Tests\PSR0TestFile', 'Lunr/Core/Tests/PSR0TestFile.php'];
+        $classes[] = ['Resque', 'Resque.php'];
 
         return $classes;
     }
@@ -328,8 +368,8 @@ class AutoloaderTest extends PHPUnit_Framework_TestCase
      */
     public function fileProvider()
     {
-        $files   = array();
-        $files[] = array('Lunr\Core\Lunr01TestFile', 'system/libraries/core/class.lunr01testfile.inc.php');
+        $files   = [];
+        $files[] = ['Lunr\Core\Lunr01TestFile', 'system/libraries/core/class.lunr01testfile.inc.php'];
 
         return $files;
     }
diff --git a/tests/statics/Core/PSR-4/PSR4TestFile.php b/tests/statics/Core/PSR-4/PSR4TestFile.php
new file mode 100644
index 0000000000000000000000000000000000000000..0b641748038c4cf4c0af5d1473af23626d781493
--- /dev/null
+++ b/tests/statics/Core/PSR-4/PSR4TestFile.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * This file contains the PSR4TestFile.php
+ *
+ * So basically it's empty
+ *
+ * @package Tests\statics
+ * @author  Sean Molenaar<sean@seanmolenaar.eu>
+ */
\ No newline at end of file
diff --git a/tests/statics/Core/PSR4TestFile.php b/tests/statics/Core/PSR4TestFile.php
new file mode 100644
index 0000000000000000000000000000000000000000..0b641748038c4cf4c0af5d1473af23626d781493
--- /dev/null
+++ b/tests/statics/Core/PSR4TestFile.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * This file contains the PSR4TestFile.php
+ *
+ * So basically it's empty
+ *
+ * @package Tests\statics
+ * @author  Sean Molenaar<sean@seanmolenaar.eu>
+ */
\ No newline at end of file
