diff --git a/hovercraft.erl b/hovercraft.erl
index 58c6916..8745d60 100644
--- a/hovercraft.erl
+++ b/hovercraft.erl
@@ -221,7 +221,9 @@ query_view(DbName, DesignName, ViewName, ViewFoldFun, #view_query_args{
             direction = Dir,
             group_level = GroupLevel,
             start_key = StartKey,
-            start_docid = StartDocId
+            start_docid = StartDocId,
+            end_key = EndKey,
+            end_docid = EndDocId
         }=QueryArgs) ->
     {ok, Db} = open_db(DbName),
     % get view reference
@@ -230,6 +232,9 @@ query_view(DbName, DesignName, ViewName, ViewFoldFun, #view_query_args{
         {ok, View, _Group} ->
             {ok, RowCount} = couch_view:get_row_count(View),
             Start = {StartKey, StartDocId},
+            %If EndKey is defined, couchdb expects a tuple {EndKey, EndDocId} to "make_key_in_end_range". 
+            %If EndKey is undefined, couchdb expects atom undefined. 
+            End = case EndKey == undefined of true -> undefined; false -> {EndKey, EndDocId} end,
             UpdateSeq = couch_db:get_update_seq(Db),
             FoldlFun = couch_httpd_view:make_view_fold_fun(nil, 
                 QueryArgs, <<"">>, Db, UpdateSeq, RowCount, 
@@ -239,10 +244,13 @@ query_view(DbName, DesignName, ViewName, ViewFoldFun, #view_query_args{
                     send_row = make_map_row_fold_fun(ViewFoldFun)
                 }),
             FoldAccInit = {Limit, SkipCount, undefined, []},
-            {ok, _, {_Lim, _, _, {Offset, ViewFoldAcc}}} = 
-                couch_view:fold(View, FoldlFun, FoldAccInit,
-                                [{dir, Dir}, {start_key, Start}]),
-            {ok, {RowCount, Offset, ViewFoldAcc}};
+            case couch_view:fold(View, FoldlFun, FoldAccInit, [{dir, Dir}, {start_key, Start}, {end_key, End}]) of
+                {ok, _, {_Lim, _, _, {Offset, ViewFoldAcc}}} ->
+                    {ok, {RowCount, Offset, ViewFoldAcc}};
+                {ok, _, FoldAccInit} ->
+                    %direction fwd and end_key lower than start_key or vice versa?
+                    {ok, {RowCount, RowCount, []}}
+            end;
         {not_found, Reason} ->
             case couch_view:get_reduce_view(Db, DesignId, ViewName, Stale) of
                 {ok, View, _Group} ->