diff --git a/lib/SimpleSAML/Configuration.php b/lib/SimpleSAML/Configuration.php
index 1f979e4919714b4a80efe2aadb78112d95424c4a..e8ee791558e92bfc6d90b39d609423653872ecd7 100644
--- a/lib/SimpleSAML/Configuration.php
+++ b/lib/SimpleSAML/Configuration.php
@@ -56,6 +56,51 @@ class SimpleSAML_Configuration {
 		return $this->configuration[$name];
 	}
 
+
+	/* Retrieve the base directory for this simpleSAMLphp installation.
+	 * This function first checks the 'basedir' configuration option. If
+	 * this option is undefined or NULL, then we fall back to looking at
+	 * the current filename.
+	 *
+	 * Returns:
+	 *  The absolute path to the base directory for this simpleSAMLphp
+	 *  installation. This path will always end with a slash.
+	 */
+	public function getBaseDir() {
+		/* Check if a directory is configured in the configuration
+		 * file.
+		 */
+		$dir = $this->getValue('basedir');
+		if($dir !== NULL) {
+			/* Add trailing slash if it is missing. */
+			if(substr($dir, -1) !== '/') {
+				$dir .= '/';
+			}
+
+			return $dir;
+		}
+
+		/* The directory wasn't set in the configuration file. Our
+		 * path is <base directory>/lib/SimpleSAML/Configuration.php
+		 */
+
+		$dir = __FILE__;
+		assert('basename($dir) === "Configuration.php"');
+
+		$dir = dirname($dir);
+		assert('basename($dir) === "SimpleSAML"');
+
+		$dir = dirname($dir);
+		assert('basename($dir) === "lib"');
+
+		$dir = dirname($dir);
+
+		/* Add trailing slash. */
+		$dir .= '/';
+
+		return $dir;
+	}
+
 }
 
 ?>
\ No newline at end of file