diff --git a/doc/source/command-objects/project.rst b/doc/source/command-objects/project.rst
index b8607f0b62..cde4a9dd6c 100644
--- a/doc/source/command-objects/project.rst
+++ b/doc/source/command-objects/project.rst
@@ -124,6 +124,12 @@ Set project properties
 
     Set project name
 
+.. option:: --domain <domain>
+
+    Domain owning :ref:`\<project\> <project_set-project>` (name or ID)
+
+    .. versionadded:: 3
+
 .. option:: --description <description>
 
     Set project description
diff --git a/openstackclient/identity/v3/project.py b/openstackclient/identity/v3/project.py
index 0cb3c45310..48f547f3ed 100644
--- a/openstackclient/identity/v3/project.py
+++ b/openstackclient/identity/v3/project.py
@@ -241,6 +241,11 @@ class SetProject(command.Command):
             metavar='<name>',
             help='Set project name',
         )
+        parser.add_argument(
+            '--domain',
+            metavar='<domain>',
+            help='Domain owning <project> (name or ID)',
+        )
         parser.add_argument(
             '--description',
             metavar='<description>',
@@ -271,6 +276,7 @@ class SetProject(command.Command):
         identity_client = self.app.client_manager.identity
 
         if (not parsed_args.name
+                and not parsed_args.domain
                 and not parsed_args.description
                 and not parsed_args.enable
                 and not parsed_args.property
@@ -285,6 +291,8 @@ class SetProject(command.Command):
         kwargs = {}
         if parsed_args.name:
             kwargs['name'] = parsed_args.name
+        if parsed_args.domain:
+            kwargs['domain'] = parsed_args.domain
         if parsed_args.description:
             kwargs['description'] = parsed_args.description
         if parsed_args.enable:
diff --git a/openstackclient/tests/identity/v3/test_project.py b/openstackclient/tests/identity/v3/test_project.py
index ec50da0c30..ebf612ccd3 100644
--- a/openstackclient/tests/identity/v3/test_project.py
+++ b/openstackclient/tests/identity/v3/test_project.py
@@ -618,10 +618,12 @@ class TestProjectSet(TestProject):
     def test_project_set_name(self):
         arglist = [
             '--name', 'qwerty',
+            '--domain', identity_fakes.domain_id,
             identity_fakes.project_name,
         ]
         verifylist = [
             ('name', 'qwerty'),
+            ('domain', identity_fakes.domain_id),
             ('enable', False),
             ('disable', False),
             ('project', identity_fakes.project_name),
@@ -634,6 +636,7 @@ class TestProjectSet(TestProject):
         # Set expected values
         kwargs = {
             'name': 'qwerty',
+            'domain': identity_fakes.domain_id,
         }
         # ProjectManager.update(project, name=, domain=, description=,
         #                       enabled=, **kwargs)
@@ -644,10 +647,12 @@ class TestProjectSet(TestProject):
 
     def test_project_set_description(self):
         arglist = [
+            '--domain', identity_fakes.domain_id,
             '--description', 'new desc',
             identity_fakes.project_name,
         ]
         verifylist = [
+            ('domain', identity_fakes.domain_id),
             ('description', 'new desc'),
             ('enable', False),
             ('disable', False),
@@ -660,6 +665,7 @@ class TestProjectSet(TestProject):
 
         # Set expected values
         kwargs = {
+            'domain': identity_fakes.domain_id,
             'description': 'new desc',
         }
         self.projects_mock.update.assert_called_with(
@@ -669,10 +675,12 @@ class TestProjectSet(TestProject):
 
     def test_project_set_enable(self):
         arglist = [
+            '--domain', identity_fakes.domain_id,
             '--enable',
             identity_fakes.project_name,
         ]
         verifylist = [
+            ('domain', identity_fakes.domain_id),
             ('enable', True),
             ('disable', False),
             ('project', identity_fakes.project_name),
@@ -684,6 +692,7 @@ class TestProjectSet(TestProject):
 
         # Set expected values
         kwargs = {
+            'domain': identity_fakes.domain_id,
             'enabled': True,
         }
         self.projects_mock.update.assert_called_with(
@@ -693,10 +702,12 @@ class TestProjectSet(TestProject):
 
     def test_project_set_disable(self):
         arglist = [
+            '--domain', identity_fakes.domain_id,
             '--disable',
             identity_fakes.project_name,
         ]
         verifylist = [
+            ('domain', identity_fakes.domain_id),
             ('enable', False),
             ('disable', True),
             ('project', identity_fakes.project_name),
@@ -708,6 +719,7 @@ class TestProjectSet(TestProject):
 
         # Set expected values
         kwargs = {
+            'domain': identity_fakes.domain_id,
             'enabled': False,
         }
         self.projects_mock.update.assert_called_with(
@@ -717,11 +729,13 @@ class TestProjectSet(TestProject):
 
     def test_project_set_property(self):
         arglist = [
+            '--domain', identity_fakes.domain_id,
             '--property', 'fee=fi',
             '--property', 'fo=fum',
             identity_fakes.project_name,
         ]
         verifylist = [
+            ('domain', identity_fakes.domain_id),
             ('property', {'fee': 'fi', 'fo': 'fum'}),
             ('project', identity_fakes.project_name),
         ]
@@ -732,6 +746,7 @@ class TestProjectSet(TestProject):
 
         # Set expected values
         kwargs = {
+            'domain': identity_fakes.domain_id,
             'fee': 'fi',
             'fo': 'fum',
         }