diff --git a/lib/SimpleSAML/Database.php b/lib/SimpleSAML/Database.php
index 16df90f5daee5c770c4e9081ec84a5f011f1e521..f9796ad6be0ffeb0091af427110d6394e39fbc98 100644
--- a/lib/SimpleSAML/Database.php
+++ b/lib/SimpleSAML/Database.php
@@ -48,7 +48,7 @@ class SimpleSAML_Database {
 	 */
 	public static function getInstance($altConfig = null) {
 		$config = ($altConfig)? $altConfig : SimpleSAML_Configuration::getInstance();
-		$instanceId = spl_object_hash($config);
+		$instanceId = self::generateInstanceId($config);
 
 		/* Check if we already have initialized the session. */
 		if (isset(self::$instance[$instanceId])) {
@@ -85,6 +85,28 @@ class SimpleSAML_Database {
 		$this->tablePrefix = $config->getString('database.prefix', '');
 	}
 
+	/**
+	 * Generate an Instance ID based on the database
+	 * configuration.
+	 *
+	 * @param $config 			Configuration class
+	 *
+	 * @return string $instanceId
+	 */
+	private static function generateInstanceId($config){
+		$assembledConfig = array(
+			'master' => array(
+				'database.dsn' => $config->getValue('database.dsn'),
+				'database.username' => $config->getValue('database.username'),
+				'database.password' => $config->getValue('database.password'),
+				'database.persistent' => $config->getValue('database.persistent'),
+			),
+			'slaves' => $config->getValue('database.slaves'),
+		);
+
+		return sha1(serialize($assembledConfig));
+	}
+
 	/**
 	 * This function connects to a dabase.
 	 *