diff --git a/src/main/java/org/apache/sling/extensions/mdc/internal/MDCInsertingFilter.java b/src/main/java/org/apache/sling/extensions/mdc/internal/MDCInsertingFilter.java
index 3f68a90..fcb8145 100644
--- a/src/main/java/org/apache/sling/extensions/mdc/internal/MDCInsertingFilter.java
+++ b/src/main/java/org/apache/sling/extensions/mdc/internal/MDCInsertingFilter.java
@@ -116,34 +116,34 @@
     }
 
     private void insertIntoMDC(ServletRequest request) {
-        MDC.put(REQUEST_REMOTE_HOST_MDC_KEY, request.getRemoteHost());
+        nullSafePut(REQUEST_REMOTE_HOST_MDC_KEY, request.getRemoteHost());
 
         if (request instanceof HttpServletRequest) {
             HttpServletRequest httpRequest = (HttpServletRequest) request;
-            MDC.put(REQUEST_REQUEST_URI, httpRequest.getRequestURI());
+            nullSafePut(REQUEST_REQUEST_URI, httpRequest.getRequestURI());
 
             StringBuffer requestURL = httpRequest.getRequestURL();
             if (requestURL != null) {
-                MDC.put(REQUEST_REQUEST_URL, requestURL.toString());
+                nullSafePut(REQUEST_REQUEST_URL, requestURL.toString());
             }
 
-            MDC.put(REQUEST_QUERY_STRING, httpRequest.getQueryString());
-            MDC.put(REQUEST_USER_AGENT_MDC_KEY, httpRequest.getHeader("User-Agent"));
-            MDC.put(REQUEST_X_FORWARDED_FOR, httpRequest.getHeader("X-Forwarded-For"));
+            nullSafePut(REQUEST_QUERY_STRING, httpRequest.getQueryString());
+            nullSafePut(REQUEST_USER_AGENT_MDC_KEY, httpRequest.getHeader("User-Agent"));
+            nullSafePut(REQUEST_X_FORWARDED_FOR, httpRequest.getHeader("X-Forwarded-For"));
 
             for(String paramName : parameterNames){
-                MDC.put(paramName,httpRequest.getParameter(paramName));
+                nullSafePut(paramName,httpRequest.getParameter(paramName));
             }
 
             for(String headerName :headerNames){
-                MDC.put(headerName, httpRequest.getHeader(headerName));
+                nullSafePut(headerName, httpRequest.getHeader(headerName));
             }
 
             Cookie[] cookies = httpRequest.getCookies();
             if(cookies != null){
                 for(Cookie c : cookies){
                     if(cookieNames.contains(c.getName())){
-                        MDC.put(c.getName(),c.getValue());
+                        nullSafePut(c.getName(),c.getValue());
                     }
                 }
             }
@@ -211,6 +211,12 @@
         }
     }
 
+    private void nullSafePut(String key,String value){
+        if(key != null && value != null){
+            MDC.put(key,value);
+        }
+    }
+
     private static Set<String> toTrimmedValues(Map<String,Object> config,String propName){
         String[] values = PropertiesUtil.toStringArray(config.get(propName),EMPTY_VALUE);
         Set<String> result = new HashSet<String>(values.length);
diff --git a/src/main/java/org/apache/sling/extensions/mdc/internal/SlingMDCFilter.java b/src/main/java/org/apache/sling/extensions/mdc/internal/SlingMDCFilter.java
index 9b3044b..1b3c1a5 100644
--- a/src/main/java/org/apache/sling/extensions/mdc/internal/SlingMDCFilter.java
+++ b/src/main/java/org/apache/sling/extensions/mdc/internal/SlingMDCFilter.java
@@ -37,7 +37,6 @@
 
     private static final String[] DEFAULT_KEY_NAMES = {
             SLING_USER,
-            JCR_SESSION_ID
     };
 
     public void init(FilterConfig filterConfig) throws ServletException {
@@ -67,11 +66,6 @@
         if(rr.getUserID() != null){
             MDC.put(SLING_USER,rr.getUserID());
         }
-
-        Session session = rr.adaptTo(Session.class);
-        if(session != null){
-            MDC.put(JCR_SESSION_ID,session.toString());
-        }
     }
 
     public void destroy() {
