diff --git a/src/main/java/de/thm/arsnova/config/SecurityConfig.java b/src/main/java/de/thm/arsnova/config/SecurityConfig.java
index 624a628b9ff54974d673dec58a5eb08f9aa83a47..cf549a2f5389167769197a7188a70d2e9977b16b 100644
--- a/src/main/java/de/thm/arsnova/config/SecurityConfig.java
+++ b/src/main/java/de/thm/arsnova/config/SecurityConfig.java
@@ -36,6 +36,7 @@ import org.slf4j.LoggerFactory;
 import org.slf4j.event.Level;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.AdviceMode;
 import org.springframework.context.annotation.Bean;
@@ -163,7 +164,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
 			if (providerProperties.getOidc().stream().anyMatch(p -> p.isEnabled())
 					|| providerProperties.getOauth().values().stream().anyMatch(p -> p.isEnabled())) {
-				http.addFilterAfter(oauthCallbackFilter(), CasAuthenticationFilter.class);
+				http.addFilterAfter(oauthCallbackFilter(), UsernamePasswordAuthenticationFilter.class);
 			}
 		}
 	}
@@ -373,6 +374,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 	// LDAP Authentication Configuration
 
 	@Bean
+	@ConditionalOnProperty(
+			name = "ldap[0].enabled",
+			prefix = AuthenticationProviderProperties.PREFIX,
+			havingValue = "true")
 	public LdapAuthenticationProvider ldapAuthenticationProvider() {
 		final LdapAuthenticationProvider ldapAuthenticationProvider =
 				new LdapAuthenticationProvider(ldapAuthenticator(), ldapAuthoritiesPopulator());
@@ -382,6 +387,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 	}
 
 	@Bean
+	@ConditionalOnProperty(
+			name = "ldap[0].enabled",
+			prefix = AuthenticationProviderProperties.PREFIX,
+			havingValue = "true")
 	public LdapContextSource ldapContextSource() {
 		final AuthenticationProviderProperties.Ldap ldapProperties = providerProperties.getLdap().get(0);
 		final DefaultSpringSecurityContextSource contextSource =
@@ -397,6 +406,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 	}
 
 	@Bean
+	@ConditionalOnProperty(
+			name = "ldap[0].enabled",
+			prefix = AuthenticationProviderProperties.PREFIX,
+			havingValue = "true")
 	public LdapAuthenticator ldapAuthenticator() {
 		final AuthenticationProviderProperties.Ldap ldapProperties = providerProperties.getLdap().get(0);
 		final BindAuthenticator authenticator = new BindAuthenticator(ldapContextSource());
@@ -414,11 +427,19 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 	}
 
 	@Bean
+	@ConditionalOnProperty(
+			name = "ldap[0].enabled",
+			prefix = AuthenticationProviderProperties.PREFIX,
+			havingValue = "true")
 	public LdapAuthoritiesPopulator ldapAuthoritiesPopulator() {
 		return new NullLdapAuthoritiesPopulator();
 	}
 
 	@Bean
