diff --git a/CHANGELOG b/CHANGELOG
index 4510b6d5cd968bbf3425aca993afecb6707f604d..5bc174a077b2069d59b7aa4176ffc9aef824f6ae 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,4 +1,11 @@
 v 4.2.0
+  - Async gitolite calls
+  - Teams
+  - Project listing page
+  - Improved search
+  - Groups API
+  - Improved Network Graph
+  - Edit page for group
   - User show page. Via /u/username
   - Show help contents on pages for better navigation
 
diff --git a/VERSION b/VERSION
index b5d76fb80d85da585cf5d0a1bbb21386a2e60807..6aba2b245a847cc30a9b9dc009fc9d2522fff998 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-4.2.0pre
+4.2.0
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 6bfdf2255f2b812b7132ec7331660f7ef06d1047..f9db6342603d14ba25f9d677a3992c3514c0e900 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -151,16 +151,16 @@ class Repository
     return nil unless commit
 
     # Build file path
-    file_name = self.path_with_namespace + "-" + commit.id.to_s + ".tar.gz"
+    file_name = self.path_with_namespace.gsub("/","_") + "-" + commit.id.to_s + ".tar.gz"
     storage_path = Rails.root.join("tmp", "repositories")
-    file_path = File.join(storage_path, file_name)
+    file_path = File.join(storage_path, self.path_with_namespace, file_name)
 
     # Put files into a directory before archiving
     prefix = self.path_with_namespace + "/"
 
     # Create file if not exists
     unless File.exists?(file_path)
-      FileUtils.mkdir_p storage_path
+      FileUtils.mkdir_p File.dirname(file_path)
       file = self.repo.archive_to_file(ref, prefix,  file_path)
     end
 
diff --git a/app/views/teams/show.js.haml b/app/views/teams/show.js.haml
new file mode 100644
index 0000000000000000000000000000000000000000..7e5a148e5ef2d56f87c72403ee7525cffc8cfc14
--- /dev/null
+++ b/app/views/teams/show.js.haml
@@ -0,0 +1,2 @@
+:plain 
+  Pager.append(#{@events.count}, "#{escape_javascript(render(@events))}");
diff --git a/doc/install/installation.md b/doc/install/installation.md
index e42176370ba71ba30f61586d528818b6a8f5c2c4..8374a4e3816041973e502f5f99cbae4b4d428225 100644
--- a/doc/install/installation.md
+++ b/doc/install/installation.md
@@ -147,7 +147,7 @@ Fix the directory permissions for the repositories:
     # Make sure the repositories dir is owned by git and it stays that way
     sudo chmod -R ug+rwX,o-rwx /home/git/repositories/
     sudo chown -R git:git /home/git/repositories/
-    find /home/git/repositories -type d -print0 | sudo xargs -0 chmod g+s
+    sudo -u git -H find /home/git/repositories -type d -print0 | sudo xargs -0 chmod g+s
 
 
 ## Add domains to list to the list of known hosts
@@ -191,10 +191,10 @@ To setup the MySQL/PostgreSQL database and dependencies please see [`doc/install
     cd /home/gitlab/gitlab
    
     # Checkout to stable release
-    sudo -u gitlab -H git checkout 4-1-stable
+    sudo -u gitlab -H git checkout 4-2-stable
 
 **Note:**
-You can change `4-1-stable` to `master` if you want the *bleeding edge* version, but
+You can change `4-2-stable` to `master` if you want the *bleeding edge* version, but
 do so with caution!
 
 ## Configure it
@@ -237,6 +237,7 @@ Make sure to update username/password in config/database.yml.
 
     cd /home/gitlab/gitlab
 
+    sudo gem install bundler
     sudo gem install charlock_holmes --version '0.6.9'
 
     # For MySQL (note, the option says "without")
@@ -268,7 +269,7 @@ used for the `email.from` setting in `config/gitlab.yml`)
 
 Download the init script (will be /etc/init.d/gitlab):
 
-    sudo curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/master/init.d/gitlab
+    sudo curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/4-2-stable/init.d/gitlab
     sudo chmod +x /etc/init.d/gitlab
 
 Make GitLab start on boot:
@@ -309,7 +310,7 @@ If you can't or don't want to use Nginx as your web server, have a look at the
 
 Download an example site config:
 
-    sudo curl --output /etc/nginx/sites-available/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/master/nginx/gitlab
+    sudo curl --output /etc/nginx/sites-available/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/4-2-stable/nginx/gitlab
     sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
 
 Make sure to edit the config file to match your setup:
diff --git a/lib/tasks/gitlab/check.rake b/lib/tasks/gitlab/check.rake
index b54e63acfbc6b31a7679c61e227ed2594064ceea..1a828c425d3d22ddab415ec7041b90bcca4d40ff 100644
--- a/lib/tasks/gitlab/check.rake
+++ b/lib/tasks/gitlab/check.rake
@@ -142,7 +142,7 @@ namespace :gitlab do
         return
       end
 
-      recipe_content = `curl https://raw.github.com/gitlabhq/gitlab-recipes/master/init.d/gitlab 2>/dev/null`
+      recipe_content = `curl https://raw.github.com/gitlabhq/gitlab-recipes/4-2-stable/init.d/gitlab 2>/dev/null`
       script_content = File.read(script_path)
 
       if recipe_content == script_content