diff --git a/lib/SimpleSAML/Module.php b/lib/SimpleSAML/Module.php
index be9cdbbdbbb433c5b3099fa17eab1581207c86ef..22b7f2ea87d7377d854c00b18c0df4835f7f4d21 100644
--- a/lib/SimpleSAML/Module.php
+++ b/lib/SimpleSAML/Module.php
@@ -4,12 +4,91 @@
 /**
  * Helper class for accessing information about modules.
  *
- * @author Olav Morken, UNINETT AS.
+ * @author Olav Morken <olav.morken@uninett.no>, UNINETT AS.
+ * @author Boy Baukema, SURFnet.
+ * @author Jaime Perez <jaime.perez@uninett.no>, UNINETT AS.
  * @package SimpleSAMLphp
  */
 class SimpleSAML_Module
 {
 
+    /**
+     * Autoload function for SimpleSAMLphp modules following PSR-0.
+     *
+     * @param string $className Name of the class.
+     *
+     * TODO: this autoloader should be removed once everything has been migrated to namespaces.
+     */
+    public static function autoloadPSR0($className)
+    {
+        $modulePrefixLength = strlen('sspmod_');
+        $classPrefix = substr($className, 0, $modulePrefixLength);
+        if ($classPrefix !== 'sspmod_') {
+            return;
+        }
+
+        $modNameEnd = strpos($className, '_', $modulePrefixLength);
+        $module     = substr($className, $modulePrefixLength, $modNameEnd - $modulePrefixLength);
+        $path       = explode('_', substr($className, $modNameEnd + 1));
+
+        if (!self::isModuleEnabled($module)) {
+            return;
+        }
+
+        $file = self::getModuleDir($module).'/lib/'.join('/', $path).'.php';
+        if (file_exists($file)) {
+            require_once($file);
+        }
+
+        if (!class_exists($className, false)) {
+            // the file exists, but the class is not defined. Is it using namespaces?
+            $nspath = join('\\', $path);
+            if (class_exists('SimpleSAML\Module\\'.$module.'\\'.$nspath)) {
+                // the class has been migrated, create an alias and warn about it
+                SimpleSAML_Logger::warning(
+                    "The class '$className' is now using namespaces, please use 'SimpleSAML\\Module\\$module\\".
+                    "$nspath' instead."
+                );
+                class_alias("SimpleSAML\\Module\\$module\\$nspath", $className);
+            }
+        }
+    }
+
+
+    /**
+     * Autoload function for SimpleSAMLphp modules following PSR-4.
+     *
+     * @param string $className Name of the class.
+     */
+    public static function autoloadPSR4($className)
+    {
+        $elements = explode('\\', $className);
+        if ($elements[0] === '') { // class name starting with /, ignore
+            array_shift($elements);
+        }
+        if (count($elements) < 4) {
+            return; // it can't be a module
+        }
+        if (array_shift($elements) !== 'SimpleSAML') {
+            return; // the first element is not "SimpleSAML"
+        }
+        if (array_shift($elements) !== 'Module') {
+            return; // the second element is not "module"
+        }
+
+        // this is a SimpleSAMLphp module following PSR-4
+        $module = array_shift($elements);
+        if (!self::isModuleEnabled($module)) {
+            return; // module not enabled, avoid giving out any information at all
+        }
+
+        $file = self::getModuleDir($module).'/lib/'.implode('/', $elements).'.php';
+
+        if (file_exists($file)) {
+            require_once($file);
+        }
+    }
+
 
     /**
      * Retrieve the base directory for a module.
@@ -32,7 +111,7 @@ class SimpleSAML_Module
     /**
      * Determine whether a module is enabled.
      *
-     * Will return false if the given module doesn't exists.
+     * Will return false if the given module doesn't exist.
      *
      * @param string $module Name of the module
      *
diff --git a/lib/_autoload_modules.php b/lib/_autoload_modules.php
index 77bfd81d8e8f20be592ab5726965bfcac6e2a6aa..62aa262e4c9ca797271871a63ab57c2991ebc5b3 100644
--- a/lib/_autoload_modules.php
+++ b/lib/_autoload_modules.php
@@ -1,89 +1,12 @@
 <?php
 
 /**
- * This file implements a autoloader for SimpleSAMLphp modules.
+ * This file registers an autoloader for SimpleSAMLphp modules.
  *
  * @author Boy Baukema, SURFnet
  * @author Jaime Perez <jaime.perez@uninett.no>, UNINETT
  * @package SimpleSAMLphp
  */
 
-/**
- * Autoload function for SimpleSAMLphp modules following PSR-0.
- *
- * @param string $className Name of the class.
- *
- * TODO: this autoloader should be removed once everything has been migrated to namespaces.
- */
-function SimpleSAML_autoload_psr0($className)
-{
-    $modulePrefixLength = strlen('sspmod_');
-    $classPrefix = substr($className, 0, $modulePrefixLength);
-    if ($classPrefix !== 'sspmod_') {
-        return;
-    }
-
-    $modNameEnd = strpos($className, '_', $modulePrefixLength);
-    $module     = substr($className, $modulePrefixLength, $modNameEnd - $modulePrefixLength);
-    $path       = explode('_', substr($className, $modNameEnd + 1));
-
-    if (!SimpleSAML_Module::isModuleEnabled($module)) {
-        return;
-    }
-
-    $file = SimpleSAML_Module::getModuleDir($module).'/lib/'.join('/', $path).'.php';
-    if (file_exists($file)) {
-        require_once($file);
-    }
-
-    if (!class_exists($className, false)) {
-        // the file exists, but the class is not defined. Is it using namespaces?
-        $nspath = join('\\', $path);
-        if (class_exists('SimpleSAML\Module\\'.$module.'\\'.$nspath)) {
-            // the class has been migrated, create an alias and warn about it
-            SimpleSAML_Logger::warning(
-                "The class '$className' is now using namespaces, please use 'SimpleSAML\\Module\\$module\\".
-                "$nspath' instead."
-            );
-            class_alias("SimpleSAML\\Module\\$module\\$nspath", $className);
-        }
-    }
-}
-
-
-/**
- * Autoload function for SimpleSAMLphp modules following PSR-4.
- *
- * @param string $className Name of the class.
- */
-function SimpleSAML_autoload_psr4($className)
-{
-    $elements = explode('\\', $className);
-    if ($elements[0] === '') { // class name starting with /, ignore
-        array_shift($elements);
-    }
-    if (count($elements) < 4) {
-        return; // it can't be a module
-    }
-    if (array_shift($elements) !== 'SimpleSAML') {
-        return; // the first element is not "SimpleSAML"
-    }
-    if (array_shift($elements) !== 'Module') {
-        return; // the second element is not "module"
-    }
-
-    // this is a SimpleSAMLphp module following PSR-4
-    $module = array_shift($elements);
-    if (!SimpleSAML_Module::isModuleEnabled($module)) {
-        return; // module not enabled, avoid giving out any information at all
-    }
-
-    $file = SimpleSAML_Module::getModuleDir($module).'/lib/'.implode('/', $elements).'.php';
-
-    if (file_exists($file)) {
-        require_once($file);
-    }
-}
-
-spl_autoload_register('SimpleSAML_autoload_psr0');
-spl_autoload_register('SimpleSAML_autoload_psr4');
+spl_autoload_register(array('SimpleSAML_Module', 'autoloadPSR0'));
+spl_autoload_register(array('SimpleSAML_Module', 'autoloadPSR4'));