+	@ConditionalOnProperty(
+			name = "ldap[0].enabled",
+			prefix = AuthenticationProviderProperties.PREFIX,
+			havingValue = "true")
 	public LdapUserDetailsMapper customLdapUserDetailsMapper() {
 		final AuthenticationProviderProperties.Ldap ldapProperties = providerProperties.getLdap().get(0);
 		logger.debug("ldapUserIdAttr: {}", ldapProperties.getUserIdAttribute());
@@ -429,6 +450,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 	// CAS Authentication Configuration
 
 	@Bean
+	@ConditionalOnProperty(
+			name = "cas.enabled",
+			prefix = AuthenticationProviderProperties.PREFIX,
+			havingValue = "true")
 	public CasAuthenticationProvider casAuthenticationProvider() {
 		final CasAuthenticationProvider authProvider = new CasAuthenticationProvider();
 		authProvider.setAuthenticationUserDetailsService(casUserDetailsService());
@@ -440,11 +465,19 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 	}
 
 	@Bean
+	@ConditionalOnProperty(
+			name = "cas.enabled",
+			prefix = AuthenticationProviderProperties.PREFIX,
+			havingValue = "true")
 	public CasUserDetailsService casUserDetailsService() {
 		return new CasUserDetailsService();
 	}
 
 	@Bean
+	@ConditionalOnProperty(
+			name = "cas.enabled",
+			prefix = AuthenticationProviderProperties.PREFIX,
+			havingValue = "true")
 	public ServiceProperties casServiceProperties() {
 		final ServiceProperties properties = new ServiceProperties();
 		properties.setService(rootUrl + apiPath + CAS_LOGIN_PATH_SUFFIX);
@@ -454,11 +487,19 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 	}
 
 	@Bean
+	@ConditionalOnProperty(
+			name = "cas.enabled",
+			prefix = AuthenticationProviderProperties.PREFIX,
+			havingValue = "true")
 	public Cas20ProxyTicketValidator casTicketValidator() {
 		return new Cas20ProxyTicketValidator(providerProperties.getCas().getHostUrl());
 	}
 
 	@Bean
+	@ConditionalOnProperty(
+			name = "cas.enabled",
+			prefix = AuthenticationProviderProperties.PREFIX,
+			havingValue = "true")
 	public CasAuthenticationEntryPoint casAuthenticationEntryPoint() {
 		final CasAuthenticationEntryPoint entryPoint = new CasAuthenticationEntryPoint();
 		entryPoint.setLoginUrl(providerProperties.getCas().getHostUrl() + "/login");
@@ -468,6 +509,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 	}
 
 	@Bean
+	@ConditionalOnProperty(
+			name = "cas.enabled",
+			prefix = AuthenticationProviderProperties.PREFIX,
+			havingValue = "true")
 	public CasAuthenticationFilter casAuthenticationFilter() throws Exception {
 		final CasAuthenticationFilter filter = new CasAuthenticationFilter();
 		filter.setAuthenticationManager(authenticationManager());
@@ -480,6 +525,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 	}
 
 	@Bean
+	@ConditionalOnProperty(
+			name = "cas.enabled",
+			prefix = AuthenticationProviderProperties.PREFIX,
+			havingValue = "true")
 	public LogoutFilter casLogoutFilter() {
 		final LogoutFilter filter = new LogoutFilter(casLogoutSuccessHandler(), logoutHandler());
 		filter.setLogoutRequestMatcher(new AntPathRequestMatcher("/**" + CAS_LOGOUT_PATH_SUFFIX));
@@ -488,6 +537,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 	}
 
 	@Bean
+	@ConditionalOnProperty(
+			name = "cas.enabled",
+			prefix = AuthenticationProviderProperties.PREFIX,
+			havingValue = "true")
 	public LogoutSuccessHandler casLogoutSuccessHandler() {
 		final CasLogoutSuccessHandler handler = new CasLogoutSuccessHandler();
 		handler.setCasUrl(providerProperties.getCas().getHostUrl());
@@ -535,6 +588,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 	}
 
 	@Bean
+	@ConditionalOnProperty(
+			name = "oidc[0].enabled",
+			prefix = AuthenticationProviderProperties.PREFIX,
+			havingValue = "true")
 	public OidcClient oidcClient() {
 		final AuthenticationProviderProperties.Oidc oidcProperties = providerProperties.getOidc().get(0);
 		final OidcConfiguration config = new OidcConfiguration();
@@ -549,6 +606,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 	}
 
 	@Bean
+	@ConditionalOnProperty(
+			name = "oauth.facebook.enabled",
+			prefix = AuthenticationProviderProperties.PREFIX,
+			havingValue = "true")
 	public FacebookClient facebookClient() {
 		final AuthenticationProviderProperties.Oauth oauthProperties =
 				providerProperties.getOauth().get(FACEBOOK_PROVIDER_ID);
@@ -559,6 +620,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 	}
 
 	@Bean
+	@ConditionalOnProperty(
+			name = "oauth.twitter.enabled",
+			prefix = AuthenticationProviderProperties.PREFIX,
+			havingValue = "true")
 	public TwitterClient twitterClient() {
 		final AuthenticationProviderProperties.Oauth oauthProperties =
 				providerProperties.getOauth().get(TWITTER_PROVIDER_ID);
@@ -569,6 +634,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 	}
 
 	@Bean
+	@ConditionalOnProperty(
+			name = "oauth.google.enabled",
+			prefix = AuthenticationProviderProperties.PREFIX,
+			havingValue = "true")
 	public GoogleOidcClient googleClient() {
 		final AuthenticationProviderProperties.Oauth oauthProperties =
 				providerProperties.getOauth().get(GOOGLE_PROVIDER_ID);
diff --git a/src/main/java/de/thm/arsnova/config/properties/AuthenticationProviderProperties.java b/src/main/java/de/thm/arsnova/config/properties/AuthenticationProviderProperties.java
index 23f16cf1cf63b039522706593e45100d660750f8..4c68035d9210771addf461a177c7e750c0ae4d89 100644
--- a/src/main/java/de/thm/arsnova/config/properties/AuthenticationProviderProperties.java
+++ b/src/main/java/de/thm/arsnova/config/properties/AuthenticationProviderProperties.java
@@ -24,8 +24,10 @@ import java.util.Set;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.core.style.ToStringCreator;
 
-@ConfigurationProperties("security.authentication-providers")
+@ConfigurationProperties(AuthenticationProviderProperties.PREFIX)
 public class AuthenticationProviderProperties {
+	public static final String PREFIX = SecurityProperties.PREFIX + ".authentication-providers";
+
 	public abstract static class Provider {
 		public enum Role {
 			MODERATOR,
diff --git a/src/main/java/de/thm/arsnova/config/properties/CouchDbProperties.java b/src/main/java/de/thm/arsnova/config/properties/CouchDbProperties.java
index e4c807f54add5a619478d0b8c0c4e552bf11f846..674dec13ea1a5f2451dde4f74f79e17ab88f29c2 100644
--- a/src/main/java/de/thm/arsnova/config/properties/CouchDbProperties.java
+++ b/src/main/java/de/thm/arsnova/config/properties/CouchDbProperties.java
@@ -20,8 +20,9 @@ package de.thm.arsnova.config.properties;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
-@ConfigurationProperties("system.couchdb")
+@ConfigurationProperties(CouchDbProperties.PREFIX)
 public class CouchDbProperties {
+	public static final String PREFIX = SystemProperties.PREFIX + ".couchdb";
 	private String host;
 	private int port;
 	private String dbName;
diff --git a/src/main/java/de/thm/arsnova/config/properties/MessageBrokerProperties.java b/src/main/java/de/thm/arsnova/config/properties/MessageBrokerProperties.java
index a8a549b539de131ea59c2cffc660aad2dac7776e..d884c84d65bdc6f7ebbad8546acf88a061b62f78 100644
--- a/src/main/java/de/thm/arsnova/config/properties/MessageBrokerProperties.java
+++ b/src/main/java/de/thm/arsnova/config/properties/MessageBrokerProperties.java
@@ -20,8 +20,10 @@ package de.thm.arsnova.config.properties;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
-@ConfigurationProperties("system.message-broker")
+@ConfigurationProperties(MessageBrokerProperties.PREFIX)
 public class MessageBrokerProperties {
+	public static final String PREFIX = SystemProperties.PREFIX + ".message-broker";
+
 	public static class Relay {
 		private boolean enabled;
 		private String host;
diff --git a/src/main/java/de/thm/arsnova/config/properties/SecurityProperties.java b/src/main/java/de/thm/arsnova/config/properties/SecurityProperties.java
index 90a8a30706358e812ef041c1017b2fa52f9c36b0..7257b7fa0b18c83140aeb7c67b4dfaea4e64dc1f 100644
--- a/src/main/java/de/thm/arsnova/config/properties/SecurityProperties.java
+++ b/src/main/java/de/thm/arsnova/config/properties/SecurityProperties.java
@@ -24,8 +24,10 @@ import java.util.List;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.convert.DurationUnit;
 
-@ConfigurationProperties("security")
+@ConfigurationProperties(SecurityProperties.PREFIX)
 public class SecurityProperties {
+	public static final String PREFIX = "security";
+
 	public static class Jwt {
 		private String serverId;
 		private String secret;
diff --git a/src/main/java/de/thm/arsnova/config/properties/SystemProperties.java b/src/main/java/de/thm/arsnova/config/properties/SystemProperties.java
index b06182ddf8e454c5ff7adfc3d34fbd8f5ac345f3..46aa88cd8819b8592bc4d83393a979199e613616 100644
--- a/src/main/java/de/thm/arsnova/config/properties/SystemProperties.java
+++ b/src/main/java/de/thm/arsnova/config/properties/SystemProperties.java
@@ -20,8 +20,10 @@ package de.thm.arsnova.config.properties;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
-@ConfigurationProperties("system")
+@ConfigurationProperties(SystemProperties.PREFIX)
 public class SystemProperties {
+	public static final String PREFIX = "system";
+
 	public static class Api {
 		private String path;
 		private boolean indentResponseBody;
diff --git a/src/main/java/de/thm/arsnova/security/CasUserDetailsService.java b/src/main/java/de/thm/arsnova/security/CasUserDetailsService.java
index 59dce24a0a2362e78071cc48ad711d1fcfee0e81..99dafe370e32423cf870e7c5d8e040763954d79d 100644
--- a/src/main/java/de/thm/arsnova/security/CasUserDetailsService.java
+++ b/src/main/java/de/thm/arsnova/security/CasUserDetailsService.java
@@ -26,7 +26,6 @@ import org.springframework.security.cas.userdetails.AbstractCasAssertionUserDeta
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.stereotype.Service;
 
 import de.thm.arsnova.model.UserProfile;
 import de.thm.arsnova.service.UserService;
@@ -34,7 +33,6 @@ import de.thm.arsnova.service.UserService;
 /**
  * Class to load a user based on the results from CAS.
  */
-@Service
 public class CasUserDetailsService extends AbstractCasAssertionUserDetailsService {
 	@Autowired
 	private UserService userService;
diff --git a/src/main/java/de/thm/arsnova/security/pac4j/OauthCallbackFilter.java b/src/main/java/de/thm/arsnova/security/pac4j/OauthCallbackFilter.java
index c6dc76eafad0c0dc5ca3acaaed560d5a15c4130f..61d39df76e7625b8e1b46dc61312db8a90d74527 100644
--- a/src/main/java/de/thm/arsnova/security/pac4j/OauthCallbackFilter.java
+++ b/src/main/java/de/thm/arsnova/security/pac4j/OauthCallbackFilter.java
@@ -40,14 +40,12 @@ import org.springframework.security.core.Authentication;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
 import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
-import org.springframework.stereotype.Component;
 
 /**
  * Handles callback requests by login redirects from OAuth providers.
  *
  * @author Daniel Gerhardt
  */
-@Component
 public class OauthCallbackFilter extends AbstractAuthenticationProcessingFilter {
 	private static final Logger logger = LoggerFactory.getLogger(OauthCallbackFilter.class);
 	private final ClientFinder clientFinder = new DefaultCallbackClientFinder();