diff --git a/Gemfile.lock b/Gemfile.lock
index f226c931bff698242207378f8aeb31ccf2ba59b4..7ec37f59dfc5ab6a5f66b226f4435b30dbc2c90f 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -198,7 +198,7 @@ GEM
     httparty (0.8.3)
       multi_json (~> 1.0)
       multi_xml
-    i18n (0.6.0)
+    i18n (0.6.1)
     journey (1.0.4)
     jquery-rails (2.0.2)
       railties (>= 3.2.0, < 5.0)
@@ -206,11 +206,10 @@ GEM
     jquery-ui-rails (0.5.0)
       jquery-rails
       railties (>= 3.1.0)
-    json (1.7.4)
-    kaminari (0.13.0)
+    json (1.7.5)
+    kaminari (0.14.0)
       actionpack (>= 3.0.0)
       activesupport (>= 3.0.0)
-      railties (>= 3.0.0)
     kgio (2.7.4)
     launchy (2.1.0)
       addressable (~> 2.2.6)
@@ -348,7 +347,7 @@ GEM
       daemons (>= 1.0.9)
       eventmachine (>= 0.12.6)
       rack (>= 1.0.0)
-    thor (0.15.4)
+    thor (0.16.0)
     tilt (1.3.3)
     treetop (1.4.10)
       polyglot
diff --git a/config/initializers/kaminari_config.rb b/config/initializers/kaminari_config.rb
new file mode 100644
index 0000000000000000000000000000000000000000..3cbe9a058d7f0fc2480b692269335b4ee33ac6b2
--- /dev/null
+++ b/config/initializers/kaminari_config.rb
@@ -0,0 +1,10 @@
+Kaminari.configure do |config|
+  config.default_per_page = 20
+  config.max_per_page = 100
+  # config.window = 4
+  # config.outer_window = 0
+  # config.left = 0
+  # config.right = 0
+  # config.page_method_name = :page
+  # config.param_name = :page
+end
diff --git a/doc/api/README.md b/doc/api/README.md
index 53b4983ef4724b616e8e8cbbb92a59335306a618..3a6c7b7682a7dd3eca0a5c86891a8da0332616a7 100644
--- a/doc/api/README.md
+++ b/doc/api/README.md
@@ -23,6 +23,13 @@ GET http://example.com/api/v2/projects?private_token=QVy1PB7sTxfy4pqfZM1U
 
 The API uses JSON to serialize data. You don't need to specify `.json` at the end of API URL.
 
+#### Pagination
+
+When listing resources you can pass the following parameters:
+
++ `page` (default: `1`) - page number
++ `per_page` (default: `20`, max: `100`) - how many items to list per page
+
 ## Contents
 
 + [Users](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/users.md)
diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb
index c1ea05667aebb1e10922c67fd25cc10b2d090c6b..ce7b7b497fc59c01d7536f0ddc71747f7da05a84 100644
--- a/lib/api/helpers.rb
+++ b/lib/api/helpers.rb
@@ -14,6 +14,10 @@ module Gitlab
       @project
     end
 
+    def paginate(object)
+      object.page(params[:page]).per(params[:per_page].to_i)
+    end
+
     def authenticate!
       error!({'message' => '401 Unauthorized'}, 401) unless current_user
     end
diff --git a/lib/api/issues.rb b/lib/api/issues.rb
index 836c2818544d2b1f049b324b47f195a3d61b630c..68cb7e059b927b11bb4b82d60acf45c21367ffce 100644
--- a/lib/api/issues.rb
+++ b/lib/api/issues.rb
@@ -9,7 +9,7 @@ module Gitlab
       # Example Request:
       #   GET /issues
       get do
-        present current_user.issues, with: Entities::Issue
+        present paginate(current_user.issues), with: Entities::Issue
       end
     end
 
@@ -21,7 +21,7 @@ module Gitlab
       # Example Request:
       #   GET /projects/:id/issues
       get ":id/issues" do
-        present user_project.issues, with: Entities::Issue
+        present paginate(user_project.issues), with: Entities::Issue
       end
 
       # Get a single project issue
diff --git a/lib/api/milestones.rb b/lib/api/milestones.rb
index f537b8e5bf246bad06228ed50550628b71239cdf..29f5efa41d6dbafeb5b40b15f09c73d4f9443b58 100644
--- a/lib/api/milestones.rb
+++ b/lib/api/milestones.rb
@@ -11,7 +11,7 @@ module Gitlab
       # Example Request:
       #   GET /projects/:id/milestones
       get ":id/milestones" do
-        present user_project.milestones, with: Entities::Milestone
+        present paginate(user_project.milestones), with: Entities::Milestone
       end
 
       # Get a single project milestone
diff --git a/lib/api/projects.rb b/lib/api/projects.rb
index f42849cd2f2d9989bec9a474df79720d69477a69..3d4fde9270f7347a21bf269f389e7547300dfa78 100644
--- a/lib/api/projects.rb
+++ b/lib/api/projects.rb
@@ -9,7 +9,7 @@ module Gitlab
       # Example Request:
       #   GET /projects
       get do
-        @projects = current_user.projects
+        @projects = paginate current_user.projects
         present @projects, with: Entities::Project
       end
 
diff --git a/lib/api/users.rb b/lib/api/users.rb
index 81cb2a0e68417a8fc472ae08cb35ad762965c149..98ced6f8e5b1cea911b844ab93adb96a1432ebab 100644
--- a/lib/api/users.rb
+++ b/lib/api/users.rb
@@ -9,7 +9,7 @@ module Gitlab
       # Example Request:
       #  GET /users
       get do
-        @users = User.all
+        @users = paginate User
         present @users, with: Entities::User
       end