diff --git a/app/models/configuration_setting.rb b/app/models/configuration_setting.rb
new file mode 100644
index 0000000..a3e0ddf
--- /dev/null
+++ b/app/models/configuration_setting.rb
@@ -0,0 +1,57 @@
+# ConfigurationSetting class describes a model that keeps the current Bacula
+# configuration.
+#
+# It has some hard coded settings as defaults.
+# Archiving's admins can enter new settings concerning:
+#
+# * jobs
+# * clients
+#
+# and override the default ones.
+#
+# ConfigurationSetting is supposed to have only one record in persisted in the database
+# which will hold the altered configuration as a patch to the defaults.
+# Admins can reset this change at any time.
+class ConfigurationSetting < ActiveRecord::Base
+  serialize :job, JSON
+  serialize :client, JSON
+
+  JOB = {
+    storage: :File,
+    pool: :Default,
+    messages: :Standard,
+    priority: 10,
+    :'Write Bootstrap' => '"/var/lib/bacula/%c.bsr"'
+  }
+
+  CLIENT = {
+    file_retention: 60,
+    file_retention_period: :days,
+    job_retention: 180,
+    job_retention_period: :days
+  }
+
+  RETENTION_PERIODS = %w{seconds minutes hours days weeks months quarters years}
+
+  # Fetches the current configuration for jobs.
+  #
+  # The current configuration is the last submitted record, patched to the default
+  # settings.
+  # If there is no record, the default settings are returned
+  #
+  # @return [Hash] with settings
+  def self.current_job_settings
+    (last || new).job.symbolize_keys.reverse_merge(JOB.dup)
+  end
+
+  # Fetches the current configuration for clients.
+  #
+  # The current configuration is the last submitted record, patched to the default
+  # settings.
+  # If there is no record, the default settings are returned
+  #
+  # @return [Hash] with settings
+  def self.current_client_settings
+    (last || new).client.symbolize_keys.reverse_merge(CLIENT.dup)
+  end
+end