diff --git a/doc/api/users.md b/doc/api/users.md
index 49afbab8c6a01aaf4370d736d3f5067cfd1ddaee..b9651c19b970f20bc27a90b6803f1e400b7bbb8f 100644
--- a/doc/api/users.md
+++ b/doc/api/users.md
@@ -87,17 +87,19 @@ POST /users
 
 Parameters:
 
-+ `email` (required)          - Email
-+ `password` (required)       - Password
-+ `username` (required)       - Username
-+ `name` (required)           - Name
-+ `skype` (optional)          - Skype ID
-+ `linkedin` (optional)       - Linkedin
-+ `twitter` (optional)        - Twitter account
-+ `projects_limit` (optional) - Number of projects user can create
-+ `extern_uid` (optional)     - External UID
-+ `provider` (optional)       - External provider name
-+ `bio` (optional)            - User's bio
++ `email` (required)                                                    - Email
++ `password` (required unless force_random_password is set)             - Password
++ `username` (required)                                                 - Username
++ `name` (required)                                                     - Name
++ `skype` (optional)                                                    - Skype ID
++ `linkedin` (optional)                                                 - Linkedin
++ `twitter` (optional)                                                  - Twitter account
++ `projects_limit` (optional)                                           - Number of projects user can create
++ `extern_uid` (optional)                                               - External UID
++ `provider` (optional)                                                 - External provider name
++ `bio` (optional)                                                      - User's bio
++ `expired_password` (true/false)                                       - Password is set expired
++ `force_random_password` (true/false; required unless password is set) - generate random password for user
 
 
 ## User modification
diff --git a/lib/api/users.rb b/lib/api/users.rb
index 00dc2311ffde16919e0d3b02945bab74709808fa..69b850f8ae4f8431c96d0b1c99836356e676a862 100644
--- a/lib/api/users.rb
+++ b/lib/api/users.rb
@@ -30,23 +30,44 @@ module API
       # Create user. Available only for admin
       #
       # Parameters:
-      #   email (required)                  - Email
-      #   password (required)               - Password
-      #   name                              - Name
-      #   skype                             - Skype ID
-      #   linkedin                          - Linkedin
-      #   twitter                           - Twitter account
-      #   projects_limit                    - Number of projects user can create
-      #   extern_uid                        - External authentication provider UID
-      #   provider                          - External provider
-      #   bio                               - Bio
+      #   email (required)                                                    - Email
+      #   password (required unless force_random_password is set)             - Password
+      #   name (required)                                                     - Name
+      #   username (required)                                                 - username
+      #   skype                                                               - Skype ID
+      #   linkedin                                                            - Linkedin
+      #   twitter                                                             - Twitter account
+      #   projects_limit                                                      - Number of projects user can create
+      #   extern_uid                                                          - External authentication provider UID
+      #   provider                                                            - External provider
+      #   bio                                                                 - Bio
+      #   expired_password (true/false)                                       - password is set expired
+      #   force_random_password (true/false; required unless password is set) - generate random password for user
       # Example Request:
       #   POST /users
       post do
         authenticated_as_admin!
-        required_attributes! [:email, :password, :name, :username]
-        attrs = attributes_for_keys [:email, :name, :password, :skype, :linkedin, :twitter, :projects_limit, :username, :extern_uid, :provider, :bio]
-        user = User.build_user(attrs, as: :admin)
+        required_attributes! [:email, :name, :username]
+
+        attrs = attributes_for_keys [:email, :name, :skype, :linkedin, :twitter, :projects_limit, :username, :extern_uid, :provider, :bio]
+
+        #parse password strategy params
+        expired = params[:expired_password] && (params[:expired_password].to_i > 0)
+        force_random =  params[:force_random_password] && (params[:force_random_password].to_i > 0)
+
+        if params[:password] && !force_random
+          attrs[:password] = params[:password]
+        elsif force_random && !params[:password]
+          attrs[:force_random_password] = true
+        else
+          render_api_error!('400 Either password or force_random_password must be set',400)
+	end
+
+        attrs[:password_expires_at] = Time.now if expired
+
+        user = User.new attrs, as: :admin
+        user.created_by_id = current_user.id if expired # this is necessary to make the new user notification work correctly.
+
         if user.save
           present user, with: Entities::User
         else
