diff --git a/DotCMIS/binding/atompub/atompub.cs b/DotCMIS/binding/atompub/atompub.cs
index 286166f..f2de6bc 100644
--- a/DotCMIS/binding/atompub/atompub.cs
+++ b/DotCMIS/binding/atompub/atompub.cs
@@ -1787,15 +1787,15 @@
             url.AddParameter(AtomPubConstants.ParamStreamId, streamId);
 
             // get the content
-            if (offset != null && offset > Int32.MaxValue)
+            if (offset != null && offset > Int64.MaxValue)
             {
-                throw new CmisInvalidArgumentException("Offset >" + Int32.MaxValue.ToString());
+                throw new CmisInvalidArgumentException("Offset >" + Int64.MaxValue.ToString());
             }
-            if (length != null && length > Int32.MaxValue)
+            if (length != null && length > Int64.MaxValue)
             {
-                throw new CmisInvalidArgumentException("Length >" + Int32.MaxValue.ToString());
+                throw new CmisInvalidArgumentException("Length >" + Int64.MaxValue.ToString());
             }
-            HttpUtils.Response resp = HttpUtils.InvokeGET(url, Session, (int?)offset, (int?)length);
+            HttpUtils.Response resp = HttpUtils.InvokeGET(url, Session, offset, length);
 
             // check response code
             if (resp.StatusCode != HttpStatusCode.OK && resp.StatusCode != HttpStatusCode.PartialContent)
diff --git a/DotCMIS/binding/http.cs b/DotCMIS/binding/http.cs
index 0e3fc2f..1dc63eb 100644
--- a/DotCMIS/binding/http.cs
+++ b/DotCMIS/binding/http.cs
@@ -27,6 +27,7 @@
 using DotCMIS.Enums;
 using DotCMIS.Exceptions;
 using DotCMIS.Util;
+using System.Reflection;
 
 namespace DotCMIS.Binding.Impl
 {
@@ -39,7 +40,7 @@
             return Invoke(url, "GET", null, null, session, null, null, null);
         }
 
-        public static Response InvokeGET(UrlBuilder url, BindingSession session, int? offset, int? length)
+        public static Response InvokeGET(UrlBuilder url, BindingSession session, long? offset, long? length)
         {
             return Invoke(url, "GET", null, null, session, offset, length, null);
         }
@@ -60,7 +61,7 @@
         }
 
         private static Response Invoke(UrlBuilder url, String method, String contentType, Output writer, BindingSession session,
-                int? offset, int? length, IDictionary<string, string> headers)
+                long? offset, long? length, IDictionary<string, string> headers)
         {
             try
             {
@@ -114,11 +115,41 @@
                 // range
                 if (offset != null && length != null)
                 {
-                    conn.AddRange(offset ?? 0, offset + length - 1 ?? 0);
+                    if (offset < Int32.MaxValue && offset + length - 1 < Int32.MaxValue)
+                    {
+                        conn.AddRange((int)offset, (int)offset + (int)length - 1);
+                    }
+                    else
+                    {
+                        try
+                        {
+                            MethodInfo mi = conn.GetType().GetMethod("AddRange", new Type[] { typeof(Int64), typeof(Int64) });
+                            mi.Invoke(conn, new object[] { offset, offset + length - 1 });
+                        }
+                        catch (Exception e)
+                        {
+                            throw new CmisInvalidArgumentException("Offset or length too big!", e);
+                        }
+                    }
                 }
                 else if (offset != null)
                 {
-                    conn.AddRange(offset ?? 0);
+                    if (offset < Int32.MaxValue)
+                    {
+                        conn.AddRange((int)offset);
+                    }
+                    else
+                    {
+                        try
+                        {
+                            MethodInfo mi = conn.GetType().GetMethod("AddRange", new Type[] { typeof(Int64) });
+                            mi.Invoke(conn, new object[] { offset });
+                        }
+                        catch (Exception e)
+                        {
+                            throw new CmisInvalidArgumentException("Offset too big!", e);
+                        }
+                    }
                 }
 
                 // compression
