diff --git a/cmd2/argparse_completer.py b/cmd2/argparse_completer.py
index 21007289..ef35eabc 100644
--- a/cmd2/argparse_completer.py
+++ b/cmd2/argparse_completer.py
@@ -641,8 +641,11 @@ class ArgparseCompleter:
                 arg_choices.sort()
                 self._cmd2_app.matches_sorted = True
 
-            # Since choices can be various types, convert them all to strings
-            arg_choices = [str(x) for x in arg_choices]
+            # Since choices can be various types, make sure they are all strings
+            for index, choice in enumerate(arg_choices):
+                # Prevent converting anything that is already a str (i.e. CompletionItem)
+                if not isinstance(choice, str):
+                    arg_choices[index] = str(choice)
         else:
             arg_choices = getattr(arg_state.action, ATTR_CHOICES_CALLABLE, None)
             if arg_choices is None:

diff --git a/tests/test_argparse_completer.py b/tests/test_argparse_completer.py
index 75f24b3e..6002a856 100644
--- a/tests/test_argparse_completer.py
+++ b/tests/test_argparse_completer.py
@@ -107,6 +107,7 @@ class ArgparseCompleterTester(cmd2.Cmd):
     int_choices = [-1, 1, -2, 2, 0, -12]
     static_choices_list = ['static', 'choices', 'stop', 'here']
     choices_from_provider = ['choices', 'provider', 'probably', 'improved']
+    completion_item_choices = [CompletionItem('choice_1', 'A description'), CompletionItem('choice_2', 'Another description')]
 
     def choices_provider(self) -> List[str]:
         """Method that provides choices"""
@@ -150,6 +151,7 @@ class ArgparseCompleterTester(cmd2.Cmd):
         nargs=argparse.ONE_OR_MORE,
     )
     choices_parser.add_argument('-i', '--int', type=int, help='a flag with an int type', choices=int_choices)
+    choices_parser.add_argument('--completion_items', help='choices are CompletionItems', choices=completion_item_choices)
 
     # Positional args for choices command
     choices_parser.add_argument("list_pos", help="a positional populated with a choices list", choices=static_choices_list)
@@ -729,6 +731,23 @@ def test_completion_items(ac_app, num_aliases, show_description):
         assert 'help' in first_result_line
 
 
