diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java b/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java
index fa2619c..e32f72d 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java
@@ -15,6 +15,8 @@ package ch.qos.logback.classic.util;
 
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.List;
@@ -45,8 +47,10 @@ public class ContextInitializer {
   final public static String AUTOCONFIG_FILE = "logback.xml";
   final public static String TEST_AUTOCONFIG_FILE = "logback-test.xml";
   final public static String CONFIG_FILE_PROPERTY = "logback.configurationFile";
+  final public static String CONFIG_CLASS_PROPERTY = "logback.configurationClass";
   final public static String STATUS_LISTENER_CLASS = "logback.statusListenerClass";
   final public static String SYSOUT = "SYSOUT";
+  final public static String CONFIGURE_METHOD_NAME = "configure";
 
   final LoggerContext loggerContext;
 
@@ -143,14 +147,63 @@ public class ContextInitializer {
 
   public void autoConfig() throws JoranException {
     StatusListenerConfigHelper.installIfAsked(loggerContext);
-    URL url = findURLOfDefaultConfigurationFile(true);
-    if (url != null) {
-      configureByResource(url);
+    Class<?> configurationClass = findConfigurationClassFromSystemProperties();
+    if (configurationClass != null) {
+      configureByClass(configurationClass);
     } else {
-      BasicConfigurator.configure(loggerContext);
+      URL url = findURLOfDefaultConfigurationFile(true);
+      if (url != null) {
+        configureByResource(url);
+      } else {
+        BasicConfigurator.configure(loggerContext);
+      }
+    }
+  }
+  
+  private void configureByClass(Class<?> configurationClass) {
+      Method configureMethod = findConfigureMethod(configurationClass);
+      try {
+        configureMethod.invoke(null, loggerContext);
+      } catch (IllegalAccessException e) {
+          StatusManager sm = loggerContext.getStatusManager();
+          sm.add(new ErrorStatus("Failed to execute [" + configureMethod + "]",
+                 loggerContext, e));
+      } catch (InvocationTargetException e) {
+          StatusManager sm = loggerContext.getStatusManager();
+          sm.add(new ErrorStatus("Failed to execute [" + configureMethod + "]",
+                    loggerContext, e));
+      }
+  }
+
+  private Class<?> findConfigurationClassFromSystemProperties() {
+    String logbackConfigurationClassName = OptionHelper.getSystemProperty(CONFIG_CLASS_PROPERTY);
+    if (logbackConfigurationClassName == null) {
+      return null;
+    }
+    
+    try {
+      Class<?> logbackConfigurationClass = Loader.loadClass(logbackConfigurationClassName);
+      Method configureMethod = findConfigureMethod(logbackConfigurationClass);
+      return (configureMethod == null) ? null : logbackConfigurationClass;
+    } catch (ClassNotFoundException e) {
+      StatusManager sm = loggerContext.getStatusManager();
+      sm.add(new WarnStatus("Could NOT load configuration class [" + logbackConfigurationClassName + "]",
+                loggerContext, e));
+      return null;
     }
   }
 
+  private Method findConfigureMethod(Class<?> logbackConfigurationClass) {
+      try {
+        return logbackConfigurationClass.getMethod(CONFIGURE_METHOD_NAME, LoggerContext.class);
+      } catch (NoSuchMethodException e) {
+        StatusManager sm = loggerContext.getStatusManager();
+        sm.add(new WarnStatus("Configuration class [" + logbackConfigurationClass.getName() + "] does not contain a method with the following signature:  public static void configure(LoggerContext);",
+                  loggerContext, e));
+        return null;
+      }
+  }
+
   private void multiplicityWarning(String resourceName, ClassLoader classLoader) {
     List<URL> urlList = null;
     StatusManager sm = loggerContext.getStatusManager();
