diff --git a/lib/quby/compiler/dsl/base.rb b/lib/quby/compiler/dsl/base.rb
index 8b1c67ae129d2c2fda048f74de8e395a5f90349f..9949fcdc89674bc673398b7234f3cc788bf162ca 100644
--- a/lib/quby/compiler/dsl/base.rb
+++ b/lib/quby/compiler/dsl/base.rb
@@ -9,8 +9,8 @@ module Quby
       class Base
         include Helpers
 
-        def self.build(*args, &block)
-          builder = new(*args)
+        def self.build(*args, **kwargs, &block)
+          builder = new(*args, **kwargs)
           builder.instance_eval(&block) if block
           builder.build
         end
diff --git a/lib/quby/compiler/dsl/calls_custom_methods.rb b/lib/quby/compiler/dsl/calls_custom_methods.rb
index b2324fbe1f8ec79e8934e0532f06af61abb2bd8c..724593e584da1c23b528cf544e7a9c61860f538d 100644
--- a/lib/quby/compiler/dsl/calls_custom_methods.rb
+++ b/lib/quby/compiler/dsl/calls_custom_methods.rb
@@ -6,8 +6,7 @@ module Quby
       module CallsCustomMethods
         attr_reader :custom_methods
 
-        def initialize(*args)
-          options = args.last.is_a?(::Hash) ? args.last : {}
+        def initialize(*args, **options)
           @custom_methods = options[:custom_methods] || {}
           super
         end
diff --git a/lib/quby/compiler/dsl/charting/chart_builder.rb b/lib/quby/compiler/dsl/charting/chart_builder.rb
index 3dd669b0eecb395a7cb46d813510ddc469d98bdb..57a512ba19bd952029083ea992aacc9136c6f851 100644
--- a/lib/quby/compiler/dsl/charting/chart_builder.rb
+++ b/lib/quby/compiler/dsl/charting/chart_builder.rb
@@ -16,8 +16,8 @@ module Quby
           @chart_class
         end
 
-        def initialize(questionnaire, key, options = {})
-          @chart = self.class.chart_class.new(key, options)
+        def initialize(questionnaire, key, **options)
+          @chart = self.class.chart_class.new(key, **options)
           @questionnaire = questionnaire
         end
 
@@ -49,7 +49,7 @@ module Quby
           @chart.plotlines << {value: value, color: color}
         end
 
-        def plot(key, options = {})
+        def plot(key, **options)
           unless plottable = @questionnaire.find_plottable(key)
             fail "Questionnaire #{@questionnaire.key} chart #{@chart.key} references unknown score or question #{key}"
           end
diff --git a/lib/quby/compiler/dsl/charting/overview_chart_builder.rb b/lib/quby/compiler/dsl/charting/overview_chart_builder.rb
index 8d0a442ac0779df143772a75d5f56e8d0c4fab28..f871cbfd95834341c391707abd88c871b8fff2c5 100644
--- a/lib/quby/compiler/dsl/charting/overview_chart_builder.rb
+++ b/lib/quby/compiler/dsl/charting/overview_chart_builder.rb
@@ -7,7 +7,7 @@ module Quby
       class OverviewChartBuilder < ChartBuilder
         set_chart_class(Entities::Charting::OverviewChart)
 
-        def initialize(questionnaire, options = {})
+        def initialize(questionnaire, **options)
           @questionnaire = questionnaire
           @chart = self.class.chart_class.new
         end
diff --git a/lib/quby/compiler/dsl/helpers.rb b/lib/quby/compiler/dsl/helpers.rb
index 1d1f000d9416c6ba7bc72f0943ab4e6624668e69..4b9f0197dd59177b75ce099e9a67dd92f4cc4103 100644
--- a/lib/quby/compiler/dsl/helpers.rb
+++ b/lib/quby/compiler/dsl/helpers.rb
@@ -7,8 +7,8 @@ module Quby
         include ActionView::Helpers::TagHelper
         include ActionView::Helpers::OutputSafetyHelper
 
-        def image_tag(source, options = {})
-          tag.img(options.reverse_merge(src: source, alt: image_alt(source)))
+        def image_tag(source, **options)
+          tag.img(**options.reverse_merge(src: source, alt: image_alt(source)))
         end
 
         # Copied from ActionController::Base.helpers.image_alt, because it will be removed from Rails 6.0, but we want
@@ -18,7 +18,7 @@ module Quby
         end
 
         def check_question_keys_uniqueness(key, options, questionnaire)