+def test_completion_item_choices(ac_app):
+    text = ''
+    line = 'choices --completion_items {}'.format(text)
+    endidx = len(line)
+    begidx = endidx - len(text)
+
+    first_match = complete_tester(text, line, begidx, endidx, ac_app)
+    assert first_match is not None
+    assert len(ac_app.completion_matches) == len(ac_app.completion_item_choices)
+    assert len(ac_app.display_matches) == len(ac_app.completion_item_choices)
+
+    # Make sure a completion table was created
+    first_result_line = normalize(ac_app.formatted_completions)[1]
+    assert 'choice_1' in first_result_line
+    assert 'A description' in first_result_line
+
+
 @pytest.mark.parametrize(
     'args, completions',
     [

Argparse choices can't be CompletionItems
ArgparseCompleter is converting CompletionItems to normal strings when they appear in a choices list.
tests/test_argparse_completer.py::test_completion_item_choices
tests/test_argparse_completer.py::test_help[music] tests/test_argparse_completer.py::test_help[music tests/test_argparse_completer.py::test_bad_subcommand_help tests/test_argparse_completer.py::test_complete_help[-mus-completions0] tests/test_argparse_completer.py::test_complete_help[music-cre-completions1] tests/test_argparse_completer.py::test_complete_help[music-creab-completions2] tests/test_argparse_completer.py::test_complete_help[music tests/test_argparse_completer.py::test_complete_help[fake tests/test_argparse_completer.py::test_subcommand_completions[create--completions0] tests/test_argparse_completer.py::test_subcommand_completions[create-ja-completions1] tests/test_argparse_completer.py::test_subcommand_completions[create-foo-completions2] tests/test_argparse_completer.py::test_subcommand_completions[creab-ja-completions3] tests/test_argparse_completer.py::test_autcomp_flag_completion[flag---completion_matches0-display_matches0] tests/test_argparse_completer.py::test_autcomp_flag_completion[flag----completion_matches1-display_matches1] tests/test_argparse_completer.py::test_autcomp_flag_completion[flag--n-completion_matches2-display_matches2] tests/test_argparse_completer.py::test_autcomp_flag_completion[flag---n-completion_matches3-display_matches3] tests/test_argparse_completer.py::test_autcomp_flag_completion[flag tests/test_argparse_completer.py::test_autcomp_flag_completion[flag--r-completion_matches5-display_matches5] tests/test_argparse_completer.py::test_autcomp_flag_completion[flag---rem-completion_matches6-display_matches6] tests/test_argparse_completer.py::test_autcomp_flag_completion[flag--s-completion_matches9-display_matches9] tests/test_argparse_completer.py::test_autcomp_flag_completion[flag---s-completion_matches10-display_matches10] tests/test_argparse_completer.py::test_autcomp_flag_completion[plus_flag-+-completion_matches13-display_matches13] tests/test_argparse_completer.py::test_autcomp_flag_completion[plus_flag-++-completion_matches14-display_matches14] tests/test_argparse_completer.py::test_autcomp_flag_completion[plus_flag tests/test_argparse_completer.py::test_autocomp_flag_choices_completion[-l--completions0] tests/test_argparse_completer.py::test_autocomp_flag_choices_completion[--list-s-completions1] tests/test_argparse_completer.py::test_autocomp_flag_choices_completion[-p--completions2] tests/test_argparse_completer.py::test_autocomp_flag_choices_completion[--provider-pr-completions3] tests/test_argparse_completer.py::test_autocomp_flag_choices_completion[-i--completions4] tests/test_argparse_completer.py::test_autocomp_flag_choices_completion[--int-1-completions5] tests/test_argparse_completer.py::test_autocomp_flag_choices_completion[--int---completions6] tests/test_argparse_completer.py::test_autocomp_flag_choices_completion[--int--1-completions7] tests/test_argparse_completer.py::test_autocomp_positional_choices_completion[1--completions0] tests/test_argparse_completer.py::test_autocomp_positional_choices_completion[1-s-completions1] tests/test_argparse_completer.py::test_autocomp_positional_choices_completion[2--completions2] tests/test_argparse_completer.py::test_autocomp_positional_choices_completion[2-pr-completions3] tests/test_argparse_completer.py::test_autocomp_positional_choices_completion[3--completions4] tests/test_argparse_completer.py::test_autocomp_positional_choices_completion[3-2-completions5] tests/test_argparse_completer.py::test_autocomp_positional_choices_completion[4--completions6] tests/test_argparse_completer.py::test_flag_sorting tests/test_argparse_completer.py::test_autocomp_flag_completers[-c--completions0] tests/test_argparse_completer.py::test_autocomp_flag_completers[--completer-f-completions1] tests/test_argparse_completer.py::test_autocomp_positional_completers[1--completions0] tests/test_argparse_completer.py::test_autocomp_positional_completers[1-p-completions1] tests/test_argparse_completer.py::test_autocomp_positional_completers[2--completions2] tests/test_argparse_completer.py::test_autocomp_positional_completers[2-m-completions3] tests/test_argparse_completer.py::test_autocomp_blank_token tests/test_argparse_completer.py::test_completion_items[1-False] tests/test_argparse_completer.py::test_completion_items[5-True] tests/test_argparse_completer.py::test_completion_items[100-False] tests/test_argparse_completer.py::test_autcomp_nargs[--set_value-completions0] tests/test_argparse_completer.py::test_autcomp_nargs[--set_value tests/test_argparse_completer.py::test_autcomp_nargs[--one_or_more-completions4] tests/test_argparse_completer.py::test_autcomp_nargs[--one_or_more tests/test_argparse_completer.py::test_autcomp_nargs[--optional-completions6] tests/test_argparse_completer.py::test_autcomp_nargs[--optional tests/test_argparse_completer.py::test_autcomp_nargs[--range-completions8] tests/test_argparse_completer.py::test_autcomp_nargs[--range tests/test_argparse_completer.py::test_autcomp_nargs[--remainder-completions11] tests/test_argparse_completer.py::test_autcomp_nargs[--remainder tests/test_argparse_completer.py::test_autcomp_nargs[-- tests/test_argparse_completer.py::test_autcomp_nargs[-completions17] tests/test_argparse_completer.py::test_autcomp_nargs[positional-completions18] tests/test_argparse_completer.py::test_autcomp_nargs[positional tests/test_argparse_completer.py::test_autcomp_nargs[the tests/test_argparse_completer.py::test_unfinished_flag_error[hint tests/test_argparse_completer.py::test_unfinished_flag_error[nargs tests/test_argparse_completer.py::test_completion_items_arg_header tests/test_argparse_completer.py::test_completion_items_descriptive_header tests/test_argparse_completer.py::test_autocomp_hint[hint--True] tests/test_argparse_completer.py::test_autocomp_hint[hint tests/test_argparse_completer.py::test_autocomp_hint[nargs tests/test_argparse_completer.py::test_autocomp_hint[hint---False] tests/test_argparse_completer.py::test_autocomp_hint_no_help_text tests/test_argparse_completer.py::test_completion_error[--choice tests/test_argparse_completer.py::test_completion_error[-completer] tests/test_argparse_completer.py::test_arg_tokens[arg_tokens tests/test_argparse_completer.py::test_complete_mutex_group[mutex--the tests/test_argparse_completer.py::test_complete_mutex_group[mutex---fl----flag tests/test_argparse_completer.py::test_complete_mutex_group[mutex tests/test_argparse_completer.py::test_single_prefix_char tests/test_argparse_completer.py::test_looks_like_flag tests/test_argparse_completer.py::test_complete_command_no_tokens tests/test_argparse_completer.py::test_complete_command_help_no_tokens tests/test_argparse_completer.py::test_complete_standalone[--provider-completions0] tests/test_argparse_completer.py::test_complete_standalone[--completer-completions1]