diff --git a/lib/tiny_admin.rb b/lib/tiny_admin.rb
index 787d9b5..5a6fe05 100644
--- a/lib/tiny_admin.rb
+++ b/lib/tiny_admin.rb
@@ -12,16 +12,20 @@
 
 module TinyAdmin
   def configure(&block)
-    block&.call(TinyAdmin::Settings.instance) || TinyAdmin::Settings.instance
+    block&.call(settings) || settings
   end
 
   def configure_from_file(file)
-    TinyAdmin::Settings.instance.reset!
+    settings.reset!
     config = YAML.load_file(file, symbolize_names: true)
     config.each do |key, value|
-      TinyAdmin::Settings.instance[key] = value
+      settings[key] = value
     end
   end
 
-  module_function :configure, :configure_from_file
+  def settings
+    TinyAdmin::Settings.instance
+  end
+
+  module_function :configure, :configure_from_file, :settings
 end
diff --git a/lib/tiny_admin/actions/index.rb b/lib/tiny_admin/actions/index.rb
index 5d6ef6c..c59cd59 100644
--- a/lib/tiny_admin/actions/index.rb
+++ b/lib/tiny_admin/actions/index.rb
@@ -21,7 +21,7 @@ def call(app:, context:, options:)
         records, total_count = repository.list(page: current_page, limit: pagination, filters: filters, sort: sort)
 
         prepare_page(Views::Actions::Index) do |page|