-          keys = QuestionBuilder.build(key, options).claimed_keys
+          keys = QuestionBuilder.build(key, **options).claimed_keys
           if keys.any? { |k| questionnaire.key_in_use? k }
             fail "#{questionnaire.key}:#{key}: A question or option with input key #{key} is already defined."
           end
diff --git a/lib/quby/compiler/dsl/panel_builder.rb b/lib/quby/compiler/dsl/panel_builder.rb
index fec347925674a7c44e1a23b7987e5787be44bb4f..9a959778001071d1d2fdae1e6ecabdc5da42a2f2 100644
--- a/lib/quby/compiler/dsl/panel_builder.rb
+++ b/lib/quby/compiler/dsl/panel_builder.rb
@@ -9,9 +9,9 @@ module Quby
         attr_reader :title
         attr_reader :questionnaire
 
-        def initialize(title, options = {})
-          @panel = Entities::Panel.new(options.merge(title: title, items: []))
-          @default_question_options = options[:default_question_options] || {}
+        def initialize(title, default_question_options: {}, **options)
+          @panel = Entities::Panel.new({title: title, items: [], **options})
+          @default_question_options = default_question_options
           @questionnaire = options[:questionnaire]
           @custom_methods = options[:custom_methods] || {}
         end
@@ -41,25 +41,28 @@ module Quby
           @panel.items << Entities::Text.new('', raw_content: video_html)
         end
 
-        def default_question_options(options = {})
+        def default_question_options(**options)
           @default_question_options = @default_question_options.merge(options)
         end
 
-        def question(key, options = {}, &block)
+        def question(key, **options, &block)
           options = @default_question_options.merge(options).merge(questionnaire: @panel.questionnaire)
 
           check_question_keys_uniqueness key, options, @questionnaire
 
-          question = QuestionBuilder.build(key, options, &block)
+          question = QuestionBuilder.build(key, **options, &block)
 
           @questionnaire.register_question(question)
           @panel.items << question
         end
 
-        def table(options = {}, &block)
-          table_builder = TableBuilder.new(@panel, options.merge(questionnaire: @panel.questionnaire,
-                                                                 default_question_options: @default_question_options,
-                                                                 custom_methods: @custom_methods))
+        def table(**options, &block)
+          table_builder = TableBuilder.new \
+            @panel,
+            questionnaire: @panel.questionnaire,
+            default_question_options: @default_question_options,
+            custom_methods: @custom_methods,
+            **options
           table_builder.instance_eval(&block) if block
         end
 
diff --git a/lib/quby/compiler/dsl/question_builder.rb b/lib/quby/compiler/dsl/question_builder.rb
index 8f4ec18a9150e2363ff7bcc552f326f84ddbf0b4..1e85a29bfbfd800242d8191b59b61d777307d3c3 100644
--- a/lib/quby/compiler/dsl/question_builder.rb
+++ b/lib/quby/compiler/dsl/question_builder.rb
@@ -31,8 +31,8 @@ module Quby
           'hidden'    => Questions::DeprecatedQuestionBuilder
         }
 
-        def self.build(key, options = {}, &block)
-          BUILDERS.fetch(options.fetch(:type).to_s).build(key, options, &block)
+        def self.build(key, **options, &block)
+          BUILDERS.fetch(options.fetch(:type).to_s).build(key, **options, &block)
         end
       end
     end
diff --git a/lib/quby/compiler/dsl/questionnaire_builder.rb b/lib/quby/compiler/dsl/questionnaire_builder.rb
index f18c8f0a5ecda74e786e6adbb57d1346496ade45..cad578f8d2f28349e94ff7868ac07e83bce039e6 100644
--- a/lib/quby/compiler/dsl/questionnaire_builder.rb
+++ b/lib/quby/compiler/dsl/questionnaire_builder.rb
@@ -148,7 +148,7 @@ module Quby
         end
 
         def panel(title = nil, options = {}, &block)
-          panel = PanelBuilder.build(title, options.merge(default_panel_options), &block)
+          panel = PanelBuilder.build(title, **options, **default_panel_options, &block)
           @questionnaire.add_panel(panel)
         end
 
@@ -167,28 +167,28 @@ module Quby
           @questionnaire.lookup_tables[key] = {levels: levels, tree: tree}
         end
 
-        def default_question_options(options = {})
+        def default_question_options(**options)
           @default_question_options.merge!(options)
         end
 
         # Short-circuit the question command to perform an implicit panel
-        def question(key, options = {}, &block)
+        def question(key, **options, &block)
           panel(nil, default_panel_options) do
