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..373f434d62b2c0e16e500005908854777322c00c 100644
--- a/doc/install/installation.md
+++ b/doc/install/installation.md
@@ -40,36 +40,36 @@ to install it first.
 
 Make sure your system is up-to-date:
 
-    sudo apt-get update
-    sudo apt-get upgrade
+    apt-get update
+    apt-get upgrade
 
 **Note:**
 Vim is an editor that is used here whenever there are files that need to be
 edited by hand. But, you can use any editor you like instead.
 
     # Install vim
-    sudo apt-get install -y vim
+    apt-get install -y vim
 
 Install the required packages:
 
-    sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl git-core openssh-server redis-server postfix checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev
+    apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl git-core openssh-server redis-server postfix checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev
 
 Make sure you have the right version of Python installed.
 
     # Install Python
-    sudo apt-get install python
+    apt-get install python
 
     # Make sure that Python is 2.5+ (3.x is not supported at the moment)
     python --version
 
     # If it's Python 3 you might need to install Python 2 separately
-    sudo apt-get install python2.7
+    apt-get install python2.7
 
     # Make sure you can access Python via python2
     python2 --version
 
     # If you get a "command not found" error create a link to the python binary
-    sudo ln -s /usr/bin/python /usr/bin/python2
+    ln -s /usr/bin/python /usr/bin/python2
 
 
 # 2. Ruby
@@ -77,22 +77,22 @@ Make sure you have the right version of Python installed.
 Download and compile it:
 
     mkdir /tmp/ruby && cd /tmp/ruby
-    curl --progress http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p327.tar.gz | tar xz
-    cd ruby-1.9.3-p327
+    curl --progress http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p392.tar.gz | tar xz
+    cd ruby-1.9.3-p392
     ./configure
     make
-    sudo make install
+    make install
 
 Install the Bundler Gem:
 
-    sudo gem install bundler
+    gem install bundler
 
 
 # 3. System Users
 
 Create a user for Git and Gitolite:
 
-    sudo adduser \
+    adduser \
       --system \
       --shell /bin/sh \
       --gecos 'Git Version Control' \
@@ -103,13 +103,13 @@ Create a user for Git and Gitolite:
 
 Create a user for GitLab:
 
-    sudo adduser --disabled-login --gecos 'GitLab' gitlab
+    adduser --disabled-login --gecos 'GitLab' gitlab
 
     # Add it to the git group
-    sudo usermod -a -G git gitlab
+    usermod -a -G git gitlab
 
     # Generate the SSH key
-    sudo -u gitlab -H ssh-keygen -q -N '' -t rsa -f /home/gitlab/.ssh/id_rsa
+    -u gitlab -H ssh-keygen -q -N '' -t rsa -f /home/gitlab/.ssh/id_rsa
 
 
 # 4. Gitolite
@@ -117,7 +117,7 @@ Create a user for GitLab:
 Clone GitLab's fork of the Gitolite source code:
 
     cd /home/git
-    sudo -u git -H git clone -b gl-v320 https://github.com/gitlabhq/gitolite.git /home/git/gitolite
+    -u git -H git clone -b gl-v320 https://github.com/gitlabhq/gitolite.git /home/git/gitolite
 
 Setup Gitolite with GitLab as its admin:
 
@@ -125,46 +125,46 @@ Setup Gitolite with GitLab as its admin:
 GitLab assumes *full and unshared* control over this Gitolite installation.
 
     # Add Gitolite scripts to $PATH
-    sudo -u git -H mkdir /home/git/bin
-    sudo -u git -H sh -c 'printf "%b\n%b\n" "PATH=\$PATH:/home/git/bin" "export PATH" >> /home/git/.profile'
-    sudo -u git -H sh -c 'gitolite/install -ln /home/git/bin'
+    -u git -H mkdir /home/git/bin
+    -u git -H sh -c 'printf "%b\n%b\n" "PATH=\$PATH:/home/git/bin" "export PATH" >> /home/git/.profile'
+    -u git -H sh -c 'gitolite/install -ln /home/git/bin'
 
     # Copy the gitlab user's (public) SSH key ...
