diff --git a/lib/commander/runner.rb b/lib/commander/runner.rb
index <HASH>..<HASH> 100644
--- a/lib/commander/runner.rb
+++ b/lib/commander/runner.rb
@@ -328,7 +328,6 @@ module Commander
     # again for the command.
 
     def remove_global_options(options, args)
-      # TODO: refactor with flipflop, please TJ ! have time to refactor me !
       options.each do |option|
         switches = option[:switches].dup
         next if switches.empty?
@@ -341,6 +340,7 @@ module Commander
 
         past_switch, arg_removed = false, false
         args.delete_if do |arg|
+          break if arg == '--'
           if switches.any? { |s| s[0, arg.length] == arg }
             arg_removed = !switch_has_arg
             past_switch = true
diff --git a/spec/runner_spec.rb b/spec/runner_spec.rb
index <HASH>..<HASH> 100644
--- a/spec/runner_spec.rb
+++ b/spec/runner_spec.rb
@@ -643,4 +643,18 @@ describe Commander do
       end.run!
     end
   end
+
+  describe 'with double dash' do
+    it 'should interpret the remainder as arguments' do
+      new_command_runner 'foo', '--', '-x' do
+        command('foo') do |c|
+          c.option '-x', 'Switch'
+          c.when_called do |args, options|
+            expect(args).to eq(%w(-x))
+            expect(options.x).to be_nil
+          end
+        end
+      end.run!
+    end
+  end
 end
Fix global option code to preserve double dash