diff --git a/jspwiki-war/src/main/java/org/apache/wiki/auth/SecurityVerifier.java b/jspwiki-war/src/main/java/org/apache/wiki/auth/SecurityVerifier.java
index e71afe8..7fe11a5 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/auth/SecurityVerifier.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/auth/SecurityVerifier.java
@@ -504,7 +504,7 @@
         {
             db = m_engine.getGroupManager().getGroupDatabase();
         }
-        catch ( WikiSecurityException e )
+        catch ( WikiException e )
         {
             m_session.addMessage( ERROR_GROUPS, "Could not retrieve GroupManager: " + e.getMessage() );
         }
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/auth/UserManager.java b/jspwiki-war/src/main/java/org/apache/wiki/auth/UserManager.java
index 98d7f0e..1fa6677 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/auth/UserManager.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/auth/UserManager.java
@@ -154,19 +154,26 @@
 
         try
         {
-            dbClassName = TextUtil.getRequiredProperty( m_engine.getWikiProperties(),
-                                                          PROP_DATABASE );
+            dbClassName = TextUtil.getRequiredProperty( m_engine.getWikiProperties(), PROP_DATABASE );
 
             log.info("Attempting to load user database class "+dbClassName);
-            Class<?> dbClass = ClassUtil.findClass( USERDATABASE_PACKAGE, dbClassName );
-            m_database = (UserDatabase) dbClass.newInstance();
-            m_database.initialize( m_engine, m_engine.getWikiProperties() );
+            
+            m_database = ClassUtil.getWikiProvider(UserDatabase.class, m_engine, m_engine.getWikiProperties(), USERDATABASE_PACKAGE, dbClassName, new DummyUserDatabase(), true);
+            
+//            Class<?> dbClass = ClassUtil.findClass( USERDATABASE_PACKAGE, dbClassName );
+//            m_database = (UserDatabase) dbClass.newInstance();
+//            m_database.initialize( m_engine, m_engine.getWikiProperties() );
             log.info("UserDatabase initialized.");
         }
         catch( NoRequiredPropertyException e )
         {
             log.error( "You have not set the '"+PROP_DATABASE+"'. You need to do this if you want to enable user management by JSPWiki." );
         }
+        catch( WikiException e )
+        {
+            log.error( "Exception initializing user database: " + e.getMessage() );
+        }
+/*
         catch( ClassNotFoundException e )
         {
             log.error( "UserDatabase class " + dbClassName + " cannot be found", e );
@@ -183,6 +190,7 @@
         {
             log.error( "Exception initializing user database: " + e.getMessage() );
         }
+*/
         finally
         {
             if( m_database == null )
diff --git a/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/GroupManager.java b/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/GroupManager.java
index e044f63..c279235 100644
--- a/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/GroupManager.java
+++ b/jspwiki-war/src/main/java/org/apache/wiki/auth/authorize/GroupManager.java
@@ -123,12 +123,12 @@
      * it could not be initialized. In that case, this method throws
      * a {@link org.apache.wiki.api.exceptions.WikiException}. The GroupDatabase
      * is lazily initialized.
-     * @throws org.apache.wiki.auth.WikiSecurityException if the GroupDatabase could
+     * @throws org.apache.wiki.auth.WikiException if the GroupDatabase could
      * not be initialized
      * @return the current GroupDatabase
      * @since 2.3
      */
-    public GroupDatabase getGroupDatabase() throws WikiSecurityException
+    public GroupDatabase getGroupDatabase() throws WikiException
     {
         if ( m_groupDatabase != null )
         {
@@ -147,11 +147,14 @@
                 dbClassName = XMLGroupDatabase.class.getName();
             }
             log.info( "Attempting to load group database class " + dbClassName );
-            Class<?> dbClass = ClassUtil.findClass( "org.apache.wiki.auth.authorize", dbClassName );
-            m_groupDatabase = (GroupDatabase) dbClass.newInstance();
-            m_groupDatabase.initialize( m_engine, m_engine.getWikiProperties() );
+            m_groupDatabase = ClassUtil.getWikiProvider(GroupDatabase.class, m_engine, m_engine.getWikiProperties(), "org.apache.wiki.auth.authorize", dbClassName, null, true);
+            
+//            Class<?> dbClass = ClassUtil.findClass( "org.apache.wiki.auth.authorize", dbClassName );
+//            m_groupDatabase = (GroupDatabase) dbClass.newInstance();
+//            m_groupDatabase.initialize( m_engine, m_engine.getWikiProperties() );
             log.info( "Group database initialized." );
         }
+/*
         catch( ClassNotFoundException e )
         {
             log.error( "GroupDatabase class " + dbClassName + " cannot be found.", e );
@@ -170,13 +173,13 @@
             dbInstantiationError = "Access GroupDatabase class " + dbClassName + " denied";
             cause = e;
         }
+*/
         catch( NoRequiredPropertyException e )
         {
             log.error( "Missing property: " + e.getMessage() + "." );
             dbInstantiationError = "Missing property: " + e.getMessage();
             cause = e;
         }
-
         if( dbInstantiationError != null )
         {
             throw new WikiSecurityException( dbInstantiationError + " Cause: " + (cause != null ? cause.getMessage() : ""), cause );
