diff --git a/oauth-2.0/resourceserver-filter/src/main/java/org/apache/oltu/oauth2/rsfilter/OAuthFilter.java b/oauth-2.0/resourceserver-filter/src/main/java/org/apache/oltu/oauth2/rsfilter/OAuthFilter.java
index 804867e..4cdd1bf 100644
--- a/oauth-2.0/resourceserver-filter/src/main/java/org/apache/oltu/oauth2/rsfilter/OAuthFilter.java
+++ b/oauth-2.0/resourceserver-filter/src/main/java/org/apache/oltu/oauth2/rsfilter/OAuthFilter.java
@@ -65,9 +65,9 @@
     public void init(FilterConfig filterConfig) throws ServletException {
 
         provider = OAuthUtils
-            .initiateServletContext(filterConfig.getServletContext(), OAUTH_RS_PROVIDER_CLASS,
+            .initiateServletContext(filterConfig, OAUTH_RS_PROVIDER_CLASS,
                 OAuthRSProvider.class);
-        realm = filterConfig.getServletContext().getInitParameter(RS_REALM);
+        realm = filterConfig.getInitParameter(RS_REALM);
         if (OAuthUtils.isEmpty(realm)) {
             realm = RS_REALM_DEFAULT;
         }
diff --git a/oauth-2.0/resourceserver-filter/src/main/java/org/apache/oltu/oauth2/rsfilter/OAuthUtils.java b/oauth-2.0/resourceserver-filter/src/main/java/org/apache/oltu/oauth2/rsfilter/OAuthUtils.java
index 1276f77..55060b0 100644
--- a/oauth-2.0/resourceserver-filter/src/main/java/org/apache/oltu/oauth2/rsfilter/OAuthUtils.java
+++ b/oauth-2.0/resourceserver-filter/src/main/java/org/apache/oltu/oauth2/rsfilter/OAuthUtils.java
@@ -21,6 +21,7 @@
 
 package org.apache.oltu.oauth2.rsfilter;
 
+import javax.servlet.FilterConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 
@@ -31,34 +32,34 @@
  */
 public class OAuthUtils {
 
-    public static <T> T initiateServletContext(ServletContext context, String key, Class<T> expectedClass)
+    public static <T> T initiateServletContext(FilterConfig config, String key, Class<T> expectedClass)
         throws ServletException {
 
-        T provider = (T)context.getAttribute(key);
+        T provider = (T) config.getServletContext().getAttribute(key);
 
         if (provider != null) {
             return provider;
         }
 
-        provider = (T)loadObject(context, key, expectedClass);
+        provider = (T) loadObject(config, key, expectedClass);
 
         // set the provider and validator
-        context.setAttribute(key, provider);
+        config.getServletContext().setAttribute(key, provider);
 
         return provider;
     }
 
-    public static Object loadObject(ServletContext context, String classParamName, Class expectedClass)
+    public static <T> T loadObject(FilterConfig config, String classParamName, Class<T> expectedClass)
         throws ServletException {
 
-        Object ob = null;
+        T ob = null;
 
-        String providerClassName = context.getInitParameter(classParamName);
+        String providerClassName = config.getInitParameter(classParamName);
         if (isEmpty(providerClassName)) {
             throw new ServletException(classParamName + " context param required");
         }
         try {
-            Class<?> clazz = Class.forName(providerClassName);
+            Class<T> clazz = (Class<T>) Class.forName(providerClassName);
             if (!expectedClass.isAssignableFrom(clazz)) {
                 throw new ServletException(classParamName + " class: " + providerClassName
                     + " must be an instance of: " + expectedClass.getName());
@@ -72,12 +73,11 @@
         return ob;
     }
 
-    public static Object createObjectFromClassName(Class clazz)
-        throws IllegalAccessException, InstantiationException {
+    public static <T> T createObjectFromClassName(Class<T> clazz) throws IllegalAccessException, InstantiationException {
         return clazz.newInstance();
     }
 
     public static boolean isEmpty(String value) {
-        return value == null || "".equals(value);
+        return value == null || value.isEmpty();
     }
 }
