diff --git a/swiftclient/service.py b/swiftclient/service.py
index 79cf86c5..3d1b4764 100644
--- a/swiftclient/service.py
+++ b/swiftclient/service.py
@@ -90,14 +90,26 @@ class SwiftError(Exception):
 
 
 def process_options(options):
+    auth_types_to_versions = {
+        'v1password': '1.0',
+        'v2password': '2.0',
+        'v3password': '3',
+        'v3applicationcredential': '3',
+    }
+
+    version_from_type = auth_types_to_versions.get(options['os_auth_type'])
+    if version_from_type:
+        options['auth_version'] = version_from_type
+
     # tolerate sloppy auth_version
     if options.get('auth_version') == '3.0':
         options['auth_version'] = '3'
     elif options.get('auth_version') == '2':
         options['auth_version'] = '2.0'
 
-    if options.get('auth_version') not in ('2.0', '3') and not all(
-            options.get(key) for key in ('auth', 'user', 'key')):
+    if options.get('auth_version') not in ('2.0', '3') and \
+            options.get('os_auth_type') != 'v1password' and \
+            not all(options.get(key) for key in ('auth', 'user', 'key')):
         # Use keystone auth if any of the new-style args are present
         if any(options.get(k) for k in (
                 'os_user_domain_id',
@@ -109,9 +121,6 @@ def process_options(options):
         else:
             options['auth_version'] = '2.0'
 
-    if options.get('os_auth_type', None) == 'v3applicationcredential':
-        options['auth_version'] == '3'
-
     # Use new-style args if old ones not present
     if not options['auth'] and options['os_auth_url']:
         options['auth'] = options['os_auth_url']
diff --git a/test/unit/test_shell.py b/test/unit/test_shell.py
index 5e69f4a6..e76f73c0 100644
--- a/test/unit/test_shell.py
+++ b/test/unit/test_shell.py
@@ -2759,6 +2759,92 @@ class TestParsing(TestBase):
                 swiftclient.shell.main(args)
         self._verify_opts(result[0], expected_opts, expected_os_opts, {})
 
+    def test_os_auth_type_password_implies_version(self):
+        args = ["", "stat"]
+        env = {
+            'OS_AUTH_URL': 'http://example.com/auth',
+            'OS_AUTH_TYPE': 'v1password',
+            'OS_USERNAME': 'user',
+            'OS_PASSWORD': 'secret',
+        }
+        result = [None, None]
+        fake_command = self._make_fake_command(result)
+        with mock.patch.dict(os.environ, env):
+            with mock.patch('swiftclient.shell.st_stat', fake_command):
+                swiftclient.shell.main(args)
+        self._verify_opts(result[0], {
+            'auth_version': '1.0',
+            'user': 'user',
+            'key': 'secret',
+        }, {
+            'auth_url': 'http://example.com/auth',
+            'auth_type': 'v1password',
+            'username': 'user',
+            'password': 'secret',
+        }, {
+            'auth_url': 'http://example.com/auth',
+            'auth_type': 'v1password',
+            'username': 'user',
+            'password': 'secret',
+            'identity_api_version': '1.0',
+        })
+
+        env = {
+            'OS_AUTH_URL': 'http://example.com/auth',
+            'OS_AUTH_TYPE': 'v2password',
+            'OS_USERNAME': 'user',
+            'OS_PASSWORD': 'secret',
+        }
+        result = [None, None]
+        fake_command = self._make_fake_command(result)
+        with mock.patch.dict(os.environ, env):
+            with mock.patch('swiftclient.shell.st_stat', fake_command):
+                swiftclient.shell.main(args)
+        self._verify_opts(result[0], {
+            'auth_version': '2.0',
+            'user': 'user',
+            'key': 'secret',
+        }, {
+            'auth_url': 'http://example.com/auth',
+            'auth_type': 'v2password',
+            'username': 'user',
+            'password': 'secret',
+        }, {
+            'auth_url': 'http://example.com/auth',
+            'auth_type': 'v2password',
+            'username': 'user',
+            'password': 'secret',
+            'identity_api_version': '2.0',
+        })
+
+        env = {
+            'OS_AUTH_URL': 'http://example.com/auth',
+            'OS_AUTH_TYPE': 'v3password',
+            'OS_USERNAME': 'user',
+            'OS_PASSWORD': 'secret',
+        }
+        result = [None, None]
+        fake_command = self._make_fake_command(result)
+        with mock.patch.dict(os.environ, env):
+            with mock.patch('swiftclient.shell.st_stat', fake_command):
+                swiftclient.shell.main(args)
+        self._verify_opts(result[0], {
+            'auth_version': '3',
+            'user': 'user',
+            'key': 'secret',
+        }, {
+            'auth_url': 'http://example.com/auth',
+            'auth_type': 'v3password',
+            'username': 'user',
+            'password': 'secret',
+        }, {
+            'auth_url': 'http://example.com/auth',
+            'auth_type': 'v3password',
+            'username': 'user',
+            'password': 'secret',
+            'identity_api_version': '3',
+        })
+
     def test_args_v3(self):
         opts = {"auth_version": "3"}
         os_opts = {"password": "secret",