       {:ok, option, value, rest} ->
         # the option exists and it was successfully parsed
         kinds = List.wrap Keyword.get(switches, option)
-        new_opts = do_store_option(opts, option, value, kinds)
+        new_opts = store_option(opts, option, value, kinds)
         do_parse(rest, config, new_opts, args, invalid, all?)
 
       {:invalid, option, value, rest} ->

  end

  defp expand_multiletter_alias(letters, value) when is_binary(letters) do
    expanded = letters |> String.codepoints() |> Enum.map(&("-" <> &1))
    last = List.last(expanded) <> if(value, do: "=" <> value, else: "")
    Enum.drop(expanded, -1) ++ [last]
  end

  defp option_defined?(:unknown, _switches) do

  end

  # Handles -a, -abc, -abc=something
  defp next(["-" <> option | rest] = argv, aliases, switches, strict?) do
    {option, value} = split_option(option)
    original = "-" <> option

    cond do
      is_nil(value) and negative_number?(original) ->
        {:error, argv}
      String.contains?(option, ["-", "_"]) ->
        {:undefined, original, value, rest}
      String.length(option) > 1 ->
        opt = get_option(option)
        alias = aliases[opt]
        if opt && alias do
          IO.warn "multi-letter aliases are deprecated, got: #{inspect(opt)}"
          do_next({:default, alias}, value, original, rest, switches, strict?)
        else
          next(expand_multiletter_alias(option, value) ++ rest, aliases, switches, strict?)
        end
      true ->
        # We have a regular one-letter alias here
        tagged = tag_oneletter_alias(option, aliases)
        do_next(tagged, value, original, rest, switches, strict?)
    end
  end

