diff --git a/template/controller.tmpl b/template/controller.tmpl
index 96136381..d4fb4ffc 100644
--- a/template/controller.tmpl
+++ b/template/controller.tmpl
@@ -75,10 +75,14 @@ var <%= service %>sController = {};
             ourProjection = <%= service %>sController.buildProjection(projection);
             delete query.select;
         }
-        var limit = query.limit * 1;
-        if(limit){
+        var limit = query.limit * 1 || 50;
+        if (limit) {
             delete query.limit;
         }
+        var skip = query.skip * 1 || 0;
+        if (skip) {
+            delete query.skip;
+        }
         
         var from = query.from;
         var to = query.to;
@@ -89,34 +93,10 @@ var <%= service %>sController = {};
             if(to){
                 delete query.to;
             }else{
-                to = new Date().toISOString();
-            }
-            query.createdAt.$lt = to;
-        }else{
-            query.createdAt = {};
-            query.createdAt.$gt = new Date('1989-03-15T00:00:00').toISOString();
-            if(to){
-                delete query.to;
-            }else{
-                to = new Date().toISOString();
+                to = new Date().toISOString();;
             }
             query.createdAt.$lt = to;
         }
-        var lastId = query.lastId;
-        if(lastId){
-            if(query.desc){
-                query._id = {};
-                query._id.$lt = lastId;
-                delete query.desc;
-            }else{
-                query._id = {};
-                query._id.$gt = lastId;
-            }
-            delete query.lastId;
-        }
-        if(query.desc){
-            delete query.desc;
-        }
         var sort = query.sort; // -fieldName: means descending while fieldName without the minus mean ascending bith by fieldName. eg, '-fieldName1 fieldName2'
         if(sort){
             delete query.sort;
@@ -125,18 +105,19 @@ var <%= service %>sController = {};
         if(populate){
             delete query.populate;
         }
-        var totalResult = <%= service %>s.estimatedDocumentCount(query);
+        var totalResult = <%= service %>s.countDocuments(query);
         var total = <%= service %>s.estimatedDocumentCount({});
         var question = <%= service %>s.find(query);
+if(skip !== 0){
+ question = question.skip(skip)
+}
+       
+if(limit !== 0){
+      totalResult = totalResult.limit(limit);
+        question = question.limit(limit);
+}
+      
 
-        if(limit){
-            totalResult = totalResult.limit(limit);
-            question = question.limit(limit);
-        }else{
-            limit = 50;
-            totalResult = totalResult.limit(limit);
-            question = question.limit(limit);
-        }
         if(sort){
             question = question.sort(sort);
         }
@@ -150,18 +131,17 @@ var <%= service %>sController = {};
                 return [question.select(resp),total,totalResult];
             })
             .spread(function(resp,total,totalResult){
-                var ourLastId;
-                if(resp.length === 0){
-                    ourLastId = null;
-                }else{
-                    ourLastId = resp[resp.length - 1]._id;
-                }
-                var extraData = {};
-                extraData.limit = limit * 1;
-                extraData.total = total;
-                extraData.totalResult = totalResult;
-                extraData.lastId = ourLastId;
-                extraData.isLastPage = (totalResult < limit) ? true : false;
+                var pages = Math.ceil(total / limit)
+                    var remainingPages = Math.ceil((total - (totalResult + skip)) / limit)
+                    totalResult = totalResult + skip
+                    var extraData = {};
+                    extraData.limit = limit * 1;
+                    extraData.total = total;
+                    extraData.totalResult = totalResult > total ? total : totalResult;
+                    extraData.skip = skip;
+                    extraData.currentPage = pages - remainingPages;
+                    extraData.pages = pages;
+                    extraData.isLastPage = (totalResult >= total) ? true : false;
                 res.ok(resp, false, extraData);
             })
             .catch(function(err){
@@ -170,18 +150,19 @@ var <%= service %>sController = {};
         }else{
             q.all([question,total,totalResult])
             .spread(function(resp,total,totalResult){
-                var ourLastId;
-                if(resp.length === 0){
-                    ourLastId = null;
-                }else{
-                    ourLastId = resp[resp.length - 1]._id;
-                }
-                var extraData = {};
-                extraData.limit = limit * 1;
-                extraData.total = total;
-                extraData.lastId = ourLastId;
-                extraData.totalResult = totalResult;
-                extraData.isLastPage = (totalResult < limit) ? true : false;
+                var pages = Math.ceil(total / limit)
+                    var remainingPages = Math.ceil((total - (totalResult + skip)) / limit)
+                    totalResult = totalResult + skip
+
+                    var extraData = {};
+                    extraData.limit = limit * 1;
+                    extraData.total = total;
+                    extraData.totalResult = totalResult > total ? total : totalResult;
+                    extraData.skip = skip;
+                    extraData.pages = pages;
+                    extraData.currentPage = pages - remainingPages;
+
+                    extraData.isLastPage = (totalResult >= total) ? true : false;
                 res.ok(resp, false, extraData);
             })
             .catch(function(err){
@@ -207,11 +188,7 @@ var <%= service %>sController = {};
 
     question
     .then(function(resp){
-        if(!resp){
-            next();
-        }else{
-            res.ok(resp);
-        }
+       res.ok(resp);
     })
     .catch(function(err){
         next(err);