diff --git a/CHANGELOG b/CHANGELOG
index a455650bed900b65d4a2953fe0d63df0e8a96391..58f1bab2d184716621ccf04aee011b9fd1c49103 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -31,6 +31,7 @@ v 8.1.0 (unreleased)
   - Hide password in the service settings form
   - Fix anchors to comments in diffs
   - Move CI web hooks page to project settings area
+  - Add user preference to change layout width (Peter Göbel)
 
 v 8.0.3
   - Fix URL shown in Slack notifications
diff --git a/app/controllers/profiles/preferences_controller.rb b/app/controllers/profiles/preferences_controller.rb
index f83b4abd1e2f8753cd4ffd9ccb291505884ed6db..a9a06ecc80801f30d380e69f3e08a0ba7bf18590 100644
--- a/app/controllers/profiles/preferences_controller.rb
+++ b/app/controllers/profiles/preferences_controller.rb
@@ -31,6 +31,7 @@ class Profiles::PreferencesController < Profiles::ApplicationController
   def preferences_params
     params.require(:user).permit(
       :color_scheme_id,
+      :layout,
       :dashboard,
       :project_view,
       :theme_id
diff --git a/app/helpers/page_layout_helper.rb b/app/helpers/page_layout_helper.rb
index df37be51ce9603b70682760baedea04aa8fd7e28..8160253e59a139c3787e109a99d7029e2480b13a 100644
--- a/app/helpers/page_layout_helper.rb
+++ b/app/helpers/page_layout_helper.rb
@@ -26,7 +26,7 @@ module PageLayoutHelper
 
   def fluid_layout(enabled = false)
     if @fluid_layout.nil?
-      @fluid_layout = enabled
+      @fluid_layout = (current_user && current_user.layout == "wide") || enabled
     else
       @fluid_layout
     end
diff --git a/app/helpers/preferences_helper.rb b/app/helpers/preferences_helper.rb
index 1b1f4162df41601fecc3d8216396c4c72269a646..8470d733495021fa86de3ad160a9f2da838c7763 100644
--- a/app/helpers/preferences_helper.rb
+++ b/app/helpers/preferences_helper.rb
@@ -1,5 +1,12 @@
 # Helper methods for per-User preferences
 module PreferencesHelper
+  def layout_choices
+    [
+        ['Small', :small],
+        ['Wide', :wide]
+    ]
+  end
+
   # Maps `dashboard` values to more user-friendly option text
   DASHBOARD_CHOICES = {
     projects: 'Your Projects (default)',
diff --git a/app/models/user.rb b/app/models/user.rb
index 1069f8e36640212372f9237ea8d1918b0cf767ff..112a85e7845e854186f2ac325cc28ae02a40360c 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -54,6 +54,7 @@
 #  public_email               :string(255)      default(""), not null
 #  dashboard                  :integer          default(0)
 #  project_view               :integer          default(0)
+#  layout                     :integer          default(0)
 #
 
 require 'carrierwave/orm/activerecord'
@@ -171,6 +172,9 @@ class User < ActiveRecord::Base
   after_create :post_create_hook
   after_destroy :post_destroy_hook
 
+  # User's Layout preference
+  enum layout: [:small, :wide]
+
   # User's Dashboard preference
   # Note: When adding an option, it MUST go on the end of the array.
   enum dashboard: [:projects, :stars, :project_activity, :starred_project_activity]
diff --git a/app/views/profiles/preferences/show.html.haml b/app/views/profiles/preferences/show.html.haml
index 60289bfe7cd88b2bbc1224dbe6ebde23c33ac53c..c12a358651f0550322ce57ad9e0a1797ae1aa7ce 100644
--- a/app/views/profiles/preferences/show.html.haml
+++ b/app/views/profiles/preferences/show.html.haml
@@ -32,6 +32,13 @@
     .panel-heading
       Behavior
     .panel-body
+      .form-group
+        = f.label :layout, class: 'control-label' do
+          Layout width
+        .col-sm-10
+          = f.select :layout, layout_choices, {}, class: 'form-control'
+          .help-block
+            Choose between small (max. 1200px) and wide (100%) application layout
       .form-group
         = f.label :dashboard, class: 'control-label' do
           Default Dashboard
diff --git a/app/views/profiles/preferences/update.js.erb b/app/views/profiles/preferences/update.js.erb
index 6c4b0ce757dbe447191d02e722391b4bd36b9e6d..97d856fa88ce696098ac510b652ef9df1c1235ae 100644
--- a/app/views/profiles/preferences/update.js.erb
+++ b/app/views/profiles/preferences/update.js.erb
@@ -2,6 +2,13 @@
 $('body').removeClass('<%= Gitlab::Themes.body_classes %>')
 $('body').addClass('<%= user_application_theme %>')
 
+// Toggle container-fluid class
+if ('<%= current_user.layout %>' === 'wide') {
+  $('.content-wrapper').find('.container-fluid').removeClass('container-limited')
+} else {
+  $('.content-wrapper').find('.container-fluid').addClass('container-limited')
+}
+
 // Re-enable the "Save" button
 $('input[type=submit]').enable()
 
diff --git a/db/migrate/20151005150751_add_layout_option_for_users.rb b/db/migrate/20151005150751_add_layout_option_for_users.rb
new file mode 100644
index 0000000000000000000000000000000000000000..5ead0c04d5a80b4b12487988b345e4f467b0b492
--- /dev/null
+++ b/db/migrate/20151005150751_add_layout_option_for_users.rb
@@ -0,0 +1,5 @@
+class AddLayoutOptionForUsers < ActiveRecord::Migration
+  def change
+    add_column :users, :layout, :integer, :default => 0
+  end
+end
\ No newline at end of file
diff --git a/db/schema.rb b/db/schema.rb
index 72609da93f14f05490b821504bb97bedab8b3dd2..186dfec88617a7b3279c2ef2ce34f7877055a1ba 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 20150930095736) do
+ActiveRecord::Schema.define(version: 20151005150751) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"
@@ -753,6 +753,7 @@ ActiveRecord::Schema.define(version: 20150930095736) do
     t.integer  "dashboard",                  default: 0
     t.integer  "project_view",               default: 0
     t.integer  "consumed_timestep"
+    t.integer  "layout",                     default: 0
   end
 
   add_index "users", ["admin"], name: "index_users_on_admin", using: :btree