-            question(key, @default_question_options.merge(options).merge(questionnaire: @questionnaire), &block)
+            question(key, questionnaire: @questionnaire, **@default_question_options, **options, &block)
           end
         end
 
         # Short-circuit the text command to perform an implicit panel
-        def text(value, options = {})
-          panel(nil, default_panel_options) do
-            text(value, options)
+        def text(value, **options)
+          panel(nil, **default_panel_options) do
+            text(value, **options)
           end
         end
 
         # Short-circuit the table command to perform an implicit panel
-        def table(options = {}, &block)
-          panel(nil, default_panel_options) do
-            table(options, &block)
+        def table(**options, &block)
+          panel(nil, **default_panel_options) do
+            table(**options, &block)
           end
         end
 
@@ -197,15 +197,15 @@ module Quby
         #   # variables are private to the score calculation
         #   q01 + q02 + q03
         # end
-        def variable(key, options = {}, &block)
-          @questionnaire.add_score_calculation ScoreBuilder.new(key, options, &block).build
+        def variable(key, **options, &block)
+          @questionnaire.add_score_calculation ScoreBuilder.new(key, **options, &block).build
         end
 
-        def score(key, options = {}, &block)
+        def score(key, **options, &block)
           @questionnaire.errors.add "Score #{key}", 'misses label in score call' if options[:label].blank?
           schema = options.delete(:schema)
           score_schema(key, options[:label], schema) if schema.present?
-          variable(key, options.reverse_merge(score: true), &block)
+          variable(key, score: true, **options, &block)
         end
 
         def score_schema(key, label, options = nil, &block)
@@ -222,16 +222,16 @@ module Quby
           end
         end
 
-        def attention(options = {}, &block)
-          variable(:attention, options.reverse_merge(action: true), &block)
+        def attention(**options, &block)
+          variable(:attention, action: true, **options, &block)
         end
 
-        def alarm(options = {}, &block)
-          variable(:alarm, options.reverse_merge(action: true), &block)
+        def alarm(**options, &block)
+          variable(:alarm, action: true, **options, &block)
         end
 
-        def completion(options = {}, &block)
-          variable(:completion, options.reverse_merge(completion: true), &block)
+        def completion(**options, &block)
+          variable(:completion, completion: true, **options, &block)
         end
 
         def overview_chart(*args, &block)
@@ -255,15 +255,15 @@ module Quby
           @questionnaire.add_chart(builder.build(&block))
         end
 
-        def flag(flag_options)
+        def flag(**flag_options)
           @questionnaire.add_flag flag_options
         end
 
-        def textvar(textvar_options)
+        def textvar(**textvar_options)
           @questionnaire.add_textvar textvar_options
         end
 
-        def outcome_table(table_options)
+        def outcome_table(**table_options)
           @questionnaire.add_outcome_table table_options
         end
 
diff --git a/lib/quby/compiler/dsl/questions/base.rb b/lib/quby/compiler/dsl/questions/base.rb
index c78d3d92e8a9e4052da41e05f26fd14726d8e4eb..033c912bfad32ae0debed0df367b1754c0e18ef4 100644
--- a/lib/quby/compiler/dsl/questions/base.rb
+++ b/lib/quby/compiler/dsl/questions/base.rb
@@ -10,8 +10,8 @@ module Quby
           attr_reader :type
           attr_reader :questionnaire
 
-          def initialize(key, options = {})
-            @questionnaire = options[:questionnaire]
+          def initialize(key, questionnaire:, **options)
+            @questionnaire = questionnaire
           end
 
           def build
@@ -111,7 +111,7 @@ module Quby
         end
 
         module Subquestions
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @default_question_options = options[:default_question_options] || {}
             @title_question = nil
@@ -126,7 +126,7 @@ module Quby
             super
           end
 
