diff --git a/app/models/namespace.rb b/app/models/namespace.rb
index d34e5a99c796ac8024baca26bbe92bb723b15706..89c1f9adb5a033222b34178be0de203b929d961d 100644
--- a/app/models/namespace.rb
+++ b/app/models/namespace.rb
@@ -52,7 +52,7 @@ class Namespace < ActiveRecord::Base
 
   def ensure_dir_exist
     unless dir_exists?
-      system("mkdir -m 770 #{namespace_full_path}")
+      FileUtils.mkdir( namespace_full_path, mode: 0770 )
     end
   end
 
@@ -71,11 +71,12 @@ class Namespace < ActiveRecord::Base
       if File.exists?(new_path)
         raise "Already exists"
       end
-
-      if system("mv #{old_path} #{new_path}")
+      
+      begin 
+        FileUtils.mv( old_path, new_path )
         send_update_instructions
         @require_update_gitolite = true
-      else
+      rescue Exception => e
         raise "Namespace move error #{old_path} #{new_path}"
       end
     end
@@ -88,7 +89,7 @@ class Namespace < ActiveRecord::Base
 
   def rm_dir
     dir_path = File.join(Gitlab.config.gitolite.repos_path, path)
-    system("rm -rf #{dir_path}")
+    FileUtils.rm_r( dir_path, force: true )
   end
 
   def send_update_instructions
diff --git a/lib/gitlab/project_mover.rb b/lib/gitlab/project_mover.rb
index def6e90001beae92b01e009ca987da4316fbea8c..207e585f5723621f35468c8b2ece2c63b51d42e9 100644
--- a/lib/gitlab/project_mover.rb
+++ b/lib/gitlab/project_mover.rb
@@ -16,7 +16,7 @@ module Gitlab
     def execute
       # Create new dir if missing
       new_dir_path = File.join(Gitlab.config.gitolite.repos_path, new_dir)
-      system("mkdir -m 770 #{new_dir_path}") unless File.exists?(new_dir_path)
+      FileUtils.mkdir( new_dir_path, mode: 0770 ) unless File.exists?(new_dir_path)
 
       old_path = File.join(Gitlab.config.gitolite.repos_path, old_dir, "#{project.path}.git")
       new_path = File.join(new_dir_path, "#{project.path}.git")
@@ -25,17 +25,18 @@ module Gitlab
         raise ProjectMoveError.new("Destination #{new_path} already exists")
       end
 
-      if system("mv #{old_path} #{new_path}")
+      begin
+        FileUtils.mv( old_path, new_path )
         log_info "Project #{project.name} was moved from #{old_path} to #{new_path}"
         true
-      else
+      rescue Exception => e
         message = "Project #{project.name} cannot be moved from #{old_path} to #{new_path}"
-        log_info "Error! #{message}"
+        log_info "Error! #{message} (#{e.message})"
         raise ProjectMoveError.new(message)
       end
     end
 
-    protected
+  protected
 
     def log_info message
       Gitlab::AppLogger.info message