diff --git a/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java b/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java
index 74d65e5..2b8d6f4 100644
--- a/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java
+++ b/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java
@@ -820,13 +820,6 @@
         return AdaptableUtil.adaptToWithoutCaching(this, type);
     }
 
-    // --- unsupported operations ---
-
-    @Override
-    public RequestProgressTracker getRequestProgressTracker() {
-        throw new UnsupportedOperationException();
-    }
-
     @Override
     public String getResponseContentType() {
         return responseContentType;
@@ -842,6 +835,38 @@
     }
 
     @Override
+    public BufferedReader getReader() {
+        if (getInputStreamCalled) {
+            throw new IllegalStateException();
+        }
+        getReaderCalled = true;
+        if (this.content == null) {
+            return new BufferedReader(new StringReader(""));
+        } else {
+            String content;
+            try {
+                if (characterEncoding == null) {
+                    content = new String(this.content, Charset.defaultCharset());
+                } else {
+                    content = new String(this.content, characterEncoding);
+                }
+            } catch (UnsupportedEncodingException e) {
+                content = new String(this.content, Charset.defaultCharset());
+            }
+            return new BufferedReader(new StringReader(content));
+        }
+
+    }
+
+
+    // --- unsupported operations ---
+
+    @Override
+    public RequestProgressTracker getRequestProgressTracker() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
     public String getPathTranslated() {
         throw new UnsupportedOperationException();
     }
@@ -907,30 +932,6 @@
     }
 
     @Override
-    public BufferedReader getReader() {
-        if (getInputStreamCalled) {
-            throw new IllegalStateException();
-        }
-        getReaderCalled = true;
-        if (this.content == null) {
-            return new BufferedReader(new StringReader(""));
-        } else {
-            String content;
-            try {
-                if (characterEncoding == null) {
-                    content = new String(this.content, Charset.defaultCharset());
-                } else {
-                    content = new String(this.content, characterEncoding);
-                }
-            } catch (UnsupportedEncodingException e) {
-                content = new String(this.content, Charset.defaultCharset());
-            }
-            return new BufferedReader(new StringReader(content));
-        }
-
-    }
-
-    @Override
     public String getRealPath(String path) {
         throw new UnsupportedOperationException();
     }