-    sudo cp /home/gitlab/.ssh/id_rsa.pub /home/git/gitlab.pub
-    sudo chmod 0444 /home/git/gitlab.pub
+    cp /home/gitlab/.ssh/id_rsa.pub /home/git/gitlab.pub
+    chmod 0444 /home/git/gitlab.pub
 
     # ... and use it as the admin key for the Gitolite setup
-    sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gitolite setup -pk /home/git/gitlab.pub"
+    -u git -H sh -c "PATH=/home/git/bin:$PATH; gitolite setup -pk /home/git/gitlab.pub"
 
 Fix the directory permissions for the configuration directory:
 
     # Make sure the Gitolite config dir is owned by git
-    sudo chmod 750 /home/git/.gitolite/
-    sudo chown -R git:git /home/git/.gitolite/
+    chmod 750 /home/git/.gitolite/
+    chown -R git:git /home/git/.gitolite/
 
 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
+    chmod -R ug+rwX,o-rwx /home/git/repositories/
+    chown -R git:git /home/git/repositories/
+    -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
 
-    sudo -u gitlab -H ssh git@localhost
-    sudo -u gitlab -H ssh git@YOUR_DOMAIN_NAME
-    sudo -u gitlab -H ssh git@YOUR_GITOLITE_DOMAIN_NAME
+   -u gitlab -H ssh git@localhost
+   -u gitlab -H ssh git@YOUR_DOMAIN_NAME
+   -u gitlab -H ssh git@YOUR_GITOLITE_DOMAIN_NAME
 
 
 ## Test if everything works so far
 
     # Clone the admin repo so SSH adds localhost to known_hosts ...
     # ... and to be sure your users have access to Gitolite
-    sudo -u gitlab -H git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin
+    -u gitlab -H git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin
 
     # If it succeeded without errors you can remove the cloned repo
-    sudo rm -rf /tmp/gitolite-admin
+    rm -rf /tmp/gitolite-admin
 
 **Important Note:**
 If you can't clone the `gitolite-admin` repository: **DO NOT PROCEED WITH INSTALLATION**!