-          def title_question(key, options = {}, &block)
+          def title_question(key, **options, &block)
             options = @default_question_options.merge({depends_on: @question.key,
                                                        questionnaire: @questionnaire,
                                                        parent: @question,
@@ -135,13 +135,13 @@ module Quby
 
             check_question_keys_uniqueness key, options, @questionnaire
 
-            question = QuestionBuilder.build(key, options, &block)
+            question = QuestionBuilder.build(key, **options, &block)
 
             @questionnaire.register_question(question)
             @title_question = question
           end
 
-          def question(key, options = {}, &block)
+          def question(key, **options, &block)
             options = @default_question_options.merge(options)
                                                .merge(questionnaire: @questionnaire,
                                                       parent: @question,
@@ -149,7 +149,7 @@ module Quby
 
             check_question_keys_uniqueness key, options, @questionnaire
 
-            question = QuestionBuilder.build(key, options, &block)
+            question = QuestionBuilder.build(key, **options, &block)
 
             @questionnaire.register_question(question)
             @question.options.last.questions << question
diff --git a/lib/quby/compiler/dsl/questions/checkbox_question_builder.rb b/lib/quby/compiler/dsl/questions/checkbox_question_builder.rb
index 0fb9e1ba61e80f9fa8e7d5fe7e79d326a1c93f66..2a16098e945cdecca14e016248b13d78ab7d7628 100644
--- a/lib/quby/compiler/dsl/questions/checkbox_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/checkbox_question_builder.rb
@@ -9,7 +9,7 @@ module Quby
           include Subquestions
           include InnerTitles
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::CheckboxQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/questions/date_question_builder.rb b/lib/quby/compiler/dsl/questions/date_question_builder.rb
index bed7190af8e0d31464eea2e8ea0f0e61ffca5f03..782edee9465d61ddedc54c233eebfa43824bc9f1 100644
--- a/lib/quby/compiler/dsl/questions/date_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/date_question_builder.rb
@@ -7,7 +7,7 @@ module Quby
         class DateQuestionBuilder < Base
           include MinMaxValidations
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::DateQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/questions/deprecated_question_builder.rb b/lib/quby/compiler/dsl/questions/deprecated_question_builder.rb
index 7acad8096c2ddf973a73bb03f7e020decc07c040..28975965ff73667911720bc6656ecad2b6c6f2e3 100644
--- a/lib/quby/compiler/dsl/questions/deprecated_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/deprecated_question_builder.rb
@@ -7,7 +7,7 @@ module Quby
         class DeprecatedQuestionBuilder < Base
           include MultipleChoice
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::DeprecatedQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/questions/float_question_builder.rb b/lib/quby/compiler/dsl/questions/float_question_builder.rb
index 02796d94c1e3869b93c1f1c277b6300b3da61c93..89fd7ce9df5f7f8d186caa53036e9171deb35efa 100644
--- a/lib/quby/compiler/dsl/questions/float_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/float_question_builder.rb
@@ -10,7 +10,7 @@ module Quby
           include Units
           include Sizes
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::FloatQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/questions/integer_question_builder.rb b/lib/quby/compiler/dsl/questions/integer_question_builder.rb
index 0e5ef7322f1db4d2f969ff60c2dd96cdb5f8814e..201604f12c1cb286552de5b3523a84741cb3b439 100644
--- a/lib/quby/compiler/dsl/questions/integer_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/integer_question_builder.rb
@@ -10,7 +10,7 @@ module Quby
           include Units
           include Sizes
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::IntegerQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/questions/radio_question_builder.rb b/lib/quby/compiler/dsl/questions/radio_question_builder.rb
index 9b11f31a2bbfa181c1e9958ca7f3c9332dcf5804..ec9a6895643c159628ec76a3cac795df02006689 100644
--- a/lib/quby/compiler/dsl/questions/radio_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/radio_question_builder.rb
@@ -9,7 +9,7 @@ module Quby
           include Subquestions
           include InnerTitles
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::RadioQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/questions/select_question_builder.rb b/lib/quby/compiler/dsl/questions/select_question_builder.rb
index fa9ec6d70e61cdf002c72ac9cb8a6c8eb174051e..d99e0182e31d4a18b6d5b6d17721d36f28820330 100644
--- a/lib/quby/compiler/dsl/questions/select_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/select_question_builder.rb
@@ -7,7 +7,7 @@ module Quby
         class SelectQuestionBuilder < Base
           include MultipleChoice
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::SelectQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/questions/string_question_builder.rb b/lib/quby/compiler/dsl/questions/string_question_builder.rb
index 2dddd2d5c56cb9157736684f2179fef0db31cce5..f18536175045d91deae8e093d9829973fcee18a1 100644
--- a/lib/quby/compiler/dsl/questions/string_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/string_question_builder.rb
@@ -9,7 +9,7 @@ module Quby
           include Units
           include Sizes
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::StringQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/questions/text_question_builder.rb b/lib/quby/compiler/dsl/questions/text_question_builder.rb
index d7df15dc2359ed1aab05ad6789abb32b03de07a2..ad8b88c31df2de8f07a854aff243e10e1e23a8cb 100644
--- a/lib/quby/compiler/dsl/questions/text_question_builder.rb
+++ b/lib/quby/compiler/dsl/questions/text_question_builder.rb
@@ -7,7 +7,7 @@ module Quby
         class TextQuestionBuilder < Base
           include RegexpValidations
 
-          def initialize(key, options = {}, &block)
+          def initialize(key, **options, &block)
             super
             @question = Entities::Questions::TextQuestion.new(key, options)
           end
diff --git a/lib/quby/compiler/dsl/score_builder.rb b/lib/quby/compiler/dsl/score_builder.rb
index f898a3ca0b03ac7e5f3300d484072cc4c4b181c5..ea30451c830ed63dcac44c1833f3801f3e67d78a 100644
--- a/lib/quby/compiler/dsl/score_builder.rb
+++ b/lib/quby/compiler/dsl/score_builder.rb
@@ -9,7 +9,7 @@ module Quby
         attr_reader :key
         attr_reader :calculation
 
-        def initialize(key, options = {}, &block)
+        def initialize(key, **options, &block)
           @score = Entities::ScoreCalculation.new(key, options, &block)
         end
 
diff --git a/lib/quby/compiler/dsl/table_builder.rb b/lib/quby/compiler/dsl/table_builder.rb
index f44e8b266813d592dbb8c83b01c64d64d4c757e0..0fadaee5f3a8982c63b0579845e04d86c010a062 100644
--- a/lib/quby/compiler/dsl/table_builder.rb
+++ b/lib/quby/compiler/dsl/table_builder.rb
@@ -9,10 +9,10 @@ module Quby
         prepend CallsCustomMethods
         include Helpers
 
-        def initialize(panel, options = {})
+        def initialize(panel, default_question_options: {}, **options)
           @panel = panel
           @table = Entities::Table.new(options)
-          @default_question_options = options[:default_question_options] || {}
+          @default_question_options = default_question_options
           @panel.items << @table
         end
 
@@ -24,11 +24,11 @@ module Quby
           @table.description = value
         end
 
-        def text(value, options = {})
+        def text(value, **options)
           @table.items << Entities::Text.new(value.to_s, options)
         end
 
-        def question(key, options = {}, &block)
+        def question(key, **options, &block)
           options = @default_question_options.merge(options)
                                              .merge(table: @table,
                                                     questionnaire: @panel.questionnaire)
@@ -36,7 +36,7 @@ module Quby
           check_question_keys_uniqueness key, options, @panel.questionnaire
           fail "You can't create a slider in a table at the moment" if options[:as] == :slider
 
-          question = QuestionBuilder.build(key, options, &block)
+          question = QuestionBuilder.build(key, **options, &block)
 
           @panel.questionnaire.register_question(question)
           @table.items << question
diff --git a/lib/quby/compiler/entities/questionnaire.rb b/lib/quby/compiler/entities/questionnaire.rb
index c22c25b076c21c56ff254befa1f3092e6f86387e..5a96efc1ec853d7c71c04e0a5aae98fafea01269 100755
--- a/lib/quby/compiler/entities/questionnaire.rb
+++ b/lib/quby/compiler/entities/questionnaire.rb
@@ -283,7 +283,7 @@ module Quby
           end
           flag_options[:key] = flag_key
           fail(ArgumentError, "Flag '#{flag_key}' already defined") if flags.key?(flag_key)
-          flags[flag_key] = Flag.new(flag_options)
+          flags[flag_key] = Flag.new(**flag_options)
         end
 
         def filter_flags(given_flags)
@@ -297,7 +297,7 @@ module Quby
           textvar_options[:key] = textvar_key
           validate_textvar_keys_unique(textvar_key)
           validate_depends_on_flag(textvar_key, textvar_options)
-          textvars[textvar_key] = Textvar.new(textvar_options)
+          textvars[textvar_key] = Textvar.new(**textvar_options)
         end
 
         def filter_textvars(given_textvars)
diff --git a/spec/quby/compiler/dsl/charting/bar_chart_builder_spec.rb b/spec/quby/compiler/dsl/charting/bar_chart_builder_spec.rb
index e6337b81d6e2567d9224a6e9a545c305e4e775e8..30bdbf5d3317d1af58c302f1381d1112018916c9 100644
--- a/spec/quby/compiler/dsl/charting/bar_chart_builder_spec.rb
+++ b/spec/quby/compiler/dsl/charting/bar_chart_builder_spec.rb
@@ -12,8 +12,8 @@ module Quby::Compiler::DSL
       expect(dsl { }).to be_an_instance_of(::Quby::Compiler::Entities::Charting::BarChart)
     end
 
-    def dsl(key = :test, options = {}, &block)
-      builder = BarChartBuilder.new(questionnaire, key, options)
+    def dsl(key = :test, **options, &block)
+      builder = BarChartBuilder.new(questionnaire, key, **options)
       builder.build(&block)
     end
 
diff --git a/spec/quby/compiler/dsl/charting/chart_builder_spec.rb b/spec/quby/compiler/dsl/charting/chart_builder_spec.rb
index fd74c840b59bed83d986560f367ec04b8eaf78ae..6ad089001b5963c6e75cc79e65eb8e1897beb90d 100644
--- a/spec/quby/compiler/dsl/charting/chart_builder_spec.rb
+++ b/spec/quby/compiler/dsl/charting/chart_builder_spec.rb
@@ -17,8 +17,8 @@ module Quby::Compiler::DSL
     before { ChartBuilder.set_chart_class(chart_class) }
     let(:chart_builder) { ChartBuilder.new questionnaire, 'chart_key' }
 
-    def dsl(key = :test, options = {}, &block)
-      builder = ChartBuilder.new(questionnaire, key, options)
+    def dsl(key = :test, **options, &block)
+      builder = ChartBuilder.new(questionnaire, key, **options)
       builder.build(&block)
     end
 
diff --git a/spec/quby/compiler/dsl/charting/line_chart_builder_spec.rb b/spec/quby/compiler/dsl/charting/line_chart_builder_spec.rb
index 6130e3112e185f7481d4ff46ddd0541ca797cfb4..3c58f26d2ce226f57e9e18bf5c09753fd29925bf 100644
--- a/spec/quby/compiler/dsl/charting/line_chart_builder_spec.rb
+++ b/spec/quby/compiler/dsl/charting/line_chart_builder_spec.rb
@@ -21,7 +21,7 @@ module Quby::Compiler::DSL
     end
 
     it 'raises when y-axis range is not specified' do
-      expect { dsl(:test, {}) { } }.to raise_error(/no range specified/)
+      expect { dsl(:test, y_range: nil) { } }.to raise_error(/no range specified/)
     end
 
     it 'sets tonality' do
@@ -40,8 +40,8 @@ module Quby::Compiler::DSL
       expect(dsl { }).to be_an_instance_of(::Quby::Compiler::Entities::Charting::LineChart)
     end
 
-    def dsl(key = :test, options = {y_range: (0..20)}, &block)
-      builder = LineChartBuilder.new(questionnaire, key, options)
+    def dsl(key = :test, y_range: (0..20), **options, &block)
+      builder = LineChartBuilder.new(questionnaire, key, y_range: y_range, **options)
       builder.build(&block)
     end
   end
diff --git a/spec/quby/compiler/dsl/charting/radar_chart_builder_spec.rb b/spec/quby/compiler/dsl/charting/radar_chart_builder_spec.rb
index 81a4809242e4b8739e4ac7ec4b2e7fef3c0d953a..b381af556f806c8837806461228b656360d65bb5 100644
--- a/spec/quby/compiler/dsl/charting/radar_chart_builder_spec.rb
+++ b/spec/quby/compiler/dsl/charting/radar_chart_builder_spec.rb
@@ -20,8 +20,8 @@ module Quby::Compiler::DSL
       expect(dsl { tick_interval 1 }.tick_interval).to eq 1
     end
 
-    def dsl(key = :test, options = {}, &block)
-      builder = RadarChartBuilder.new(questionnaire, key, options)
+    def dsl(key = :test, **options, &block)
+      builder = RadarChartBuilder.new(questionnaire, key, **options)
       builder.build(&block)
     end
   end
diff --git a/spec/quby/compiler/dsl/questionnaire_builder_spec.rb b/spec/quby/compiler/dsl/questionnaire_builder_spec.rb
index 03bbc36d9430554e2ec9baae1fe1ef22771ae881..3d829204f5cfef6378990c00ad14728f34b619bf 100644
--- a/spec/quby/compiler/dsl/questionnaire_builder_spec.rb
+++ b/spec/quby/compiler/dsl/questionnaire_builder_spec.rb
@@ -425,7 +425,7 @@ module Quby::Compiler::DSL
         }
 
         dsl do
-          add_lookup_tree :interpretations, lookup_options
+          add_lookup_tree :interpretations, **lookup_options
         end
 
         expect(questionnaire.lookup_tables[:interpretations]).to eq(lookup_options)