diff --git a/lib/support/nginx/gitlab b/lib/support/nginx/gitlab
index 3e929c52990de1633104b0448a5cee5e189efb3a..54bf6fb905927b8fa191edf201a86ea4936f6679 100644
--- a/lib/support/nginx/gitlab
+++ b/lib/support/nginx/gitlab
@@ -1,6 +1,6 @@
 # GITLAB
 # Maintainer: @randx
-# App Version: 5.0
+# App Version: 6.1
 
 upstream gitlab {
   server unix:/home/git/gitlab/tmp/sockets/gitlab.socket;
diff --git a/lib/tasks/sidekiq.rake b/lib/tasks/sidekiq.rake
index d0e9dfe46a160279cbbcf3ad650d8c34678ea63b..ba79b6e035d43e4dfa607a7de2825ea7af98fd0b 100644
--- a/lib/tasks/sidekiq.rake
+++ b/lib/tasks/sidekiq.rake
@@ -5,16 +5,28 @@ namespace :sidekiq do
   end
 
   desc "GITLAB | Start sidekiq"
-  task :start do
-    system "nohup bundle exec sidekiq -q post_receive,mailer,system_hook,project_web_hook,gitlab_shell,common,default -e #{Rails.env} -P #{pidfile} >> #{Rails.root.join("log", "sidekiq.log")} 2>&1 &"
+  task :start => :restart
+
+  desc 'GitLab | Restart sidekiq'
+  task :restart do
+    if File.exist?(pidfile)
+      puts 'Shutting down existing sidekiq process.'
+      Rake::Task['sidekiq:stop'].invoke
+      puts 'Starting new sidekiq process.'
+    end
+    system "bundle exec sidekiq -q post_receive,mailer,system_hook,project_web_hook,gitlab_shell,common,default -e #{Rails.env} -P #{pidfile} -d -L #{log_file} >> #{log_file} 2>&1"
   end
 
   desc "GITLAB | Start sidekiq with launchd on Mac OS X"
   task :launchd do
-    system "bundle exec sidekiq -q post_receive,mailer,system_hook,project_web_hook,gitlab_shell,common,default -e #{Rails.env} -P #{pidfile} >> #{Rails.root.join("log", "sidekiq.log")} 2>&1"
+    system "bundle exec sidekiq -q post_receive,mailer,system_hook,project_web_hook,gitlab_shell,common,default -e #{Rails.env} -P #{pidfile} >> #{log_file} 2>&1"
   end
 
   def pidfile
     Rails.root.join("tmp", "pids", "sidekiq.pid")
   end
+
+  def log_file
+    Rails.root.join("log", "sidekiq.log")
+  end
 end
diff --git a/spec/requests/api/users_spec.rb b/spec/requests/api/users_spec.rb
index 2fced3ec945bf082d449ef2731140b32af7908d5..e56a7b61f45f9edcde5ad66f4addf734ed960d16 100644
--- a/spec/requests/api/users_spec.rb
+++ b/spec/requests/api/users_spec.rb
@@ -71,21 +71,26 @@ describe API::API do
     end
 
     it "should not create user with invalid email" do
-      post api("/users", admin), { email: "invalid email", password: 'password' }
+      post api("/users", admin), { email: "invalid email", password: 'password', name: "T. User", username: "testuser" }
       response.status.should == 400
     end
 
-    it "should return 400 error if password not given" do
-      post api("/users", admin), { email: 'test@example.com' }
+    it "should return 400 error if password or force_random_password not given" do
+      post api("/users", admin), { email: 'test@example.com', name: "T. User", username: "testuser" }
+      response.status.should == 400
+    end
+
+    it "should return 400 error if both password and force_random_password are set" do
+      post api("/users", admin), { password: 'password', force_random_password: '1', email: 'test@example.com', name: "T. User", username: "testuser"   }
       response.status.should == 400
     end
 
     it "should return 400 error if email not given" do
-      post api("/users", admin), { password: 'pass1234' }
+      post api("/users", admin), { password: 'pass1234', name: "T. User", username: "testuser"  }
       response.status.should == 400
     end
 
-    it "shouldn't available for non admin users" do
+    it "shouldn't be available for non admin users" do
       post api("/users", user), attributes_for(:user)
       response.status.should == 403
     end