@@ -185,16 +185,16 @@ To setup the MySQL/PostgreSQL database and dependencies please see [`doc/install
 ## Clone the Source
 
     # Clone GitLab repository
-    sudo -u gitlab -H git clone https://github.com/gitlabhq/gitlabhq.git gitlab
+    -u gitlab -H git clone https://github.com/gitlabhq/gitlabhq.git gitlab
 
     # Go to gitlab dir 
     cd /home/gitlab/gitlab
    
     # Checkout to stable release
-    sudo -u gitlab -H git checkout 4-1-stable
+    -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
@@ -202,23 +202,23 @@ do so with caution!
     cd /home/gitlab/gitlab
 
     # Copy the example GitLab config
-    sudo -u gitlab -H cp config/gitlab.yml.example config/gitlab.yml
+    -u gitlab -H cp config/gitlab.yml.example config/gitlab.yml
 
     # Make sure to change "localhost" to the fully-qualified domain name of your
     # host serving GitLab where necessary
-    sudo -u gitlab -H vim config/gitlab.yml
+    -u gitlab -H vim config/gitlab.yml
 
     # Make sure GitLab can write to the log/ and tmp/ directories
-    sudo chown -R gitlab log/
-    sudo chown -R gitlab tmp/
-    sudo chmod -R u+rwX  log/
-    sudo chmod -R u+rwX  tmp/
+    chown -R gitlab log/
+    chown -R gitlab tmp/
+    chmod -R u+rwX  log/
+    chmod -R u+rwX  tmp/
 
     # Make directory for satellites
-    sudo -u gitlab -H mkdir /home/gitlab/gitlab-satellites
+    -u gitlab -H mkdir /home/gitlab/gitlab-satellites
 
     # Copy the example Unicorn config
-    sudo -u gitlab -H cp config/unicorn.rb.example config/unicorn.rb
+    -u gitlab -H cp config/unicorn.rb.example config/unicorn.rb
 
 **Important Note:**
 Make sure to edit both files to match your setup.
@@ -226,10 +226,10 @@ Make sure to edit both files to match your setup.
 ## Configure GitLab DB settings
 
     # Mysql
-    sudo -u gitlab cp config/database.yml.mysql config/database.yml
+    -u gitlab cp config/database.yml.mysql config/database.yml
 
     # PostgreSQL
-    sudo -u gitlab cp config/database.yml.postgresql config/database.yml
+    -u gitlab cp config/database.yml.postgresql config/database.yml
 
 Make sure to update username/password in config/database.yml.
 
@@ -237,13 +237,13 @@ Make sure to update username/password in config/database.yml.
 
     cd /home/gitlab/gitlab
 
-    sudo gem install charlock_holmes --version '0.6.9'
+    gem install charlock_holmes --version '0.6.9'
 
     # For MySQL (note, the option says "without")
-    sudo -u gitlab -H bundle install --deployment --without development test postgres
+    -u gitlab -H bundle install --deployment --without development test postgres
 
     # Or for PostgreSQL
-    sudo -u gitlab -H bundle install --deployment --without development test mysql
+    u gitlab -H bundle install --deployment --without development test mysql
 
 ## Configure Git
 
@@ -251,49 +251,49 @@ GitLab needs to be able to commit and push changes to Gitolite. In order to do
 that Git requires a username and email. (We recommend using the same address
 used for the `email.from` setting in `config/gitlab.yml`)
 
-    sudo -u gitlab -H git config --global user.name "GitLab"
-    sudo -u gitlab -H git config --global user.email "gitlab@localhost"
+    -u gitlab -H git config --global user.name "GitLab"
+    -u gitlab -H git config --global user.email "gitlab@localhost"
 
 ## Setup GitLab Hooks
 
-    sudo cp ./lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive
-    sudo chown git:git /home/git/.gitolite/hooks/common/post-receive
+    cp ./lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive
+    chown git:git /home/git/.gitolite/hooks/common/post-receive
 
 ## Initialise Database and Activate Advanced Features
 
-    sudo -u gitlab -H bundle exec rake gitlab:setup RAILS_ENV=production
+    -u gitlab -H bundle exec rake gitlab:setup RAILS_ENV=production
 
 
 ## Install Init Script
 
 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 chmod +x /etc/init.d/gitlab
+    curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/4-2-stable/init.d/gitlab
+    chmod +x /etc/init.d/gitlab
 
 Make GitLab start on boot:
 
-    sudo update-rc.d gitlab defaults 21
+    update-rc.d gitlab defaults 21
 
 
 ## Check Application Status
 
 Check if GitLab and its environment is configured correctly:
 
-    sudo -u gitlab -H bundle exec rake gitlab:env:info RAILS_ENV=production
+    -u gitlab -H bundle exec rake gitlab:env:info RAILS_ENV=production
 
 To make sure you didn't miss anything run a more thorough check with:
 
-    sudo -u gitlab -H bundle exec rake gitlab:check RAILS_ENV=production
+    -u gitlab -H bundle exec rake gitlab:check RAILS_ENV=production
 
 If all items are green, then congratulations on successfully installing GitLab!
 However there are still a few steps left.
 
 ## Start Your GitLab Instance
 
-    sudo service gitlab start
+    service gitlab start
     # or
-    sudo /etc/init.d/gitlab restart
+    /etc/init.d/gitlab restart
 
 
 # 7. Nginx
@@ -303,25 +303,25 @@ If you can't or don't want to use Nginx as your web server, have a look at the
 "Advanced Setup Tips" section.
 
 ## Installation
-    sudo apt-get install nginx
+    apt-get install nginx
 
 ## Site Configuration
 
 Download an example site config:
 
-    sudo curl --output /etc/nginx/sites-available/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/master/nginx/gitlab
-    sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
+    curl --output /etc/nginx/sites-available/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/4-2-stable/nginx/gitlab
+    ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
 
 Make sure to edit the config file to match your setup:
 
     # Change **YOUR_SERVER_IP** and **YOUR_SERVER_FQDN**
     # to the IP address and fully-qualified domain name
     # of your host serving GitLab
-    sudo vim /etc/nginx/sites-enabled/gitlab
+    vim /etc/nginx/sites-enabled/gitlab
 
 ## Restart
 
-    sudo /etc/init.d/nginx restart
+    /etc/init.d/nginx restart
 
 
 # Done!
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