-          setup_pagination(page, settings.components[:pagination], total_count: total_count)
+          setup_pagination(page, TinyAdmin.settings.components[:pagination], total_count: total_count)
           page.update_attributes(
             actions: context.actions,
             fields: fields,
diff --git a/lib/tiny_admin/authentication.rb b/lib/tiny_admin/authentication.rb
index fe75184..f9195a1 100644
--- a/lib/tiny_admin/authentication.rb
+++ b/lib/tiny_admin/authentication.rb
@@ -5,7 +5,7 @@ class Authentication < BasicApp
     route do |r|
       r.get 'unauthenticated' do
         if current_user
-          r.redirect settings.root_path
+          r.redirect TinyAdmin.settings.root_path
         else
           render_login
         end
@@ -17,14 +17,14 @@ class Authentication < BasicApp
 
       r.get 'logout' do
         logout_user
-        r.redirect settings.root_path
+        r.redirect TinyAdmin.settings.root_path
       end
     end
 
     private
 
     def render_login(notices: nil, warnings: nil, errors: nil)
-      page = prepare_page(settings.authentication[:login], options: %i[no_menu compact_layout])
+      page = prepare_page(TinyAdmin.settings.authentication[:login], options: %i[no_menu compact_layout])
       page.messages = {
         notices: notices || flash['notices'],
         warnings: warnings || flash['warnings'],
diff --git a/lib/tiny_admin/basic_app.rb b/lib/tiny_admin/basic_app.rb
index faf9f24..234bd66 100644
--- a/lib/tiny_admin/basic_app.rb
+++ b/lib/tiny_admin/basic_app.rb
@@ -6,7 +6,7 @@ class BasicApp < Roda
 
     class << self
       def authentication_plugin
-        plugin = TinyAdmin::Settings.instance.authentication&.dig(:plugin)
+        plugin = TinyAdmin.settings.authentication&.dig(:plugin)
         plugin_class = plugin.is_a?(String) ? Object.const_get(plugin) : plugin
         plugin_class || TinyAdmin::Plugins::NoAuth
       end
@@ -17,8 +17,8 @@ def authentication_plugin
     plugin :render, engine: 'html'
     plugin :sessions, secret: SecureRandom.hex(64)
 
-    plugin authentication_plugin, TinyAdmin::Settings.instance.authentication
+    plugin authentication_plugin, TinyAdmin.settings.authentication
 
-    not_found { prepare_page(settings.page_not_found).call }
+    not_found { prepare_page(TinyAdmin.settings.page_not_found).call }
   end
 end
diff --git a/lib/tiny_admin/plugins/base_repository.rb b/lib/tiny_admin/plugins/base_repository.rb
index 1504850..0b2dc4f 100644
--- a/lib/tiny_admin/plugins/base_repository.rb
+++ b/lib/tiny_admin/plugins/base_repository.rb
@@ -18,7 +18,7 @@ def translate_value(value, field)
             converter = Object.const_get(field[:converter])
             converter.send(method, value, options: options || [])
           else
-            Settings.instance.helper_class.send(method, value, options: options || [])
+            TinyAdmin.settings.helper_class.send(method, value, options: options || [])
           end
         else
           value&.to_s
diff --git a/lib/tiny_admin/router.rb b/lib/tiny_admin/router.rb
index 02fd63c..a57ac1a 100644
--- a/lib/tiny_admin/router.rb
+++ b/lib/tiny_admin/router.rb
@@ -2,10 +2,11 @@
 
 module TinyAdmin
   class Router < BasicApp
+    TinyAdmin.settings.load_settings
+
     route do |r|
-      context.settings = TinyAdmin::Settings.instance
-      context.settings.load_settings
       context.router = r
+      context.settings = TinyAdmin.settings
 
       r.on 'auth' do
         context.slug = nil
@@ -26,7 +27,7 @@ class Router < BasicApp
 
       r.post '' do
         context.slug = nil
-        r.redirect settings.root_path
+        r.redirect TinyAdmin.settings.root_path
       end
 
       context.pages.each do |slug, page_data|
@@ -51,10 +52,10 @@ def render_page(page)
 
     def root_route(router)
       context.slug = nil
-      if settings.root[:redirect]
-        router.redirect route_for(settings.root[:redirect])
+      if TinyAdmin.settings.root[:redirect]
+        router.redirect route_for(TinyAdmin.settings.root[:redirect])
       else
-        page = settings.root[:page]
+        page = TinyAdmin.settings.root[:page]
         page_class = page.is_a?(String) ? Object.const_get(page) : page
         render_page prepare_page(page_class)
       end
@@ -102,7 +103,7 @@ def setup_collection_routes(router, options:)
 
     def setup_member_routes(router, options:)
       context.repository = options[:repository].new(options[:model])
-      action_options = (options[:show] || {}).merge(record_not_found_page: settings.record_not_found)
+      action_options = (options[:show] || {}).merge(record_not_found_page: TinyAdmin.settings.record_not_found)
 
       router.on String do |reference|
         context.reference = reference
diff --git a/lib/tiny_admin/settings.rb b/lib/tiny_admin/settings.rb
index 7ccf333..04c20b6 100644
--- a/lib/tiny_admin/settings.rb
+++ b/lib/tiny_admin/settings.rb
@@ -144,10 +144,10 @@ def add_page_section(slug, section)
     end
 
     def add_resource_section(slug, section)
-      repository = section[:repository] || settings.repository
+      repo = section[:repository] || repository
       context.resources[slug] = {
         model: section[:model].is_a?(String) ? Object.const_get(section[:model]) : section[:model],
-        repository: repository.is_a?(String) ? Object.const_get(repository) : repository
+        repository: repo.is_a?(String) ? Object.const_get(repo) : repo
       }
       resource_options = section.slice(:resource, :only, :index, :show, :collection_actions, :member_actions)
       resource_options[:only] ||= %i[index show]
diff --git a/lib/tiny_admin/utils.rb b/lib/tiny_admin/utils.rb
index da0504c..a487901 100644
--- a/lib/tiny_admin/utils.rb
+++ b/lib/tiny_admin/utils.rb
@@ -17,13 +17,13 @@ def params_to_s(params)
     def prepare_page(page_class, options: nil)
       page_class.new.tap do |page|
         page.options = options
-        page.head_component = settings.components[:head]&.new
-        page.flash_component = settings.components[:flash]&.new
-        page.navbar_component = settings.components[:navbar]&.new
+        page.head_component = TinyAdmin.settings.components[:head]&.new
+        page.flash_component = TinyAdmin.settings.components[:flash]&.new
+        page.navbar_component = TinyAdmin.settings.components[:navbar]&.new
         page.navbar_component&.update_attributes(
           current_slug: context&.slug,
-          root_path: settings.root_path,
-          root_title: settings.root[:title],
+          root_path: TinyAdmin.settings.root_path,
+          root_title: TinyAdmin.settings.root[:title],
           items: options&.include?(:no_menu) ? [] : context&.navbar
         )
         yield(page) if block_given?
@@ -31,7 +31,7 @@ def prepare_page(page_class, options: nil)
     end
 
     def route_for(section, reference: nil, action: nil, query: nil)
-      root_path = settings.root_path == '/' ? nil : settings.root_path
+      root_path = TinyAdmin.settings.root_path == '/' ? nil : TinyAdmin.settings.root_path
       route = [root_path, section, reference, action].compact.join("/")
       route << "?#{query}" if query
       route[0] == '/' ? route : route.prepend('/')
@@ -46,9 +46,5 @@ def to_label(string)
     def context
       TinyAdmin::Context.instance
     end
-
-    def settings
-      TinyAdmin::Settings.instance
-    end
   end
 end
diff --git a/lib/tiny_admin/views/default_layout.rb b/lib/tiny_admin/views/default_layout.rb
index d5fd9a1..f1ea012 100644
--- a/lib/tiny_admin/views/default_layout.rb
+++ b/lib/tiny_admin/views/default_layout.rb
@@ -6,7 +6,7 @@ class DefaultLayout < BasicLayout
       attr_accessor :flash_component, :head_component, :messages, :navbar_component, :options, :title
 
       def template(&block)
-        extra_styles = settings.extra_styles
+        extra_styles = TinyAdmin.settings.extra_styles
         flash_component&.messages = messages
         head_component&.update_attributes(page_title: title, style_links: style_links, extra_styles: extra_styles)
 
@@ -49,7 +49,7 @@ def main_content
       end
 
       def style_links
-        settings.style_links || [
+        TinyAdmin.settings.style_links || [
           # Bootstrap CDN
           {
             href: 'https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css',
@@ -61,7 +61,7 @@ def style_links
       end
 
       def render_scripts
-        (settings.scripts || []).each do |script_attrs|
+        (TinyAdmin.settings.scripts || []).each do |script_attrs|
           script(**script_attrs)
         end
       end
