Repository: desmos-labs/desmos
Pull request #974 (2022-07-22 06:48:20)

feat!: allow to set initial members during user group creation
## Description

This PR adds the `initial_members` field to `MsgCreateUserGroup` to allow users to specify the initial set of users that should be included into the group when creating it. This is particularly useful to clients to reduce the number of transactions to be done when creating a user group. 

<!-- Add a description of the changes that this PR introduces and the files that
are the most critical to review. -->

---

### Author Checklist

*All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow up issues.*

I have...

- [x] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title
- [x] added `!` to the type prefix if API or client breaking change
- [x] targeted the correct branch (see [PR Targeting](https://github.com/desmos-labs/desmos/blob/master/CONTRIBUTING.md#pr-targeting))
- [ ] provided a link to the relevant issue or specification
- [ ] followed the guidelines for [building modules](https://docs.cosmos.network/v0.44/building-modules/intro.html)
- [x] included the necessary unit and integration [tests](https://github.com/desmos-labs/desmos/blob/master/CONTRIBUTING.md#testing)
- [x] added a changelog entry to `CHANGELOG.md`
- [x] included comments for [documenting Go code](https://blog.golang.org/godoc)
- [x] updated the relevant documentation or specification
- [x] reviewed "Files changed" and left comments if necessary
- [x] confirmed all CI checks have passed

### Reviewers Checklist

*All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.*

I have...

- [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title
- [ ] confirmed `!` in the type prefix if API or client breaking change
- [ ] confirmed all author checklist items have been addressed
- [ ] reviewed state machine logic
- [ ] reviewed API design and naming
- [ ] reviewed documentation is accurate
- [ ] reviewed tests and test coverage
- [ ] manually tested (if applicable)

codecov[bot]: # [Codecov](https://codecov.io/gh/desmos-labs/desmos/pull/974?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=desmos-labs) Report
> Merging [#974](https://codecov.io/gh/desmos-labs/desmos/pull/974?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=desmos-labs) (58d4b5c) into [master](https://codecov.io/gh/desmos-labs/desmos/commit/a4a3952d605325d5281e3b867100478eadd2b90c?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=desmos-labs) (a4a3952) will **increase** coverage by `0.02%`.
> The diff coverage is `100.00%`.

```diff
@@            Coverage Diff             @@
##           master     #974      +/-   ##
==========================================
+ Coverage   80.49%   80.51%   +0.02%     
==========================================
  Files         172      172              
  Lines       15223    15243      +20     
==========================================
+ Hits        12253    12273      +20     
  Misses       2442     2442              
  Partials      528      528              
```


| [Impacted Files](https://codecov.io/gh/desmos-labs/desmos/pull/974?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=desmos-labs) | Coverage Δ | |
|---|---|---|
| [x/subspaces/keeper/msg\_server.go](https://codecov.io/gh/desmos-labs/desmos/pull/974/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=desmos-labs#diff-eC9zdWJzcGFjZXMva2VlcGVyL21zZ19zZXJ2ZXIuZ28=) | `88.83% <100.00%> (+0.25%)` | :arrow_up: |
| [x/subspaces/types/msgs.go](https://codecov.io/gh/desmos-labs/desmos/pull/974/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=desmos-labs#diff-eC9zdWJzcGFjZXMvdHlwZXMvbXNncy5nbw==) | `98.32% <100.00%> (+0.02%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/desmos-labs/desmos/pull/974?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=desmos-labs).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=desmos-labs)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/desmos-labs/desmos/pull/974?src=pr&el=footer&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=desmos-labs). Last update [a4a3952...58d4b5c](https://codecov.io/gh/desmos-labs/desmos/pull/974?src=pr&el=lastupdated&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=desmos-labs). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=desmos-labs).


Patch:
diff --git a/.changeset/entries/778ed3c87c8ba17a37bb9117fc0aa014f056400bb6fa661109af351e6cff1965.yaml b/.changeset/entries/778ed3c87c8ba17a37bb9117fc0aa014f056400bb6fa661109af351e6cff1965.yaml
new file mode 100644
index 00000000..a2a6834f
--- /dev/null
+++ b/.changeset/entries/778ed3c87c8ba17a37bb9117fc0aa014f056400bb6fa661109af351e6cff1965.yaml
@@ -0,0 +1,7 @@
+type: feat
+module: x/subspaces
+pull_request: 974
+description: Added `initial_members` field to `MsgCreateUserGroup` to allow setting
+  initial group members
+backward_compatible: false
+date: 2022-07-22T06:48:59.416978528Z
diff --git a/.changeset/entries/e8fdc65b9f41e85409395d7e7b317f59f6d7be1ff3f8a92ebb30dafeb3254d4e.yaml b/.changeset/entries/e8fdc65b9f41e85409395d7e7b317f59f6d7be1ff3f8a92ebb30dafeb3254d4e.yaml
new file mode 100644
index 00000000..3c7352cf
--- /dev/null
+++ b/.changeset/entries/e8fdc65b9f41e85409395d7e7b317f59f6d7be1ff3f8a92ebb30dafeb3254d4e.yaml
@@ -0,0 +1,6 @@
+type: fix
+module: x/profiles
+pull_request: 971
+description: `QueryProfile` now returns an error instead of `nil` when a profile is not found
+backward_compatible: false
+date: 2022-07-22T06:27:36.4265228Z
diff --git a/Makefile b/Makefile
index 77eaa97b..31fea98a 100644
--- a/Makefile
+++ b/Makefile
@@ -364,7 +364,7 @@ COSMOS_URL 		 = https://raw.githubusercontent.com/cosmos/cosmos-sdk/v0.45.4/prot
 COSMOS_PROTO_URL = https://raw.githubusercontent.com/regen-network/cosmos-proto/master
 CONFIO_URL 		 = https://raw.githubusercontent.com/confio/ics23/v0.6.3
 IBC_URL 		 = https://raw.githubusercontent.com/cosmos/ibc-go/v3.1.0/proto/ibc
-EVMOS_URL 		 = https://raw.githubusercontent.com/evmos/ethermint/v0.17.1/proto/ethermint/
+ETHERMINT_URL 	 = https://raw.githubusercontent.com/evmos/ethermint/v0.17.1/proto/ethermint/
 
 TM_CRYPTO_TYPES     = third_party/proto/tendermint/crypto
 TM_ABCI_TYPES       = third_party/proto/tendermint/abci
@@ -377,7 +377,7 @@ GOGO_PROTO_TYPES    = third_party/proto/gogoproto
 COSMOS_TYPES 		= third_party/proto/cosmos
 COSMOS_PROTO_TYPES  = third_party/proto/cosmos_proto
 CONFIO_TYPES        = third_party/proto/confio
-EVMOS_TYPES 		= third_party/proto/evmos
+ETHERMINT_TYPES 	= third_party/proto/ethermint
 
 proto-update-deps:
 	@mkdir -p $(COSMOS_TYPES)/base/query/v1beta1
@@ -395,8 +395,8 @@ proto-update-deps:
 	@mkdir -p $(IBC_TYPES)/core/client/v1
 	@curl -sSL $(IBC_URL)/core/client/v1/client.proto > $(IBC_TYPES)/core/client/v1/client.proto
 
-	@mkdir -p $(EVMOS_TYPES)/crypto/v1/ethsecp256k1
-	@curl -sSL $(EVMOS_URL)crypto/v1/ethsecp256k1/keys.proto > $(EVMOS_TYPES)/crypto/v1/ethsecp256k1/keys.proto
+	@mkdir -p $(ETHERMINT_TYPES)/crypto/v1/ethsecp256k1
+	@curl -sSL $(ETHERMINT_URL)crypto/v1/ethsecp256k1/keys.proto > $(ETHERMINT_TYPES)/crypto/v1/ethsecp256k1/keys.proto
 
 	@mkdir -p $(COSMOS_TYPES)/tx/signing/v1beta1
 	@curl -sSL $(COSMOS_URL)/tx/signing/v1beta1/signing.proto > $(COSMOS_TYPES)/tx/signing/v1beta1/signing.proto
diff --git a/client/docs/config.json b/client/docs/config.json
index de4b6ca9..fac69643 100644
--- a/client/docs/config.json
+++ b/client/docs/config.json
@@ -18,7 +18,7 @@
       "url": "./tmp-swagger-gen/desmos/relationships/v1/query.swagger.json"
     },
     {
-      "url": "./tmp-swagger-gen/desmos/subspaces/v2/query.swagger.json"
+      "url": "./tmp-swagger-gen/desmos/subspaces/v3/query.swagger.json"
     },
     {
       "url": "./tmp-swagger-gen/desmos/posts/v2/query.swagger.json",
diff --git a/client/docs/swagger-ui/swagger.yaml b/client/docs/swagger-ui/swagger.yaml
index 1f641534..6b4fbd09 100644
--- a/client/docs/swagger-ui/swagger.yaml
+++ b/client/docs/swagger-ui/swagger.yaml
@@ -4963,7 +4963,7 @@ paths:
           format: boolean
       tags:
         - Query
-  /desmos/subspaces/v2/subspaces:
+  /desmos/subspaces/v3/subspaces:
     get:
       summary: Subspaces queries all the subspaces inside Desmos
       operationId: Subspaces
@@ -5122,7 +5122,7 @@ paths:
           format: boolean
       tags:
         - Query
-  '/desmos/subspaces/v2/subspaces/{subspace_id}':
+  '/desmos/subspaces/v3/subspaces/{subspace_id}':
     get:
       summary: >-
         Subspace queries all the information about the subspace with the given
@@ -5200,7 +5200,7 @@ paths:
           format: uint64
       tags:
         - Query
-  '/desmos/subspaces/v2/subspaces/{subspace_id}/groups':
+  '/desmos/subspaces/v3/subspaces/{subspace_id}/groups':
     get:
       summary: >-
         UserGroups queries all the groups that are present inside the subspace
@@ -5374,7 +5374,7 @@ paths:
           format: boolean
       tags:
         - Query
-  '/desmos/subspaces/v2/subspaces/{subspace_id}/groups/{group_id}':
+  '/desmos/subspaces/v3/subspaces/{subspace_id}/groups/{group_id}':
     get:
       summary: |-
         UserGroup queries the user group having the given id inside the specific
@@ -5459,7 +5459,7 @@ paths:
           format: int64
       tags:
         - Query
-  '/desmos/subspaces/v2/subspaces/{subspace_id}/groups/{group_id}/members':
+  '/desmos/subspaces/v3/subspaces/{subspace_id}/groups/{group_id}/members':
     get:
       summary: UserGroupMembers queries all the members of a given user group
       operationId: UserGroupMembers
@@ -5598,7 +5598,7 @@ paths:
           format: boolean
       tags:
         - Query
-  '/desmos/subspaces/v2/subspaces/{subspace_id}/permissions/{user}':
+  '/desmos/subspaces/v3/subspaces/{subspace_id}/permissions/{user}':
     get:
       summary: UserPermissions queries the permissions for the given user
       operationId: UserPermissions
@@ -5696,7 +5696,7 @@ paths:
           format: int64
       tags:
         - Query
-  '/desmos/subspaces/v2/{subspace_id}/sections':
+  '/desmos/subspaces/v3/{subspace_id}/sections':
     get:
       summary: Sections allows to query for the sections of a specific subspace
       operationId: Sections
@@ -5849,7 +5849,7 @@ paths:
           format: boolean
       tags:
         - Query
-  '/desmos/subspaces/v2/{subspace_id}/sections/{section_id}':
+  '/desmos/subspaces/v3/{subspace_id}/sections/{section_id}':
     get:
       summary: Section queries all the information about the section with the given id
       operationId: Section
@@ -16205,7 +16205,7 @@ definitions:
       Blocked
 
       user.
-  desmos.subspaces.v2.PermissionDetail:
+  desmos.subspaces.v3.PermissionDetail:
     type: object
     properties:
       subspace_id:
@@ -16242,7 +16242,7 @@ definitions:
               type: string
             title: Permissions set to the group
     title: PermissionDetail contains the details data of a permission
-  desmos.subspaces.v2.PermissionDetail.Group:
+  desmos.subspaces.v3.PermissionDetail.Group:
     type: object
     properties:
       group_id:
@@ -16255,7 +16255,7 @@ definitions:
           type: string
         title: Permissions set to the group
     title: Group is a permission that has been set to a user group
-  desmos.subspaces.v2.PermissionDetail.User:
+  desmos.subspaces.v3.PermissionDetail.User:
     type: object
     properties:
       user:
@@ -16267,7 +16267,7 @@ definitions:
           type: string
         title: Permissions set to the user
     title: User is a permission that has been set to a specific user
-  desmos.subspaces.v2.QuerySectionResponse:
+  desmos.subspaces.v3.QuerySectionResponse:
     type: object
     properties:
       section:
@@ -16293,7 +16293,7 @@ definitions:
             title: (optional) Description of the section
         title: Section contains the data of a single subspace section
     title: QuerySectionResponse is the response type for Query/Section RPC method
-  desmos.subspaces.v2.QuerySectionsResponse:
+  desmos.subspaces.v3.QuerySectionsResponse:
     type: object
     properties:
       sections:
@@ -16346,7 +16346,7 @@ definitions:
                    PageResponse page = 2;
            }
     title: QuerySectionsResponse is the response type for Query/Sections RPC method
-  desmos.subspaces.v2.QuerySubspaceResponse:
+  desmos.subspaces.v3.QuerySubspaceResponse:
     type: object
     properties:
       subspace:
@@ -16381,7 +16381,7 @@ definitions:
             title: the creation time of the subspace
         title: Subspace contains all the data of a Desmos subspace
     title: QuerySubspaceResponse is the response type for the Query/Subspace method
-  desmos.subspaces.v2.QuerySubspacesResponse:
+  desmos.subspaces.v3.QuerySubspacesResponse:
     type: object
     properties:
       subspaces:
@@ -16445,7 +16445,7 @@ definitions:
     title: |-
       QuerySubspacesResponse is the response type for the Query/Subspaces RPC
       method
-  desmos.subspaces.v2.QueryUserGroupMembersResponse:
+  desmos.subspaces.v3.QueryUserGroupMembersResponse:
     type: object
     properties:
       members:
@@ -16480,7 +16480,7 @@ definitions:
     title: |-
       QueryUserGroupMembersResponse is the response type for the
       Query/UserGroupMembers RPC method
-  desmos.subspaces.v2.QueryUserGroupResponse:
+  desmos.subspaces.v3.QueryUserGroupResponse:
     type: object
     properties:
       group:
@@ -16515,7 +16515,7 @@ definitions:
     title: |-
       QueryUserGroupResponse is the response type for the Query/UserGroup RPC
       method
-  desmos.subspaces.v2.QueryUserGroupsResponse:
+  desmos.subspaces.v3.QueryUserGroupsResponse:
     type: object
     properties:
       groups:
@@ -16577,7 +16577,7 @@ definitions:
     title: |-
       QueryUserGroupsResponse is the response type for the Query/UserGroups RPC
       method
-  desmos.subspaces.v2.QueryUserPermissionsResponse:
+  desmos.subspaces.v3.QueryUserPermissionsResponse:
     type: object
     properties:
       permissions:
@@ -16626,7 +16626,7 @@ definitions:
     title: |-
       QueryUserPermissionsRequest is the response type for the
       Query/UserPermissions method
-  desmos.subspaces.v2.Section:
+  desmos.subspaces.v3.Section:
     type: object
     properties:
       subspace_id:
@@ -16648,7 +16648,7 @@ definitions:
         type: string
         title: (optional) Description of the section
     title: Section contains the data of a single subspace section
-  desmos.subspaces.v2.Subspace:
+  desmos.subspaces.v3.Subspace:
     type: object
     properties:
       id:
@@ -16679,7 +16679,7 @@ definitions:
         format: date-time
         title: the creation time of the subspace
     title: Subspace contains all the data of a Desmos subspace
-  desmos.subspaces.v2.UserGroup:
+  desmos.subspaces.v3.UserGroup:
     type: object
     properties:
       subspace_id:
diff --git a/proto/desmos/subspaces/v2/authz/authz.proto b/proto/desmos/subspaces/v3/authz/authz.proto
similarity index 95%
rename from proto/desmos/subspaces/v2/authz/authz.proto
rename to proto/desmos/subspaces/v3/authz/authz.proto
index b55a2998..ca6b8d83 100644
--- a/proto/desmos/subspaces/v2/authz/authz.proto
+++ b/proto/desmos/subspaces/v3/authz/authz.proto
@@ -1,5 +1,5 @@
 syntax = "proto3";
-package desmos.subspaces.v2.authz;
+package desmos.subspaces.v3.authz;
 
 import "gogoproto/gogo.proto";
 import "cosmos_proto/cosmos.proto";
diff --git a/proto/desmos/subspaces/v2/genesis.proto b/proto/desmos/subspaces/v3/genesis.proto
similarity index 95%
rename from proto/desmos/subspaces/v2/genesis.proto
rename to proto/desmos/subspaces/v3/genesis.proto
index 815108f9..31f51058 100644
--- a/proto/desmos/subspaces/v2/genesis.proto
+++ b/proto/desmos/subspaces/v3/genesis.proto
@@ -1,8 +1,8 @@
 syntax = "proto3";
-package desmos.subspaces.v2;
+package desmos.subspaces.v3;
 
 import "gogoproto/gogo.proto";
-import "desmos/subspaces/v2/models.proto";
+import "desmos/subspaces/v3/models.proto";
 
 option go_package = "github.com/desmos-labs/desmos/v4/x/subspaces/types";
 
diff --git a/proto/desmos/subspaces/v2/models.proto b/proto/desmos/subspaces/v3/models.proto
similarity index 99%
rename from proto/desmos/subspaces/v2/models.proto
rename to proto/desmos/subspaces/v3/models.proto
index 880ecfae..739accf5 100644
--- a/proto/desmos/subspaces/v2/models.proto
+++ b/proto/desmos/subspaces/v3/models.proto
@@ -1,5 +1,5 @@
 syntax = "proto3";
-package desmos.subspaces.v2;
+package desmos.subspaces.v3;
 
 import "gogoproto/gogo.proto";
 import "google/protobuf/timestamp.proto";
diff --git a/proto/desmos/subspaces/v2/msgs.proto b/proto/desmos/subspaces/v3/msgs.proto
similarity index 97%
rename from proto/desmos/subspaces/v2/msgs.proto
rename to proto/desmos/subspaces/v3/msgs.proto
index 3b14b0ce..977a701f 100644
--- a/proto/desmos/subspaces/v2/msgs.proto
+++ b/proto/desmos/subspaces/v3/msgs.proto
@@ -1,8 +1,8 @@
 syntax = "proto3";
-package desmos.subspaces.v2;
+package desmos.subspaces.v3;
 
 import "gogoproto/gogo.proto";
-import "desmos/subspaces/v2/models.proto";
+import "desmos/subspaces/v3/models.proto";
 
 option go_package = "github.com/desmos-labs/desmos/v4/x/subspaces/types";
 
@@ -256,8 +256,12 @@ message MsgCreateUserGroup {
   repeated string default_permissions = 5
       [ (gogoproto.moretags) = "yaml:\"default_permissions\"" ];
 
+  // Initial members to be put inside the group
+  repeated string initial_members = 6
+      [ (gogoproto.moretags) = "yaml:\"initial_members\"" ];
+
   // Creator of the group
-  string creator = 6 [ (gogoproto.moretags) = "yaml:\"creator\"" ];
+  string creator = 7 [ (gogoproto.moretags) = "yaml:\"creator\"" ];
 }
 
 // MsgCreateUserGroupResponse defines the Msg/CreateUserGroup response type
diff --git a/proto/desmos/subspaces/v2/query.proto b/proto/desmos/subspaces/v3/query.proto
similarity index 93%
rename from proto/desmos/subspaces/v2/query.proto
rename to proto/desmos/subspaces/v3/query.proto
index 615e1b44..06252e7a 100644
--- a/proto/desmos/subspaces/v2/query.proto
+++ b/proto/desmos/subspaces/v3/query.proto
@@ -1,11 +1,11 @@
 syntax = "proto3";
-package desmos.subspaces.v2;
+package desmos.subspaces.v3;
 
 import "gogoproto/gogo.proto";
 import "google/api/annotations.proto";
 import "cosmos/base/query/v1beta1/pagination.proto";
 
-import "desmos/subspaces/v2/models.proto";
+import "desmos/subspaces/v3/models.proto";
 
 option go_package = "github.com/desmos-labs/desmos/v4/x/subspaces/types";
 
@@ -14,45 +14,45 @@ service Query {
 
   // Subspaces queries all the subspaces inside Desmos
   rpc Subspaces(QuerySubspacesRequest) returns (QuerySubspacesResponse) {
-    option (google.api.http).get = "/desmos/subspaces/v2/subspaces";
+    option (google.api.http).get = "/desmos/subspaces/v3/subspaces";
   }
 
   // Subspace queries all the information about the subspace with the given id
   rpc Subspace(QuerySubspaceRequest) returns (QuerySubspaceResponse) {
     option (google.api.http).get =
-        "/desmos/subspaces/v2/subspaces/{subspace_id}";
+        "/desmos/subspaces/v3/subspaces/{subspace_id}";
   }
 
   // Sections allows to query for the sections of a specific subspace
   rpc Sections(QuerySectionsRequest) returns (QuerySectionsResponse) {
     option (google.api.http).get =
-        "/desmos/subspaces/v2/{subspace_id}/sections";
+        "/desmos/subspaces/v3/{subspace_id}/sections";
   }
 
   // Section queries all the information about the section with the given id
   rpc Section(QuerySectionRequest) returns (QuerySectionResponse) {
     option (google.api.http).get =
-        "/desmos/subspaces/v2/{subspace_id}/sections/{section_id}";
+        "/desmos/subspaces/v3/{subspace_id}/sections/{section_id}";
   }
 
   // UserGroups queries all the groups that are present inside the subspace with
   // the given id
   rpc UserGroups(QueryUserGroupsRequest) returns (QueryUserGroupsResponse) {
     option (google.api.http).get =
-        "/desmos/subspaces/v2/subspaces/{subspace_id}/groups";
+        "/desmos/subspaces/v3/subspaces/{subspace_id}/groups";
   }
 
   // UserGroup queries the user group having the given id inside the specific
   // subspace
   rpc UserGroup(QueryUserGroupRequest) returns (QueryUserGroupResponse) {
     option (google.api.http).get =
-        "/desmos/subspaces/v2/subspaces/{subspace_id}/groups/{group_id}";
+        "/desmos/subspaces/v3/subspaces/{subspace_id}/groups/{group_id}";
   }
 
   // UserGroupMembers queries all the members of a given user group
   rpc UserGroupMembers(QueryUserGroupMembersRequest)
       returns (QueryUserGroupMembersResponse) {
-    option (google.api.http).get = "/desmos/subspaces/v2/subspaces/"
+    option (google.api.http).get = "/desmos/subspaces/v3/subspaces/"
                                    "{subspace_id}/groups/{group_id}/members";
   }
 
@@ -60,7 +60,7 @@ service Query {
   rpc UserPermissions(QueryUserPermissionsRequest)
       returns (QueryUserPermissionsResponse) {
     option (google.api.http).get =
-        "/desmos/subspaces/v2/subspaces/{subspace_id}/permissions/{user}";
+        "/desmos/subspaces/v3/subspaces/{subspace_id}/permissions/{user}";
   }
 }
 
diff --git a/third_party/proto/evmos/crypto/v1/ethsecp256k1/keys.proto b/third_party/proto/ethermint/crypto/v1/ethsecp256k1/keys.proto
similarity index 100%
rename from third_party/proto/evmos/crypto/v1/ethsecp256k1/keys.proto
rename to third_party/proto/ethermint/crypto/v1/ethsecp256k1/keys.proto
diff --git a/x/posts/spec/04-messages.md b/x/posts/spec/04-messages.md
index 611b5d17..0dc42bc5 100644
--- a/x/posts/spec/04-messages.md
+++ b/x/posts/spec/04-messages.md
@@ -11,7 +11,7 @@ slug: messages
 A post can be created using the `MsgCreatePost`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/posts/v2/msgs.proto#L36-L89
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/posts/v2/msgs.proto#L36-L89
 ```
 
 It's to fail if:
@@ -25,7 +25,7 @@ It's to fail if:
 A previously created post can be edited with the `MsgEditPost`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/posts/v2/msgs.proto#L107-L135
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/posts/v2/msgs.proto#L107-L135
 ```
 It's expected to fail if:
 * the subspace does not exist;
@@ -38,7 +38,7 @@ It's expected to fail if:
 A post can be deleted with the `MsgDeletePost`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/posts/v2/msgs.proto#L147-L163
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/posts/v2/msgs.proto#L147-L163
 ```
 
 It's expected to fail if:
@@ -50,7 +50,7 @@ It's expected to fail if:
 It's possible to add an attachment to an existing post with `MsgAddPostAttachment`. Attachment can be a [media](02-concepts.md#media) or a [poll](02-concepts.md#poll).
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/posts/v2/msgs.proto#L168-L191
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/posts/v2/msgs.proto#L168-L191
 ```
 
 It's expected to fail if:
@@ -64,7 +64,7 @@ It's expected to fail if:
 A post attachment can be removed with `MsgRemovePostAttachment`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/posts/v2/msgs.proto#L209-L232
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/posts/v2/msgs.proto#L209-L232
 ```
 
 It's expected to fail if:
@@ -78,7 +78,7 @@ It's expected to fail if:
 It's possible to answer any active post's poll With `MsgAnswerPoll`.
 
 ```js reference 
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/posts/v2/msgs.proto#L245-L271
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/posts/v2/msgs.proto#L245-L271
 ```
 
 It's expected to fail if:
diff --git a/x/profiles/keeper/grpc_query.go b/x/profiles/keeper/grpc_query.go
index c8f33183..681bbda6 100644
--- a/x/profiles/keeper/grpc_query.go
+++ b/x/profiles/keeper/grpc_query.go
@@ -47,7 +47,7 @@ func (k Keeper) Profile(ctx context.Context, request *types.QueryProfileRequest)
 	}
 
 	if !found {
-		return &types.QueryProfileResponse{Profile: nil}, nil
+		return nil, status.Errorf(codes.NotFound, "profile for dtag/address %s not found", dTagOrAddress)
 	}
 
 	accountAny, err := codectypes.NewAnyWithValue(account)
diff --git a/x/profiles/spec/04-messages.md b/x/profiles/spec/04-messages.md
index e898f0b6..d637333c 100644
--- a/x/profiles/spec/04-messages.md
+++ b/x/profiles/spec/04-messages.md
@@ -13,7 +13,7 @@ A profile can be created or edited with the `MsgSaveProfile`, which allows to sp
 If a profile already exists, and you want to edit only a subset of the fields, you can use `[do-not-modify]` to specify the fields which values should not be changed (i.e. setting the `DTag` to `[do-not-modify]` will preserve the current value of the DTag).
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/profiles/v2/msgs_profile.proto#L12-L32
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/profiles/v2/msgs_profile.proto#L12-L32
 ```
 
 It's expected to fail if a profile with the same DTag exists.
@@ -24,7 +24,7 @@ A profile can be deleted using the `MsgDeleteProfile`. This will remove all the
 Beware that using this message you will lose the ownership of your DTag and you will delete everything that is related to your profile (i.e. incoming DTag transfer requests). 
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/profiles/v2/msgs_profile.proto#L39-L45
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/profiles/v2/msgs_profile.proto#L39-L45
 ```
 
 It's expected to fail if the signer does not have a profile. 
@@ -33,7 +33,7 @@ It's expected to fail if the signer does not have a profile.
 A DTag transfer request can be created using the `MsgRequestDTagTransfer`. 
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/profiles/v2/msgs_dtag_requests.proto#L12-L25
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/profiles/v2/msgs_dtag_requests.proto#L12-L25
 ```
 
 It's expected to fail if the recipient of the request has no profile.
@@ -42,7 +42,7 @@ It's expected to fail if the recipient of the request has no profile.
 An outgoing DTag transfer request can be canceled using the `MsgCancelDTagTransferRequest`. 
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/profiles/v2/msgs_dtag_requests.proto#L33-L44
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/profiles/v2/msgs_dtag_requests.proto#L33-L44
 ```
 
 It's expected to fail if the request does not exist.
@@ -51,7 +51,7 @@ It's expected to fail if the request does not exist.
 An incoming DTag transfer request can be accepted using the `MsgAcceptDTagTransferRequest`. When accepting a DTag transfer request, the user accepting it **must** specify a new DTag that they want after their old one gets transferred to the request sender.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/profiles/v2/msgs_dtag_requests.proto#L52-L70
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/profiles/v2/msgs_dtag_requests.proto#L52-L70
 ```
 
 It's expected to fail if:
@@ -62,7 +62,7 @@ It's expected to fail if:
 An incoming DTag transfer request can be refused using `MsgRefuseDTagTransferRequest`
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/profiles/v2/msgs_dtag_requests.proto#L78-L89
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/profiles/v2/msgs_dtag_requests.proto#L78-L89
 ```
 
 It's expected to fail if the request does not exist.
@@ -71,7 +71,7 @@ It's expected to fail if the request does not exist.
 A new chain link can be created using the `MsgLinkChainAccount`
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/profiles/v2/msgs_chain_links.proto#L11-L35
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/profiles/v2/msgs_chain_links.proto#L11-L35
 ```
 
 It's expected to fail if:
@@ -82,7 +82,7 @@ It's expected to fail if:
 An existing chain link can be deleted using the `MsgUnlinkChainAccount`
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/profiles/v2/msgs_chain_links.proto#L42-L54
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/profiles/v2/msgs_chain_links.proto#L42-L54
 ```
 
 It's expected to fail if the chain link does not exist.
@@ -100,7 +100,7 @@ It's expected to fail if the chain link does not exist.
 A new application link can be created using the `MsgLinkApplication`
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/profiles/v2/msgs_app_links.proto#L11-L48
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/profiles/v2/msgs_app_links.proto#L11-L48
 ```
 
 It's expected to fail if the signer does not have a profile.
@@ -109,7 +109,7 @@ It's expected to fail if the signer does not have a profile.
 An existing application link can be deleted using the `MsgUnlinkApplication`
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/profiles/v2/msgs_app_links.proto#L56-L71
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/profiles/v2/msgs_app_links.proto#L56-L71
 ```
 
 It's expected to fail if the application link does not exist.
\ No newline at end of file
diff --git a/x/reactions/spec/04-messages.md b/x/reactions/spec/04-messages.md
index 0a282d0c..c0ab61d2 100644
--- a/x/reactions/spec/04-messages.md
+++ b/x/reactions/spec/04-messages.md
@@ -11,7 +11,7 @@ slug: messages
 A post reaction can be added with the `MsgAddReaction`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/reactions/v1/msgs.proto#L38-L60
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/reactions/v1/msgs.proto#L38-L60
 ```
 
 It's expected to fail if:
@@ -27,7 +27,7 @@ It's expected to fail if:
 A reaction can be removed with the `MsgRemoveReaction`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/reactions/v1/msgs.proto#L71-L94
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/reactions/v1/msgs.proto#L71-L94
 ```
 
 It's expected to fail if:
@@ -40,7 +40,7 @@ It's expected to fail if:
 A registered reaction can be added to a subspace with the `MsgAddRegisteredReaction`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/reactions/v1/msgs.proto#L99-L117
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/reactions/v1/msgs.proto#L99-L117
 ```
 
 It's expected to fail if:
@@ -53,7 +53,7 @@ It's expected to fail if:
 A registered reaction can be edited with the `MsgEditRegisteredReaction`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/reactions/v1/msgs.proto#L129-L153
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/reactions/v1/msgs.proto#L129-L153
 ```
 
 it's expected to fail if:
@@ -66,7 +66,7 @@ it's expected to fail if:
 A registered reaction ca be removed with the `MsgRemoveRegisteredReaction`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/reactions/v1/msgs.proto#L159-L176
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/reactions/v1/msgs.proto#L159-L176
 ```
 
 It's expected to fail if:
@@ -78,7 +78,7 @@ It's expected to fail if:
 A subspace's reaction params can be set with the `MsgSetReactionsParams`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/reactions/v1/msgs.proto#L182-L205
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/reactions/v1/msgs.proto#L182-L205
 ```
 
 It's expected to fail if:
diff --git a/x/relationships/spec/04-messages.md b/x/relationships/spec/04-messages.md
index 0d2004ec..5b992496 100644
--- a/x/relationships/spec/04-messages.md
+++ b/x/relationships/spec/04-messages.md
@@ -11,7 +11,7 @@ slug: messages
 A new relationship can be created with the `MsgCreateRelationship`, which allows to specify the subspace inside which the relationship should live and the counterparty address.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/relationships/v1/msg_server.proto#L27-L39
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/relationships/v1/msg_server.proto#L27-L39
 ```
 
 It's expected to fail if a relationships between the same user and counterparty already exists inside the same subspace. 
@@ -20,7 +20,7 @@ It's expected to fail if a relationships between the same user and counterparty
 An existing relationship can be deleted with the `MsgDeleteRelationship`. 
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/relationships/v1/msg_server.proto#L47-L56
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/relationships/v1/msg_server.proto#L47-L56
 ```
 
 It's expected to fail if a relationships between the signer and counterparty does not exist inside the specified subspace.
@@ -29,7 +29,7 @@ It's expected to fail if a relationships between the signer and counterparty doe
 A new user block can be created with the `MsgBlockUser`, which allows to specify the subspace inside which the block should be valid, the address of the blocked user and an optional reason for the block.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/relationships/v1/msg_server.proto#L64-L74
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/relationships/v1/msg_server.proto#L64-L74
 ```
 
 It's expected to fail if a user block between the same user and blocker already exists inside the same subspace.
@@ -38,7 +38,7 @@ It's expected to fail if a user block between the same user and blocker already
 An existing user block can be deleted with the `MsgUnblockUser`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/relationships/v1/msg_server.proto#L81-L89
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/relationships/v1/msg_server.proto#L81-L89
 ```
 
 It's expected to fail if the user block does not exist inside the specified subspace.
diff --git a/x/reports/spec/04-messages.md b/x/reports/spec/04-messages.md
index 5bd1c74f..b3f751fe 100644
--- a/x/reports/spec/04-messages.md
+++ b/x/reports/spec/04-messages.md
@@ -11,7 +11,7 @@ slug: messages
 A report can be created using the `MsgCreateReport`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/reports/v1/msgs.proto#L33-L58
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/reports/v1/msgs.proto#L33-L58
 ```
 
 It's expected to fail if:
@@ -26,7 +26,7 @@ It's expected to fail if:
 A report can be deleted using the `MsgDeleteReport`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/reports/v1/msgs.proto#L76-L92
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/reports/v1/msgs.proto#L76-L92
 ```
 
 It's expected to fail if:
@@ -38,7 +38,7 @@ It's expected to fail if:
 A standard reason can be supported within a subspace using the `MsgSupportStandardReason`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/reports/v1/msgs.proto#L97-L114
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/reports/v1/msgs.proto#L97-L114
 ```
 
 It's expected to fail if:
@@ -50,7 +50,7 @@ It's expected to fail if:
 A reason can be added to a subspace using the `MsgAddReason`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/reports/v1/msgs.proto#L126-L143
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/reports/v1/msgs.proto#L126-L143
 ```
 
 It's expected to fail if:
@@ -62,7 +62,7 @@ It's expected to fail if:
 A previously added reason can be removed using the `MsgRemoveReason`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/reports/v1/msgs.proto#L154-L171
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/reports/v1/msgs.proto#L154-L171
 ```
 
 It's expected to fail if:
diff --git a/x/subspaces/authz/authz.pb.go b/x/subspaces/authz/authz.pb.go
index 7beda78e..20fc81be 100644
--- a/x/subspaces/authz/authz.pb.go
+++ b/x/subspaces/authz/authz.pb.go
@@ -1,5 +1,5 @@
 // Code generated by protoc-gen-gogo. DO NOT EDIT.
-// source: desmos/subspaces/v2/authz/authz.proto
+// source: desmos/subspaces/v3/authz/authz.proto
 
 package authz
 
@@ -39,7 +39,7 @@ func (m *GenericSubspaceAuthorization) Reset()         { *m = GenericSubspaceAut
 func (m *GenericSubspaceAuthorization) String() string { return proto.CompactTextString(m) }
 func (*GenericSubspaceAuthorization) ProtoMessage()    {}
 func (*GenericSubspaceAuthorization) Descriptor() ([]byte, []int) {
-	return fileDescriptor_21914b81942bd86e, []int{0}
+	return fileDescriptor_a9e0e1d4a7397c6c, []int{0}
 }
 func (m *GenericSubspaceAuthorization) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -83,19 +83,19 @@ func (m *GenericSubspaceAuthorization) GetMsg() string {
 }
 
 func init() {
-	proto.RegisterType((*GenericSubspaceAuthorization)(nil), "desmos.subspaces.v2.authz.GenericSubspaceAuthorization")
+	proto.RegisterType((*GenericSubspaceAuthorization)(nil), "desmos.subspaces.v3.authz.GenericSubspaceAuthorization")
 }
 
 func init() {
-	proto.RegisterFile("desmos/subspaces/v2/authz/authz.proto", fileDescriptor_21914b81942bd86e)
+	proto.RegisterFile("desmos/subspaces/v3/authz/authz.proto", fileDescriptor_a9e0e1d4a7397c6c)
 }
 
-var fileDescriptor_21914b81942bd86e = []byte{
+var fileDescriptor_a9e0e1d4a7397c6c = []byte{
 	// 271 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4d, 0x49, 0x2d, 0xce,
-	0xcd, 0x2f, 0xd6, 0x2f, 0x2e, 0x4d, 0x2a, 0x2e, 0x48, 0x4c, 0x4e, 0x2d, 0xd6, 0x2f, 0x33, 0xd2,
+	0xcd, 0x2f, 0xd6, 0x2f, 0x2e, 0x4d, 0x2a, 0x2e, 0x48, 0x4c, 0x4e, 0x2d, 0xd6, 0x2f, 0x33, 0xd6,
 	0x4f, 0x2c, 0x2d, 0xc9, 0xa8, 0x82, 0x90, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x92, 0x10,
-	0x65, 0x7a, 0x70, 0x65, 0x7a, 0x65, 0x46, 0x7a, 0x60, 0x05, 0x52, 0x22, 0xe9, 0xf9, 0xe9, 0xf9,
+	0x65, 0x7a, 0x70, 0x65, 0x7a, 0x65, 0xc6, 0x7a, 0x60, 0x05, 0x52, 0x22, 0xe9, 0xf9, 0xe9, 0xf9,
 	0x60, 0x55, 0xfa, 0x20, 0x16, 0x44, 0x83, 0x94, 0x64, 0x72, 0x3e, 0x48, 0x43, 0x3c, 0x44, 0x02,
 	0xc2, 0x81, 0x4a, 0xc9, 0x41, 0x78, 0xfa, 0x49, 0x89, 0xc5, 0xa9, 0xfa, 0x65, 0x86, 0x49, 0xa9,
 	0x25, 0x89, 0x86, 0xfa, 0xc9, 0xf9, 0x99, 0x79, 0x10, 0x79, 0xa5, 0x2a, 0x2e, 0x19, 0xf7, 0xd4,
@@ -108,7 +108,7 @@ var fileDescriptor_21914b81942bd86e = []byte{
 	0xe1, 0xb1, 0x1c, 0xc3, 0x85, 0xc7, 0x72, 0x0c, 0x37, 0x1e, 0xcb, 0x31, 0x44, 0x19, 0xa5, 0x67,
 	0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea, 0x43, 0x02, 0x43, 0x37, 0x27, 0x31, 0xa9,
 	0x18, 0xca, 0xd6, 0x2f, 0x33, 0xd1, 0xaf, 0x40, 0x0a, 0x44, 0x70, 0xd0, 0x24, 0xb1, 0x81, 0x3d,
-	0x64, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xde, 0x24, 0x5c, 0x0b, 0x65, 0x01, 0x00, 0x00,
+	0x64, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x65, 0xf1, 0xe4, 0xda, 0x65, 0x01, 0x00, 0x00,
 }
 
 func (m *GenericSubspaceAuthorization) Marshal() (dAtA []byte, err error) {
diff --git a/x/subspaces/client/cli/tx.go b/x/subspaces/client/cli/tx.go
index 7889740e..3c738604 100644
--- a/x/subspaces/client/cli/tx.go
+++ b/x/subspaces/client/cli/tx.go
@@ -23,13 +23,14 @@ import (
 // DONTCOVER
 
 const (
-	FlagName        = "name"
-	FlagDescription = "description"
-	FlagParent      = "parent"
-	FlagSection     = "section"
-	FlagTreasury    = "treasury"
-	FlagOwner       = "owner"
-	FlagPermissions = "permissions"
+	FlagName           = "name"
+	FlagDescription    = "description"
+	FlagParent         = "parent"
+	FlagSection        = "section"
+	FlagTreasury       = "treasury"
+	FlagOwner          = "owner"
+	FlagPermissions    = "permissions"
+	FlagInitialMembers = "initial-members"
 )
 
 // NewTxCmd returns a new command to perform subspaces transactions
@@ -459,6 +460,7 @@ Multiple permissions must be specified separating them with a comma (,).`, FlagD
 %s tx subspaces groups create 1 "Admins" \
   --description "Group of the subspace admins" \
   --permissions "WRITE,MODERATE_CONTENT,SET_USER_PERMISSIONS" \
+  --initial-members "cosmos1x5pjlvufs4znnhhkwe8v4tw3kz30f3lxgwza53,cosmos1g4yzh3q3grf804t4y4fuynrvrxtshgxy7j783f" \
   --from alice
 `, version.AppName),
 		RunE: func(cmd *cobra.Command, args []string) error {
@@ -494,7 +496,12 @@ Multiple permissions must be specified separating them with a comma (,).`, FlagD
 				permissions = types.CombinePermissions(append(permissions, arg)...)
 			}
 
-			msg := types.NewMsgCreateUserGroup(subspaceID, sectionID, name, description, permissions, clientCtx.FromAddress.String())
+			initialMembers, err := cmd.Flags().GetStringSlice(FlagInitialMembers)
+			if err != nil {
+				return err
+			}
+
+			msg := types.NewMsgCreateUserGroup(subspaceID, sectionID, name, description, permissions, initialMembers, clientCtx.FromAddress.String())
 			if err = msg.ValidateBasic(); err != nil {
 				return fmt.Errorf("message validation failed: %w", err)
 			}
@@ -506,6 +513,8 @@ Multiple permissions must be specified separating them with a comma (,).`, FlagD
 	cmd.Flags().Uint32(FlagSection, 0, "Id of the section inside which to create the group")
 	cmd.Flags().String(FlagDescription, "", "Description of the group")
 	cmd.Flags().StringSlice(FlagPermissions, nil, "Permissions of the group")
+	cmd.Flags().StringSlice(FlagInitialMembers, nil, "Initial members of the group")
+
 	flags.AddTxFlagsToCmd(cmd)
 
 	return cmd
diff --git a/x/subspaces/keeper/msg_server.go b/x/subspaces/keeper/msg_server.go
index 4f412617..7436b43c 100644
--- a/x/subspaces/keeper/msg_server.go
+++ b/x/subspaces/keeper/msg_server.go
@@ -421,6 +421,21 @@ func (k msgServer) CreateUserGroup(goCtx context.Context, msg *types.MsgCreateUs
 	// Update the id for the next group
 	k.SetNextGroupID(ctx, msg.SubspaceID, group.ID+1)
 
+	// Add the initial members, if any
+	var userEvents sdk.Events
+	for _, member := range msg.InitialMembers {
+		// Add the user to the group
+		k.AddUserToGroup(ctx, group.SubspaceID, group.ID, member)
+
+		// Add the events to the list of to emit
+		userEvents = append(userEvents, sdk.NewEvent(
+			types.EventTypeAddUserToGroup,
+			sdk.NewAttribute(types.AttributeKeySubspaceID, fmt.Sprintf("%d", group.SubspaceID)),
+			sdk.NewAttribute(types.AttributeKeyUserGroupID, fmt.Sprintf("%d", group.ID)),
+			sdk.NewAttribute(types.AttributeKeyUser, member),
+		))
+	}
+
 	ctx.EventManager().EmitEvents(sdk.Events{
 		sdk.NewEvent(
 			sdk.EventTypeMessage,
@@ -433,7 +448,7 @@ func (k msgServer) CreateUserGroup(goCtx context.Context, msg *types.MsgCreateUs
 			sdk.NewAttribute(types.AttributeKeySubspaceID, fmt.Sprintf("%d", msg.SubspaceID)),
 			sdk.NewAttribute(types.AttributeKeyUserGroupID, fmt.Sprintf("%d", group.ID)),
 		),
-	})
+	}.AppendEvents(userEvents))
 
 	return &types.MsgCreateUserGroupResponse{GroupID: groupID}, nil
 }
diff --git a/x/subspaces/simulation/operations_groups.go b/x/subspaces/simulation/operations_groups.go
index f8976f19..d81ce268 100644
--- a/x/subspaces/simulation/operations_groups.go
+++ b/x/subspaces/simulation/operations_groups.go
@@ -44,6 +44,7 @@ func SimulateMsgCreateUserGroup(
 			update.Name,
 			update.Description,
 			permissions,
+			nil,
 			creator.Address.String(),
 		)
 
diff --git a/x/subspaces/spec/04-messages.md b/x/subspaces/spec/04-messages.md
index 75becefc..3a0a068f 100644
--- a/x/subspaces/spec/04-messages.md
+++ b/x/subspaces/spec/04-messages.md
@@ -11,7 +11,7 @@ slug: messages
 A subspace can be created with the `MsgCreateSubspace`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/subspaces/v2/msgs.proto#L65-L75 
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/subspaces/v3/msgs.proto#L65-L75 
 ```
 
 It's expected to fail if:
@@ -23,7 +23,7 @@ It's expected to fail if:
 A subspace can be edited with the `MsgEditSubspace`:
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/subspaces/v2/msgs.proto#L85-L100 
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/subspaces/v3/msgs.proto#L85-L100 
 ```
 
 It's expected to fail if:
@@ -35,7 +35,7 @@ It's expected to fail if:
 A subspace can be deleted using `MsgDeleteSubspace`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/subspaces/v2/msgs.proto#L105-L115 
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/subspaces/v3/msgs.proto#L105-L115 
 ```
 
 It's expected to fail if:
@@ -46,7 +46,7 @@ It's expected to fail if:
 A section can be created using the `MsgCreateSection`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/subspaces/v2/msgs.proto#L122-L145 
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/subspaces/v3/msgs.proto#L122-L145 
 ```
 
 The message is expected to fail if:
@@ -59,7 +59,7 @@ The message is expected to fail if:
 A section can be edited using the `MsgEditSection`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/subspaces/v2/msgs.proto#L156-L179 
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/subspaces/v3/msgs.proto#L156-L179 
 ```
 
 It's expected to fail if:
@@ -71,7 +71,7 @@ It's expected to fail if:
 A section can be moved to under another section using the `MsgMoveSection`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/subspaces/v2/msgs.proto#L184-L207 
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/subspaces/v3/msgs.proto#L184-L207 
 ```
 
 It's expected to fail if:
@@ -85,7 +85,7 @@ It's expected to fail if:
 A section can be deleted using the `MsgDeleteSection`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/subspaces/v2/msgs.proto#L212-L228 
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/subspaces/v3/msgs.proto#L212-L228 
 ```
 
 It's is expected to fail if:
@@ -97,7 +97,7 @@ It's is expected to fail if:
 A user group can be created using the `MsgCreateUserGroup`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/subspaces/v2/msgs.proto#L235-L261 
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/subspaces/v3/msgs.proto#L235-L265 
 ```
 
 The message is expected to fail if:
@@ -111,7 +111,7 @@ The message is expected to fail if:
 A user group can be edited using the `MsgEditUserGroup`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/subspaces/v2/msgs.proto#L271-L293
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/subspaces/v3/msgs.proto#L271-L293
 ```
 
 It's expected to fail if:
@@ -124,7 +124,7 @@ It's expected to fail if:
 A user group can be moved to another section group using the `MsgMoveUserGroup`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/subspaces/v2/msgs.proto#L298-L321
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/subspaces/v3/msgs.proto#L298-L321
 ```
 
 It's expected to fail if:
@@ -138,7 +138,7 @@ It's expected to fail if:
 A user group permissions can be set using the `MsgSetUserGroupPermissions`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/subspaces/v2/msgs.proto#L326-L347
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/subspaces/v3/msgs.proto#L326-L347
 ```
 
 It's expected to fail if:
@@ -152,7 +152,7 @@ It's expected to fail if:
 A user group permissions can be deleted using the `MsgDeleteUserGroup`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/subspaces/v2/msgs.proto#L353-L369
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/subspaces/v3/msgs.proto#L353-L369
 ```
 
 It's expected to fail if:
@@ -164,7 +164,7 @@ It's expected to fail if:
 A user can be added to a user group using the `MsgAddUserToUserGroup`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/subspaces/v2/msgs.proto#L376-L396
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/subspaces/v3/msgs.proto#L376-L396
 ```
 
 It's expected to fail if:
@@ -177,7 +177,7 @@ It's expected to fail if:
 A user can be removed from a user group using the `MsgRemoveUserFromUserGroup`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/subspaces/v2/msgs.proto#L402-L422
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/subspaces/v3/msgs.proto#L402-L422
 ```
 
 It's expected to fail if:
@@ -190,7 +190,7 @@ It's expected to fail if:
 A user permissions can be set using the `MsgSetUserPermissions`.
 
 ```js reference
-https://github.com/desmos-labs/desmos/blob/v4.1.0/proto/desmos/subspaces/v2/msgs.proto#L430-L454
+https://github.com/desmos-labs/desmos/blob/master/proto/desmos/subspaces/v3/msgs.proto#L430-L454
 ```
 
 It's expected to fail if:
diff --git a/x/subspaces/spec/07-client.md b/x/subspaces/spec/07-client.md
index ec214176..a21357d4 100644
--- a/x/subspaces/spec/07-client.md
+++ b/x/subspaces/spec/07-client.md
@@ -518,42 +518,42 @@ A user can query the `subspaces` module using REST endpoints.
 The `Subspaces` endpoint allows users to query all the subspaces inside Desmos.
 
 ````
-/desmos/subspaces/v2/subspaces
+/desmos/subspaces/v3/subspaces
 ````
 
 ### Subspace
 The `Subspace` endpoint allows users to query a subspace associated with the given ID.
 
 ````
-/desmos/subspaces/v2/subspaces/{subspace_id}
+/desmos/subspaces/v3/subspaces/{subspace_id}
 ````
 
 ### Sections
 The `Sections` endpoint allows users to query the sections associated with the given subspace ID.
 
 ````
-/desmos/subspaces/v2/{subspace_id}/sections
+/desmos/subspaces/v3/{subspace_id}/sections
 ````
 
 ### Section
 The `Section` endpoint allows users to query a section with the given ID associated with the subspace with the given ID.
 
 ````
-/desmos/subspaces/v2/{subspace_id}/sections/{section_id}
+/desmos/subspaces/v3/{subspace_id}/sections/{section_id}
 ````
 
 ### UserGroups
 The `UserGroups` endpoint allows users to query all the user groups associated with a given subspace ID.
 
 ````
-/desmos/subspaces/v2/subspaces/{subspace_id}/groups
+/desmos/subspaces/v3/subspaces/{subspace_id}/groups
 ````
 
 ### UserGroup
 The `UserGroup` endpoint allows users to query a specific user group with the given ID associated with a given subspace ID.
 
 ````
-/desmos/subspaces/v2/subspaces/{subspace_id}/groups/{group_id}
+/desmos/subspaces/v3/subspaces/{subspace_id}/groups/{group_id}
 ````
 
 ### UserGroupMembers
@@ -561,7 +561,7 @@ The `UserGroupMembers` endpoint allows users to query all the members of the use
 subspace with the given ID.
 
 ````
-/desmos/subspaces/v2/subspaces/{subspace_id}/groups/{group_id}/members
+/desmos/subspaces/v3/subspaces/{subspace_id}/groups/{group_id}/members
 ````
 
 ### UserPermissions
@@ -569,5 +569,5 @@ The `UserPermissions` endpoint allows users to query all the user's permissions
 and the section with the given ID.
 
 ````
-/desmos/subspaces/v2/subspaces/{subspace_id}/permissions/{user}
+/desmos/subspaces/v3/subspaces/{subspace_id}/permissions/{user}
 ````
\ No newline at end of file
diff --git a/x/subspaces/types/genesis.pb.go b/x/subspaces/types/genesis.pb.go
index a6f2c15b..4a69c031 100644
--- a/x/subspaces/types/genesis.pb.go
+++ b/x/subspaces/types/genesis.pb.go
@@ -1,5 +1,5 @@
 // Code generated by protoc-gen-gogo. DO NOT EDIT.
-// source: desmos/subspaces/v2/genesis.proto
+// source: desmos/subspaces/v3/genesis.proto
 
 package types
 
@@ -38,7 +38,7 @@ func (m *GenesisState) Reset()         { *m = GenesisState{} }
 func (m *GenesisState) String() string { return proto.CompactTextString(m) }
 func (*GenesisState) ProtoMessage()    {}
 func (*GenesisState) Descriptor() ([]byte, []int) {
-	return fileDescriptor_e29defb77aaf744c, []int{0}
+	return fileDescriptor_94a00ef70ca23c28, []int{0}
 }
 func (m *GenesisState) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -127,7 +127,7 @@ func (m *SubspaceData) Reset()         { *m = SubspaceData{} }
 func (m *SubspaceData) String() string { return proto.CompactTextString(m) }
 func (*SubspaceData) ProtoMessage()    {}
 func (*SubspaceData) Descriptor() ([]byte, []int) {
-	return fileDescriptor_e29defb77aaf744c, []int{1}
+	return fileDescriptor_94a00ef70ca23c28, []int{1}
 }
 func (m *SubspaceData) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -188,7 +188,7 @@ func (m *UserGroupMemberEntry) Reset()         { *m = UserGroupMemberEntry{} }
 func (m *UserGroupMemberEntry) String() string { return proto.CompactTextString(m) }
 func (*UserGroupMemberEntry) ProtoMessage()    {}
 func (*UserGroupMemberEntry) Descriptor() ([]byte, []int) {
-	return fileDescriptor_e29defb77aaf744c, []int{2}
+	return fileDescriptor_94a00ef70ca23c28, []int{2}
 }
 func (m *UserGroupMemberEntry) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -239,18 +239,18 @@ func (m *UserGroupMemberEntry) GetUser() string {
 }
 
 func init() {
-	proto.RegisterType((*GenesisState)(nil), "desmos.subspaces.v2.GenesisState")
-	proto.RegisterType((*SubspaceData)(nil), "desmos.subspaces.v2.SubspaceData")
-	proto.RegisterType((*UserGroupMemberEntry)(nil), "desmos.subspaces.v2.UserGroupMemberEntry")
+	proto.RegisterType((*GenesisState)(nil), "desmos.subspaces.v3.GenesisState")
+	proto.RegisterType((*SubspaceData)(nil), "desmos.subspaces.v3.SubspaceData")
+	proto.RegisterType((*UserGroupMemberEntry)(nil), "desmos.subspaces.v3.UserGroupMemberEntry")
 }
 
-func init() { proto.RegisterFile("desmos/subspaces/v2/genesis.proto", fileDescriptor_e29defb77aaf744c) }
+func init() { proto.RegisterFile("desmos/subspaces/v3/genesis.proto", fileDescriptor_94a00ef70ca23c28) }
 
-var fileDescriptor_e29defb77aaf744c = []byte{
+var fileDescriptor_94a00ef70ca23c28 = []byte{
 	// 533 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0x3f, 0x6f, 0xd3, 0x40,
 	0x18, 0xc6, 0x73, 0x4d, 0x68, 0xd2, 0x73, 0xd3, 0x90, 0x4b, 0x91, 0xac, 0x0a, 0xec, 0xb4, 0x48,
-	0x28, 0x0c, 0xd8, 0x52, 0xca, 0x02, 0x03, 0x12, 0x51, 0xa2, 0x2a, 0x12, 0x54, 0x28, 0x85, 0x85,
+	0x28, 0x0c, 0xd8, 0x52, 0xc3, 0x02, 0x03, 0x12, 0x51, 0xa2, 0x2a, 0x12, 0x54, 0x28, 0x85, 0x85,
 	0xc5, 0x72, 0xe2, 0x93, 0xb1, 0x14, 0xff, 0x91, 0xdf, 0x73, 0x94, 0x7e, 0x08, 0x24, 0x46, 0xc6,
 	0x7e, 0x04, 0x56, 0xbe, 0x41, 0xc7, 0x8e, 0x4c, 0x16, 0x72, 0x16, 0x3e, 0x06, 0xf2, 0xf9, 0xec,
 	0x98, 0x62, 0x2a, 0xb1, 0x9d, 0xdf, 0xf7, 0x79, 0x7e, 0xf7, 0x9c, 0xdf, 0x3b, 0x7c, 0x6c, 0x51,
@@ -260,28 +260,28 @@ var fileDescriptor_e29defb77aaf744c = []byte{
 	0xb0, 0x93, 0x6f, 0x0d, 0xbc, 0x7f, 0x96, 0xe1, 0x2f, 0x98, 0xc9, 0x28, 0x99, 0xe0, 0x9e, 0xe3,
 	0x39, 0xcc, 0x31, 0x97, 0x46, 0xee, 0x32, 0x1c, 0x4b, 0x46, 0x7d, 0x34, 0x68, 0x8c, 0x1e, 0x24,
 	0xb1, 0xda, 0x9d, 0x66, 0xed, 0x0b, 0xd1, 0x9d, 0x8e, 0x67, 0x5d, 0xe7, 0x56, 0xc9, 0x22, 0xe7,
-	0xf8, 0xa0, 0xd8, 0xd4, 0xb0, 0x4c, 0x66, 0xca, 0x3b, 0xfd, 0xfa, 0x40, 0x1a, 0x1e, 0x6b, 0x15,
-	0xe9, 0xb5, 0xdc, 0x38, 0x36, 0x99, 0x39, 0x6a, 0x5c, 0xc7, 0x6a, 0x6d, 0xd6, 0x2e, 0x04, 0x69,
-	0x91, 0xbc, 0xc6, 0x7b, 0x45, 0x41, 0xae, 0x73, 0xd4, 0xa3, 0x3b, 0x51, 0x02, 0xb3, 0x75, 0x91,
-	0x57, 0xb8, 0x05, 0x74, 0xc1, 0x1c, 0xdf, 0x03, 0xb9, 0xc1, 0x09, 0x0f, 0xab, 0x09, 0x99, 0x48,
-	0x00, 0x0a, 0x0f, 0x79, 0x8f, 0xef, 0x47, 0x40, 0x43, 0x23, 0xa0, 0xa1, 0xeb, 0x00, 0x70, 0xce,
-	0x3d, 0xce, 0x79, 0x5c, 0xc9, 0xf9, 0x00, 0x34, 0x7c, 0x57, 0x68, 0x05, 0xae, 0x13, 0xfd, 0x51,
-	0x05, 0x32, 0xc1, 0x12, 0xa7, 0xda, 0xa1, 0x1f, 0x05, 0x20, 0xef, 0x72, 0xa0, 0xf2, 0x4f, 0xe0,
-	0x59, 0x2a, 0x13, 0x2c, 0x1c, 0xe5, 0x05, 0x20, 0x06, 0xee, 0x95, 0x30, 0x86, 0x4b, 0xdd, 0x39,
-	0x0d, 0x41, 0x6e, 0x72, 0xdc, 0xd3, 0xbb, 0x71, 0x6f, 0xb9, 0x78, 0xe2, 0xb1, 0xf0, 0x52, 0x90,
-	0xbb, 0x5b, 0x72, 0xd6, 0x84, 0x97, 0xad, 0xaf, 0x57, 0x2a, 0xfa, 0x75, 0xa5, 0xa2, 0x93, 0xef,
-	0x08, 0xef, 0x97, 0x07, 0x46, 0x74, 0x2c, 0xfd, 0x7d, 0x55, 0x0e, 0x92, 0x58, 0xc5, 0xa5, 0x3b,
-	0x82, 0x61, 0x7b, 0x39, 0x4e, 0x71, 0xdb, 0xa3, 0x6b, 0x96, 0x85, 0x4d, 0x2d, 0x3b, 0x7d, 0x34,
+	0xf8, 0xa0, 0xd8, 0xd4, 0xb0, 0x4c, 0x66, 0xca, 0x3b, 0xfd, 0xfa, 0x40, 0x3a, 0x3d, 0xd6, 0x2a,
+	0xd2, 0x6b, 0xb9, 0x71, 0x6c, 0x32, 0x73, 0xd4, 0xb8, 0x8e, 0xd5, 0xda, 0xac, 0x5d, 0x08, 0xd2,
+	0x22, 0x79, 0x8d, 0xf7, 0x8a, 0x82, 0x5c, 0xe7, 0xa8, 0x47, 0x77, 0xa2, 0x04, 0x66, 0xeb, 0x22,
+	0xaf, 0x70, 0x0b, 0xe8, 0x82, 0x39, 0xbe, 0x07, 0x72, 0x83, 0x13, 0x1e, 0x56, 0x13, 0x32, 0x91,
+	0x00, 0x14, 0x1e, 0xf2, 0x1e, 0xdf, 0x8f, 0x80, 0x86, 0x46, 0x40, 0x43, 0xd7, 0x01, 0xe0, 0x9c,
+	0x7b, 0x9c, 0xf3, 0xb8, 0x92, 0xf3, 0x01, 0x68, 0xf8, 0xae, 0xd0, 0x0a, 0x5c, 0x27, 0xfa, 0xa3,
+	0x0a, 0x64, 0x82, 0x25, 0x4e, 0xb5, 0x43, 0x3f, 0x0a, 0x40, 0xde, 0xe5, 0x40, 0xe5, 0x9f, 0xc0,
+	0xb3, 0x54, 0x26, 0x58, 0x38, 0xca, 0x0b, 0x40, 0x0c, 0xdc, 0x2b, 0x61, 0x0c, 0x97, 0xba, 0x73,
+	0x1a, 0x82, 0xdc, 0xe4, 0xb8, 0xa7, 0x77, 0xe3, 0xde, 0x72, 0xf1, 0xc4, 0x63, 0xe1, 0xa5, 0x20,
+	0x77, 0xb7, 0xe4, 0xac, 0x09, 0x2f, 0x5b, 0x5f, 0xaf, 0x54, 0xf4, 0xeb, 0x4a, 0x45, 0x27, 0xdf,
+	0x11, 0xde, 0x2f, 0x0f, 0x8c, 0xe8, 0x58, 0xfa, 0xfb, 0xaa, 0x1c, 0x24, 0xb1, 0x8a, 0x4b, 0x77,
+	0x04, 0xc3, 0xf6, 0x72, 0x0c, 0x71, 0xdb, 0xa3, 0x6b, 0x96, 0x85, 0x4d, 0x2d, 0x3b, 0x7d, 0x34,
 	0x68, 0x8f, 0x3a, 0x49, 0xac, 0x4a, 0xe7, 0x74, 0xcd, 0xf8, 0xce, 0xd3, 0xf1, 0x4c, 0xf2, 0x8a,
 	0x0f, 0x8b, 0xbc, 0xc0, 0x1d, 0x6e, 0x12, 0xf3, 0x48, 0x6d, 0x75, 0x6e, 0xeb, 0x26, 0xb1, 0xda,
 	0x4e, 0x6d, 0x62, 0x70, 0xd3, 0xf1, 0x8c, 0xe3, 0xf3, 0x4f, 0xab, 0x94, 0xfd, 0x33, 0xc2, 0x87,
 	0x55, 0xe7, 0xfe, 0xff, 0x33, 0x3c, 0xc1, 0xad, 0x5b, 0xf1, 0xa5, 0x24, 0x56, 0x9b, 0x79, 0xf4,
 	0xa6, 0x2d, 0x62, 0x13, 0xdc, 0x48, 0x7f, 0x26, 0xcf, 0xba, 0x37, 0xe3, 0xeb, 0x6d, 0x9e, 0xd1,
 	0x9b, 0xeb, 0x44, 0x41, 0x37, 0x89, 0x82, 0x7e, 0x26, 0x0a, 0xfa, 0xb2, 0x51, 0x6a, 0x37, 0x1b,
-	0xa5, 0xf6, 0x63, 0xa3, 0xd4, 0x3e, 0x0e, 0x6d, 0x87, 0x7d, 0x8a, 0xe6, 0xda, 0xc2, 0x77, 0xf5,
-	0x6c, 0x7a, 0xcf, 0x96, 0xe6, 0x1c, 0xc4, 0x5a, 0x5f, 0x3d, 0xd7, 0xd7, 0xa5, 0x67, 0xcd, 0x2e,
-	0x03, 0x0a, 0xf3, 0x5d, 0xfe, 0xa6, 0x4f, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x21, 0xa7, 0xab,
-	0x7a, 0x45, 0x04, 0x00, 0x00,
+	0xa5, 0xf6, 0x63, 0xa3, 0xd4, 0x3e, 0x9e, 0xda, 0x0e, 0xfb, 0x14, 0xcd, 0xb5, 0x85, 0xef, 0xea,
+	0xd9, 0xf4, 0x9e, 0x2d, 0xcd, 0x39, 0x88, 0xb5, 0xbe, 0x7a, 0xae, 0xaf, 0x4b, 0xcf, 0x9a, 0x5d,
+	0x06, 0x14, 0xe6, 0xbb, 0xfc, 0x4d, 0x0f, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x5e, 0x55, 0x36,
+	0x33, 0x45, 0x04, 0x00, 0x00,
 }
 
 func (this *GenesisState) Equal(that interface{}) bool {
diff --git a/x/subspaces/types/models.pb.go b/x/subspaces/types/models.pb.go
index 7c234bf5..7c15fbda 100644
--- a/x/subspaces/types/models.pb.go
+++ b/x/subspaces/types/models.pb.go
@@ -1,5 +1,5 @@
 // Code generated by protoc-gen-gogo. DO NOT EDIT.
-// source: desmos/subspaces/v2/models.proto
+// source: desmos/subspaces/v3/models.proto
 
 package types
 
@@ -50,7 +50,7 @@ func (m *Subspace) Reset()         { *m = Subspace{} }
 func (m *Subspace) String() string { return proto.CompactTextString(m) }
 func (*Subspace) ProtoMessage()    {}
 func (*Subspace) Descriptor() ([]byte, []int) {
-	return fileDescriptor_a588429ec794f86a, []int{0}
+	return fileDescriptor_ca57465af0d8b734, []int{0}
 }
 func (m *Subspace) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -146,7 +146,7 @@ func (m *Section) Reset()         { *m = Section{} }
 func (m *Section) String() string { return proto.CompactTextString(m) }
 func (*Section) ProtoMessage()    {}
 func (*Section) Descriptor() ([]byte, []int) {
-	return fileDescriptor_a588429ec794f86a, []int{1}
+	return fileDescriptor_ca57465af0d8b734, []int{1}
 }
 func (m *Section) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -230,7 +230,7 @@ func (m *UserGroup) Reset()         { *m = UserGroup{} }
 func (m *UserGroup) String() string { return proto.CompactTextString(m) }
 func (*UserGroup) ProtoMessage()    {}
 func (*UserGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_a588429ec794f86a, []int{2}
+	return fileDescriptor_ca57465af0d8b734, []int{2}
 }
 func (m *UserGroup) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -313,7 +313,7 @@ func (m *UserPermission) Reset()         { *m = UserPermission{} }
 func (m *UserPermission) String() string { return proto.CompactTextString(m) }
 func (*UserPermission) ProtoMessage()    {}
 func (*UserPermission) Descriptor() ([]byte, []int) {
-	return fileDescriptor_a588429ec794f86a, []int{3}
+	return fileDescriptor_ca57465af0d8b734, []int{3}
 }
 func (m *UserPermission) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -371,56 +371,56 @@ func (m *UserPermission) GetPermissions() Permissions {
 }
 
 func init() {
-	proto.RegisterType((*Subspace)(nil), "desmos.subspaces.v2.Subspace")
-	proto.RegisterType((*Section)(nil), "desmos.subspaces.v2.Section")
-	proto.RegisterType((*UserGroup)(nil), "desmos.subspaces.v2.UserGroup")
-	proto.RegisterType((*UserPermission)(nil), "desmos.subspaces.v2.UserPermission")
-}
-
-func init() { proto.RegisterFile("desmos/subspaces/v2/models.proto", fileDescriptor_a588429ec794f86a) }
-
-var fileDescriptor_a588429ec794f86a = []byte{
-	// 635 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x94, 0xbf, 0x6f, 0xd3, 0x4e,
-	0x14, 0xc0, 0xe3, 0x24, 0x6d, 0xe3, 0x4b, 0x7f, 0x7d, 0xaf, 0xd5, 0x57, 0x56, 0x87, 0x9c, 0x75,
-	0x05, 0x94, 0xa1, 0xd8, 0x22, 0x30, 0xa0, 0x4a, 0x0c, 0x44, 0xa0, 0xaa, 0x12, 0x43, 0x75, 0x85,
-	0x85, 0xa5, 0x72, 0xe2, 0x23, 0x58, 0x8a, 0x73, 0xd6, 0x9d, 0x53, 0xe8, 0xca, 0x5f, 0xd0, 0x91,
-	0x05, 0xa9, 0x33, 0x7f, 0x05, 0x63, 0xc7, 0x8e, 0x4c, 0x57, 0xe4, 0x2c, 0x0c, 0x4c, 0xfe, 0x0b,
-	0x90, 0xef, 0x6c, 0xc7, 0x91, 0x0a, 0x2a, 0x12, 0x6c, 0xef, 0xee, 0x7d, 0xde, 0x59, 0xef, 0xf3,
-	0xce, 0x07, 0x6c, 0x9f, 0x8a, 0x90, 0x09, 0x57, 0x4c, 0x07, 0x22, 0xf2, 0x86, 0x54, 0xb8, 0xa7,
-	0x3d, 0x37, 0x64, 0x3e, 0x1d, 0x0b, 0x27, 0xe2, 0x2c, 0x66, 0x70, 0x4b, 0x13, 0x4e, 0x49, 0x38,
-	0xa7, 0xbd, 0x9d, 0xed, 0x11, 0x1b, 0x31, 0x95, 0x77, 0xb3, 0x48, 0xa3, 0x3b, 0x68, 0xc4, 0xd8,
-	0x68, 0x4c, 0x5d, 0xb5, 0x1a, 0x4c, 0xdf, 0xb8, 0x71, 0x10, 0x52, 0x11, 0x7b, 0x61, 0xa4, 0x01,
-	0xfc, 0xa1, 0x01, 0x5a, 0xc7, 0xf9, 0x39, 0x70, 0x17, 0xd4, 0x03, 0xdf, 0x32, 0x6c, 0xa3, 0xdb,
-	0xec, 0x6f, 0x25, 0x12, 0xd5, 0x0f, 0x9f, 0xa5, 0x12, 0x99, 0x67, 0x5e, 0x38, 0xde, 0xc7, 0x81,
-	0x8f, 0x49, 0x3d, 0xf0, 0xe1, 0x2e, 0x68, 0x4e, 0xbc, 0x90, 0x5a, 0x75, 0xdb, 0xe8, 0x9a, 0xfd,
-	0x8d, 0x54, 0xa2, 0xb6, 0x06, 0xb2, 0x5d, 0x4c, 0x54, 0x12, 0x3e, 0x06, 0x6d, 0x9f, 0x8a, 0x21,
-	0x0f, 0xa2, 0x38, 0x60, 0x13, 0xab, 0xa1, 0xd8, 0xff, 0x53, 0x89, 0xa0, 0x66, 0x2b, 0x49, 0x4c,
-	0xaa, 0x28, 0x74, 0x41, 0x2b, 0xe6, 0xd4, 0x13, 0x53, 0x7e, 0x66, 0x35, 0x55, 0xd9, 0x56, 0x2a,
-	0xd1, 0x86, 0x2e, 0x2b, 0x32, 0x98, 0x94, 0x10, 0xbc, 0x07, 0x96, 0xd8, 0xbb, 0x09, 0xe5, 0xd6,
-	0x92, 0xa2, 0x37, 0x53, 0x89, 0x56, 0x35, 0xad, 0xb6, 0x31, 0xd1, 0x69, 0xb8, 0x07, 0x56, 0x86,
-	0x9c, 0x7a, 0x31, 0xe3, 0xd6, 0xb2, 0x22, 0x61, 0x2a, 0xd1, 0xba, 0x26, 0xf3, 0x04, 0x26, 0x05,
-	0x02, 0x3d, 0xb0, 0xa6, 0xc2, 0x80, 0x4d, 0x4e, 0x32, 0x67, 0xd6, 0x8a, 0x6d, 0x74, 0xdb, 0xbd,
-	0x1d, 0x47, 0x0b, 0x75, 0x0a, 0xa1, 0xce, 0xcb, 0x42, 0x68, 0xdf, 0xbe, 0x94, 0xa8, 0x96, 0x4a,
-	0xb4, 0x5d, 0x39, 0xb3, 0x28, 0xc7, 0xe7, 0xd7, 0xc8, 0x20, 0xab, 0xc5, 0x5e, 0x56, 0xb4, 0xdf,
-	0xfa, 0x78, 0x81, 0x8c, 0xef, 0x17, 0xc8, 0xc0, 0x9f, 0xea, 0x60, 0xe5, 0x98, 0x0e, 0x55, 0xff,
-	0xcf, 0x41, 0xbb, 0x98, 0xeb, 0x49, 0x39, 0x8c, 0x3b, 0x89, 0x44, 0xa0, 0x18, 0x93, 0x1a, 0x4a,
-	0xee, 0xb1, 0x82, 0x62, 0x02, 0x8a, 0xd5, 0xa1, 0x9f, 0x8f, 0x32, 0x9b, 0xd1, 0xda, 0xaf, 0x47,
-	0xf9, 0x04, 0x98, 0x91, 0xc7, 0xe9, 0x24, 0xce, 0xbe, 0xd4, 0x50, 0xac, 0x9d, 0x48, 0xd4, 0x3a,
-	0x52, 0x9b, 0xaa, 0x62, 0x53, 0x57, 0x94, 0x18, 0x26, 0x2d, 0x1d, 0x1f, 0xce, 0x6f, 0x42, 0xf3,
-	0x0f, 0x6e, 0xc2, 0xd2, 0xad, 0x6f, 0x42, 0xc5, 0xcf, 0x8f, 0x3a, 0x30, 0x5f, 0x09, 0xca, 0x0f,
-	0x38, 0x9b, 0x46, 0x7f, 0xcb, 0xd0, 0x53, 0x00, 0x84, 0x76, 0x7e, 0x52, 0x9a, 0xc2, 0x89, 0x44,
-	0x66, 0x3e, 0x09, 0x75, 0xc8, 0x7f, 0xf9, 0x21, 0x25, 0x88, 0x89, 0x99, 0x2f, 0x4a, 0xc9, 0x8d,
-	0xdf, 0x4b, 0xfe, 0xb7, 0x96, 0xe0, 0x01, 0x68, 0x47, 0x94, 0x87, 0x81, 0x10, 0x01, 0x9b, 0x08,
-	0x6b, 0xd9, 0x6e, 0x74, 0xcd, 0xfe, 0xdd, 0x79, 0x65, 0x25, 0x89, 0x3f, 0x5f, 0xa3, 0xf6, 0xd1,
-	0x7c, 0x4d, 0xaa, 0x95, 0x15, 0xdd, 0x5f, 0x0c, 0xb0, 0x9e, 0xe9, 0x9e, 0xa3, 0xd0, 0xbd, 0xc9,
-	0xf9, 0xfa, 0xa2, 0xf3, 0x05, 0xbb, 0x7b, 0x37, 0xd8, 0x5d, 0x5b, 0xb0, 0x5b, 0x15, 0x09, 0x41,
-	0x73, 0x2a, 0x28, 0xd7, 0xef, 0x04, 0x51, 0x31, 0x7c, 0xb0, 0xd8, 0x58, 0x53, 0x35, 0xb6, 0x71,
-	0xbb, 0x16, 0xfa, 0x2f, 0x2e, 0x93, 0x8e, 0x71, 0x95, 0x74, 0x8c, 0x6f, 0x49, 0xc7, 0x38, 0x9f,
-	0x75, 0x6a, 0x57, 0xb3, 0x4e, 0xed, 0xeb, 0xac, 0x53, 0x7b, 0xdd, 0x1b, 0x05, 0xf1, 0xdb, 0xe9,
-	0xc0, 0x19, 0xb2, 0xd0, 0xd5, 0xef, 0xe8, 0xfd, 0xb1, 0x37, 0x10, 0x79, 0xec, 0x9e, 0x3e, 0x72,
-	0xdf, 0x57, 0x9e, 0xde, 0xf8, 0x2c, 0xa2, 0x62, 0xb0, 0xac, 0xfe, 0xf6, 0x87, 0x3f, 0x03, 0x00,
-	0x00, 0xff, 0xff, 0x56, 0x00, 0xdc, 0x16, 0x9b, 0x05, 0x00, 0x00,
+	proto.RegisterType((*Subspace)(nil), "desmos.subspaces.v3.Subspace")
+	proto.RegisterType((*Section)(nil), "desmos.subspaces.v3.Section")
+	proto.RegisterType((*UserGroup)(nil), "desmos.subspaces.v3.UserGroup")
+	proto.RegisterType((*UserPermission)(nil), "desmos.subspaces.v3.UserPermission")
+}
+
+func init() { proto.RegisterFile("desmos/subspaces/v3/models.proto", fileDescriptor_ca57465af0d8b734) }
+
+var fileDescriptor_ca57465af0d8b734 = []byte{
+	// 634 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x94, 0x3f, 0x6f, 0xd3, 0x40,
+	0x14, 0xc0, 0xe3, 0x24, 0x6d, 0xe3, 0x4b, 0xff, 0x71, 0xad, 0x90, 0xd5, 0x21, 0x67, 0x5d, 0x01,
+	0x65, 0x28, 0xb6, 0x68, 0x19, 0x50, 0x25, 0x06, 0x22, 0x50, 0x55, 0x89, 0xa1, 0xba, 0xc2, 0xc2,
+	0x52, 0x39, 0xf1, 0x11, 0x2c, 0xc5, 0x39, 0xeb, 0xce, 0x29, 0x74, 0xe5, 0x13, 0x74, 0x64, 0x41,
+	0xea, 0xcc, 0xa7, 0x60, 0xec, 0xd8, 0x91, 0xe9, 0x8a, 0x9c, 0x85, 0x81, 0xc9, 0x9f, 0x00, 0xf9,
+	0xce, 0x76, 0x1c, 0xa9, 0xa0, 0x22, 0xc1, 0xf6, 0xee, 0xde, 0xef, 0x9d, 0xf5, 0x7e, 0xef, 0x7c,
+	0xc0, 0xf6, 0xa9, 0x08, 0x99, 0x70, 0xc5, 0xa4, 0x2f, 0x22, 0x6f, 0x40, 0x85, 0x7b, 0xba, 0xe7,
+	0x86, 0xcc, 0xa7, 0x23, 0xe1, 0x44, 0x9c, 0xc5, 0x0c, 0x6e, 0x68, 0xc2, 0x29, 0x09, 0xe7, 0x74,
+	0x6f, 0x6b, 0x73, 0xc8, 0x86, 0x4c, 0xe5, 0xdd, 0x2c, 0xd2, 0xe8, 0x16, 0x1a, 0x32, 0x36, 0x1c,
+	0x51, 0x57, 0xad, 0xfa, 0x93, 0xb7, 0x6e, 0x1c, 0x84, 0x54, 0xc4, 0x5e, 0x18, 0x69, 0x00, 0x7f,
+	0x6c, 0x80, 0xd6, 0x71, 0x7e, 0x0e, 0xdc, 0x06, 0xf5, 0xc0, 0xb7, 0x0c, 0xdb, 0xe8, 0x36, 0x7b,
+	0x1b, 0x89, 0x44, 0xf5, 0xc3, 0xe7, 0xa9, 0x44, 0xe6, 0x99, 0x17, 0x8e, 0xf6, 0x71, 0xe0, 0x63,
+	0x52, 0x0f, 0x7c, 0xb8, 0x0d, 0x9a, 0x63, 0x2f, 0xa4, 0x56, 0xdd, 0x36, 0xba, 0x66, 0x6f, 0x2d,
+	0x95, 0xa8, 0xad, 0x81, 0x6c, 0x17, 0x13, 0x95, 0x84, 0x4f, 0x40, 0xdb, 0xa7, 0x62, 0xc0, 0x83,
+	0x28, 0x0e, 0xd8, 0xd8, 0x6a, 0x28, 0xf6, 0x6e, 0x2a, 0x11, 0xd4, 0x6c, 0x25, 0x89, 0x49, 0x15,
+	0x85, 0x2e, 0x68, 0xc5, 0x9c, 0x7a, 0x62, 0xc2, 0xcf, 0xac, 0xa6, 0x2a, 0xdb, 0x48, 0x25, 0x5a,
+	0xd3, 0x65, 0x45, 0x06, 0x93, 0x12, 0x82, 0x0f, 0xc0, 0x02, 0x7b, 0x3f, 0xa6, 0xdc, 0x5a, 0x50,
+	0xf4, 0x7a, 0x2a, 0xd1, 0xb2, 0xa6, 0xd5, 0x36, 0x26, 0x3a, 0x0d, 0x77, 0xc0, 0xd2, 0x80, 0x53,
+	0x2f, 0x66, 0xdc, 0x5a, 0x54, 0x24, 0x4c, 0x25, 0x5a, 0xd5, 0x64, 0x9e, 0xc0, 0xa4, 0x40, 0xa0,
+	0x07, 0x56, 0x54, 0x18, 0xb0, 0xf1, 0x49, 0xe6, 0xcc, 0x5a, 0xb2, 0x8d, 0x6e, 0x7b, 0x77, 0xcb,
+	0xd1, 0x42, 0x9d, 0x42, 0xa8, 0xf3, 0xaa, 0x10, 0xda, 0xb3, 0x2f, 0x25, 0xaa, 0xa5, 0x12, 0x6d,
+	0x56, 0xce, 0x2c, 0xca, 0xf1, 0xf9, 0x35, 0x32, 0xc8, 0x72, 0xb1, 0x97, 0x15, 0xed, 0xb7, 0x3e,
+	0x5d, 0x20, 0xe3, 0xc7, 0x05, 0x32, 0xf0, 0xe7, 0x3a, 0x58, 0x3a, 0xa6, 0x03, 0xd5, 0xff, 0x0b,
+	0xd0, 0x2e, 0xe6, 0x7a, 0x52, 0x0e, 0xe3, 0x5e, 0x22, 0x11, 0x28, 0xc6, 0xa4, 0x86, 0x92, 0x7b,
+	0xac, 0xa0, 0x98, 0x80, 0x62, 0x75, 0xe8, 0xe7, 0xa3, 0xcc, 0x66, 0xb4, 0xf2, 0xfb, 0x51, 0x3e,
+	0x05, 0x66, 0xe4, 0x71, 0x3a, 0x8e, 0xb3, 0x2f, 0x35, 0x14, 0x6b, 0x27, 0x12, 0xb5, 0x8e, 0xd4,
+	0xa6, 0xaa, 0x58, 0xd7, 0x15, 0x25, 0x86, 0x49, 0x4b, 0xc7, 0x87, 0xb3, 0x9b, 0xd0, 0xfc, 0x8b,
+	0x9b, 0xb0, 0x70, 0xeb, 0x9b, 0x50, 0xf1, 0xf3, 0xb3, 0x0e, 0xcc, 0xd7, 0x82, 0xf2, 0x03, 0xce,
+	0x26, 0xd1, 0xbf, 0x32, 0xf4, 0x0c, 0x00, 0xa1, 0x9d, 0x9f, 0x94, 0xa6, 0x70, 0x22, 0x91, 0x99,
+	0x4f, 0x42, 0x1d, 0x72, 0x27, 0x3f, 0xa4, 0x04, 0x31, 0x31, 0xf3, 0x45, 0x29, 0xb9, 0xf1, 0x67,
+	0xc9, 0xff, 0xd7, 0x12, 0x3c, 0x00, 0xed, 0x88, 0xf2, 0x30, 0x10, 0x22, 0x60, 0x63, 0x61, 0x2d,
+	0xda, 0x8d, 0xae, 0xd9, 0xbb, 0x3f, 0xab, 0xac, 0x24, 0xf1, 0x97, 0x6b, 0xd4, 0x3e, 0x9a, 0xad,
+	0x49, 0xb5, 0xb2, 0xa2, 0xfb, 0xab, 0x01, 0x56, 0x33, 0xdd, 0x33, 0x14, 0xba, 0x37, 0x39, 0x5f,
+	0x9d, 0x77, 0x3e, 0x67, 0x77, 0xe7, 0x06, 0xbb, 0x2b, 0x73, 0x76, 0xab, 0x22, 0x21, 0x68, 0x4e,
+	0x04, 0xe5, 0xfa, 0x9d, 0x20, 0x2a, 0x86, 0x8f, 0xe6, 0x1b, 0x6b, 0xaa, 0xc6, 0xd6, 0x6e, 0xd7,
+	0x42, 0xef, 0xe5, 0x65, 0xd2, 0x31, 0xae, 0x92, 0x8e, 0xf1, 0x3d, 0xe9, 0x18, 0xe7, 0xd3, 0x4e,
+	0xed, 0x6a, 0xda, 0xa9, 0x7d, 0x9b, 0x76, 0x6a, 0x6f, 0x76, 0x87, 0x41, 0xfc, 0x6e, 0xd2, 0x77,
+	0x06, 0x2c, 0x74, 0xf5, 0x3b, 0xfa, 0x70, 0xe4, 0xf5, 0x45, 0x1e, 0xbb, 0xa7, 0x8f, 0xdd, 0x0f,
+	0x95, 0xa7, 0x37, 0x3e, 0x8b, 0xa8, 0xe8, 0x2f, 0xaa, 0xbf, 0x7d, 0xef, 0x57, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xda, 0xd1, 0x96, 0x8e, 0x9b, 0x05, 0x00, 0x00,
 }
 
 func (this *Subspace) Equal(that interface{}) bool {
diff --git a/x/subspaces/types/msgs.go b/x/subspaces/types/msgs.go
index f39fb153..0f4f079e 100644
--- a/x/subspaces/types/msgs.go
+++ b/x/subspaces/types/msgs.go
@@ -407,6 +407,7 @@ func NewMsgCreateUserGroup(
 	name string,
 	description string,
 	permissions Permissions,
+	initialMembers []string,
 	creator string,
 ) *MsgCreateUserGroup {
 	return &MsgCreateUserGroup{
@@ -415,6 +416,7 @@ func NewMsgCreateUserGroup(
 		Name:               name,
 		Description:        description,
 		DefaultPermissions: permissions,
+		InitialMembers:     initialMembers,
 		Creator:            creator,
 	}
 }
@@ -439,6 +441,13 @@ func (msg MsgCreateUserGroup) ValidateBasic() error {
 		return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid permissions: %s", msg.DefaultPermissions)
 	}
 
+	for _, member := range msg.InitialMembers {
+		_, err := sdk.AccAddressFromBech32(member)
+		if err != nil {
+			return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid member address: %s", member)
+		}
+	}
+
 	_, err := sdk.AccAddressFromBech32(msg.Creator)
 	if err != nil {
 		return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address")
diff --git a/x/subspaces/types/msgs.pb.go b/x/subspaces/types/msgs.pb.go
index 17f8dbb8..790c74be 100644
--- a/x/subspaces/types/msgs.pb.go
+++ b/x/subspaces/types/msgs.pb.go
@@ -1,5 +1,5 @@
 // Code generated by protoc-gen-gogo. DO NOT EDIT.
-// source: desmos/subspaces/v2/msgs.proto
+// source: desmos/subspaces/v3/msgs.proto
 
 package types
 
@@ -41,7 +41,7 @@ func (m *MsgCreateSubspace) Reset()         { *m = MsgCreateSubspace{} }
 func (m *MsgCreateSubspace) String() string { return proto.CompactTextString(m) }
 func (*MsgCreateSubspace) ProtoMessage()    {}
 func (*MsgCreateSubspace) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{0}
+	return fileDescriptor_35d68359a074bdd9, []int{0}
 }
 func (m *MsgCreateSubspace) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -79,7 +79,7 @@ func (m *MsgCreateSubspaceResponse) Reset()         { *m = MsgCreateSubspaceResp
 func (m *MsgCreateSubspaceResponse) String() string { return proto.CompactTextString(m) }
 func (*MsgCreateSubspaceResponse) ProtoMessage()    {}
 func (*MsgCreateSubspaceResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{1}
+	return fileDescriptor_35d68359a074bdd9, []int{1}
 }
 func (m *MsgCreateSubspaceResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -129,7 +129,7 @@ func (m *MsgEditSubspace) Reset()         { *m = MsgEditSubspace{} }
 func (m *MsgEditSubspace) String() string { return proto.CompactTextString(m) }
 func (*MsgEditSubspace) ProtoMessage()    {}
 func (*MsgEditSubspace) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{2}
+	return fileDescriptor_35d68359a074bdd9, []int{2}
 }
 func (m *MsgEditSubspace) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -166,7 +166,7 @@ func (m *MsgEditSubspaceResponse) Reset()         { *m = MsgEditSubspaceResponse
 func (m *MsgEditSubspaceResponse) String() string { return proto.CompactTextString(m) }
 func (*MsgEditSubspaceResponse) ProtoMessage()    {}
 func (*MsgEditSubspaceResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{3}
+	return fileDescriptor_35d68359a074bdd9, []int{3}
 }
 func (m *MsgEditSubspaceResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -205,7 +205,7 @@ func (m *MsgDeleteSubspace) Reset()         { *m = MsgDeleteSubspace{} }
 func (m *MsgDeleteSubspace) String() string { return proto.CompactTextString(m) }
 func (*MsgDeleteSubspace) ProtoMessage()    {}
 func (*MsgDeleteSubspace) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{4}
+	return fileDescriptor_35d68359a074bdd9, []int{4}
 }
 func (m *MsgDeleteSubspace) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -242,7 +242,7 @@ func (m *MsgDeleteSubspaceResponse) Reset()         { *m = MsgDeleteSubspaceResp
 func (m *MsgDeleteSubspaceResponse) String() string { return proto.CompactTextString(m) }
 func (*MsgDeleteSubspaceResponse) ProtoMessage()    {}
 func (*MsgDeleteSubspaceResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{5}
+	return fileDescriptor_35d68359a074bdd9, []int{5}
 }
 func (m *MsgDeleteSubspaceResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -290,7 +290,7 @@ func (m *MsgCreateSection) Reset()         { *m = MsgCreateSection{} }
 func (m *MsgCreateSection) String() string { return proto.CompactTextString(m) }
 func (*MsgCreateSection) ProtoMessage()    {}
 func (*MsgCreateSection) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{6}
+	return fileDescriptor_35d68359a074bdd9, []int{6}
 }
 func (m *MsgCreateSection) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -364,7 +364,7 @@ func (m *MsgCreateSectionResponse) Reset()         { *m = MsgCreateSectionRespon
 func (m *MsgCreateSectionResponse) String() string { return proto.CompactTextString(m) }
 func (*MsgCreateSectionResponse) ProtoMessage()    {}
 func (*MsgCreateSectionResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{7}
+	return fileDescriptor_35d68359a074bdd9, []int{7}
 }
 func (m *MsgCreateSectionResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -419,7 +419,7 @@ func (m *MsgEditSection) Reset()         { *m = MsgEditSection{} }
 func (m *MsgEditSection) String() string { return proto.CompactTextString(m) }
 func (*MsgEditSection) ProtoMessage()    {}
 func (*MsgEditSection) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{8}
+	return fileDescriptor_35d68359a074bdd9, []int{8}
 }
 func (m *MsgEditSection) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -491,7 +491,7 @@ func (m *MsgEditSectionResponse) Reset()         { *m = MsgEditSectionResponse{}
 func (m *MsgEditSectionResponse) String() string { return proto.CompactTextString(m) }
 func (*MsgEditSectionResponse) ProtoMessage()    {}
 func (*MsgEditSectionResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{9}
+	return fileDescriptor_35d68359a074bdd9, []int{9}
 }
 func (m *MsgEditSectionResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -537,7 +537,7 @@ func (m *MsgMoveSection) Reset()         { *m = MsgMoveSection{} }
 func (m *MsgMoveSection) String() string { return proto.CompactTextString(m) }
 func (*MsgMoveSection) ProtoMessage()    {}
 func (*MsgMoveSection) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{10}
+	return fileDescriptor_35d68359a074bdd9, []int{10}
 }
 func (m *MsgMoveSection) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -602,7 +602,7 @@ func (m *MsgMoveSectionResponse) Reset()         { *m = MsgMoveSectionResponse{}
 func (m *MsgMoveSectionResponse) String() string { return proto.CompactTextString(m) }
 func (*MsgMoveSectionResponse) ProtoMessage()    {}
 func (*MsgMoveSectionResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{11}
+	return fileDescriptor_35d68359a074bdd9, []int{11}
 }
 func (m *MsgMoveSectionResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -645,7 +645,7 @@ func (m *MsgDeleteSection) Reset()         { *m = MsgDeleteSection{} }
 func (m *MsgDeleteSection) String() string { return proto.CompactTextString(m) }
 func (*MsgDeleteSection) ProtoMessage()    {}
 func (*MsgDeleteSection) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{12}
+	return fileDescriptor_35d68359a074bdd9, []int{12}
 }
 func (m *MsgDeleteSection) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -703,7 +703,7 @@ func (m *MsgDeleteSectionResponse) Reset()         { *m = MsgDeleteSectionRespon
 func (m *MsgDeleteSectionResponse) String() string { return proto.CompactTextString(m) }
 func (*MsgDeleteSectionResponse) ProtoMessage()    {}
 func (*MsgDeleteSectionResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{13}
+	return fileDescriptor_35d68359a074bdd9, []int{13}
 }
 func (m *MsgDeleteSectionResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -744,15 +744,17 @@ type MsgCreateUserGroup struct {
 	Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty" yaml:"description"`
 	// Default permissions to be applied to the group
 	DefaultPermissions []string `protobuf:"bytes,5,rep,name=default_permissions,json=defaultPermissions,proto3" json:"default_permissions,omitempty" yaml:"default_permissions"`
+	// Initial members to be put inside the group
+	InitialMembers []string `protobuf:"bytes,6,rep,name=initial_members,json=initialMembers,proto3" json:"initial_members,omitempty" yaml:"initial_members"`
 	// Creator of the group
-	Creator string `protobuf:"bytes,6,opt,name=creator,proto3" json:"creator,omitempty" yaml:"creator"`
+	Creator string `protobuf:"bytes,7,opt,name=creator,proto3" json:"creator,omitempty" yaml:"creator"`
 }
 
 func (m *MsgCreateUserGroup) Reset()         { *m = MsgCreateUserGroup{} }
 func (m *MsgCreateUserGroup) String() string { return proto.CompactTextString(m) }
 func (*MsgCreateUserGroup) ProtoMessage()    {}
 func (*MsgCreateUserGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{14}
+	return fileDescriptor_35d68359a074bdd9, []int{14}
 }
 func (m *MsgCreateUserGroup) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -816,6 +818,13 @@ func (m *MsgCreateUserGroup) GetDefaultPermissions() []string {
 	return nil
 }
 
+func (m *MsgCreateUserGroup) GetInitialMembers() []string {
+	if m != nil {
+		return m.InitialMembers
+	}
+	return nil
+}
+
 func (m *MsgCreateUserGroup) GetCreator() string {
 	if m != nil {
 		return m.Creator
@@ -832,7 +841,7 @@ func (m *MsgCreateUserGroupResponse) Reset()         { *m = MsgCreateUserGroupRe
 func (m *MsgCreateUserGroupResponse) String() string { return proto.CompactTextString(m) }
 func (*MsgCreateUserGroupResponse) ProtoMessage()    {}
 func (*MsgCreateUserGroupResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{15}
+	return fileDescriptor_35d68359a074bdd9, []int{15}
 }
 func (m *MsgCreateUserGroupResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -886,7 +895,7 @@ func (m *MsgEditUserGroup) Reset()         { *m = MsgEditUserGroup{} }
 func (m *MsgEditUserGroup) String() string { return proto.CompactTextString(m) }
 func (*MsgEditUserGroup) ProtoMessage()    {}
 func (*MsgEditUserGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{16}
+	return fileDescriptor_35d68359a074bdd9, []int{16}
 }
 func (m *MsgEditUserGroup) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -958,7 +967,7 @@ func (m *MsgEditUserGroupResponse) Reset()         { *m = MsgEditUserGroupRespon
 func (m *MsgEditUserGroupResponse) String() string { return proto.CompactTextString(m) }
 func (*MsgEditUserGroupResponse) ProtoMessage()    {}
 func (*MsgEditUserGroupResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{17}
+	return fileDescriptor_35d68359a074bdd9, []int{17}
 }
 func (m *MsgEditUserGroupResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1004,7 +1013,7 @@ func (m *MsgMoveUserGroup) Reset()         { *m = MsgMoveUserGroup{} }
 func (m *MsgMoveUserGroup) String() string { return proto.CompactTextString(m) }
 func (*MsgMoveUserGroup) ProtoMessage()    {}
 func (*MsgMoveUserGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{18}
+	return fileDescriptor_35d68359a074bdd9, []int{18}
 }
 func (m *MsgMoveUserGroup) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1069,7 +1078,7 @@ func (m *MsgMoveUserGroupResponse) Reset()         { *m = MsgMoveUserGroupRespon
 func (m *MsgMoveUserGroupResponse) String() string { return proto.CompactTextString(m) }
 func (*MsgMoveUserGroupResponse) ProtoMessage()    {}
 func (*MsgMoveUserGroupResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{19}
+	return fileDescriptor_35d68359a074bdd9, []int{19}
 }
 func (m *MsgMoveUserGroupResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1115,7 +1124,7 @@ func (m *MsgSetUserGroupPermissions) Reset()         { *m = MsgSetUserGroupPermi
 func (m *MsgSetUserGroupPermissions) String() string { return proto.CompactTextString(m) }
 func (*MsgSetUserGroupPermissions) ProtoMessage()    {}
 func (*MsgSetUserGroupPermissions) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{20}
+	return fileDescriptor_35d68359a074bdd9, []int{20}
 }
 func (m *MsgSetUserGroupPermissions) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1181,7 +1190,7 @@ func (m *MsgSetUserGroupPermissionsResponse) Reset()         { *m = MsgSetUserGr
 func (m *MsgSetUserGroupPermissionsResponse) String() string { return proto.CompactTextString(m) }
 func (*MsgSetUserGroupPermissionsResponse) ProtoMessage()    {}
 func (*MsgSetUserGroupPermissionsResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{21}
+	return fileDescriptor_35d68359a074bdd9, []int{21}
 }
 func (m *MsgSetUserGroupPermissionsResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1224,7 +1233,7 @@ func (m *MsgDeleteUserGroup) Reset()         { *m = MsgDeleteUserGroup{} }
 func (m *MsgDeleteUserGroup) String() string { return proto.CompactTextString(m) }
 func (*MsgDeleteUserGroup) ProtoMessage()    {}
 func (*MsgDeleteUserGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{22}
+	return fileDescriptor_35d68359a074bdd9, []int{22}
 }
 func (m *MsgDeleteUserGroup) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1282,7 +1291,7 @@ func (m *MsgDeleteUserGroupResponse) Reset()         { *m = MsgDeleteUserGroupRe
 func (m *MsgDeleteUserGroupResponse) String() string { return proto.CompactTextString(m) }
 func (*MsgDeleteUserGroupResponse) ProtoMessage()    {}
 func (*MsgDeleteUserGroupResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{23}
+	return fileDescriptor_35d68359a074bdd9, []int{23}
 }
 func (m *MsgDeleteUserGroupResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1328,7 +1337,7 @@ func (m *MsgAddUserToUserGroup) Reset()         { *m = MsgAddUserToUserGroup{} }
 func (m *MsgAddUserToUserGroup) String() string { return proto.CompactTextString(m) }
 func (*MsgAddUserToUserGroup) ProtoMessage()    {}
 func (*MsgAddUserToUserGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{24}
+	return fileDescriptor_35d68359a074bdd9, []int{24}
 }
 func (m *MsgAddUserToUserGroup) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1394,7 +1403,7 @@ func (m *MsgAddUserToUserGroupResponse) Reset()         { *m = MsgAddUserToUserG
 func (m *MsgAddUserToUserGroupResponse) String() string { return proto.CompactTextString(m) }
 func (*MsgAddUserToUserGroupResponse) ProtoMessage()    {}
 func (*MsgAddUserToUserGroupResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{25}
+	return fileDescriptor_35d68359a074bdd9, []int{25}
 }
 func (m *MsgAddUserToUserGroupResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1440,7 +1449,7 @@ func (m *MsgRemoveUserFromUserGroup) Reset()         { *m = MsgRemoveUserFromUse
 func (m *MsgRemoveUserFromUserGroup) String() string { return proto.CompactTextString(m) }
 func (*MsgRemoveUserFromUserGroup) ProtoMessage()    {}
 func (*MsgRemoveUserFromUserGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{26}
+	return fileDescriptor_35d68359a074bdd9, []int{26}
 }
 func (m *MsgRemoveUserFromUserGroup) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1506,7 +1515,7 @@ func (m *MsgRemoveUserFromUserGroupResponse) Reset()         { *m = MsgRemoveUse
 func (m *MsgRemoveUserFromUserGroupResponse) String() string { return proto.CompactTextString(m) }
 func (*MsgRemoveUserFromUserGroupResponse) ProtoMessage()    {}
 func (*MsgRemoveUserFromUserGroupResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{27}
+	return fileDescriptor_35d68359a074bdd9, []int{27}
 }
 func (m *MsgRemoveUserFromUserGroupResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1554,7 +1563,7 @@ func (m *MsgSetUserPermissions) Reset()         { *m = MsgSetUserPermissions{} }
 func (m *MsgSetUserPermissions) String() string { return proto.CompactTextString(m) }
 func (*MsgSetUserPermissions) ProtoMessage()    {}
 func (*MsgSetUserPermissions) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{28}
+	return fileDescriptor_35d68359a074bdd9, []int{28}
 }
 func (m *MsgSetUserPermissions) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1627,7 +1636,7 @@ func (m *MsgSetUserPermissionsResponse) Reset()         { *m = MsgSetUserPermiss
 func (m *MsgSetUserPermissionsResponse) String() string { return proto.CompactTextString(m) }
 func (*MsgSetUserPermissionsResponse) ProtoMessage()    {}
 func (*MsgSetUserPermissionsResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d549e2340fbe3f45, []int{29}
+	return fileDescriptor_35d68359a074bdd9, []int{29}
 }
 func (m *MsgSetUserPermissionsResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1657,120 +1666,122 @@ func (m *MsgSetUserPermissionsResponse) XXX_DiscardUnknown() {
 var xxx_messageInfo_MsgSetUserPermissionsResponse proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterType((*MsgCreateSubspace)(nil), "desmos.subspaces.v2.MsgCreateSubspace")
-	proto.RegisterType((*MsgCreateSubspaceResponse)(nil), "desmos.subspaces.v2.MsgCreateSubspaceResponse")
-	proto.RegisterType((*MsgEditSubspace)(nil), "desmos.subspaces.v2.MsgEditSubspace")
-	proto.RegisterType((*MsgEditSubspaceResponse)(nil), "desmos.subspaces.v2.MsgEditSubspaceResponse")
-	proto.RegisterType((*MsgDeleteSubspace)(nil), "desmos.subspaces.v2.MsgDeleteSubspace")
-	proto.RegisterType((*MsgDeleteSubspaceResponse)(nil), "desmos.subspaces.v2.MsgDeleteSubspaceResponse")
-	proto.RegisterType((*MsgCreateSection)(nil), "desmos.subspaces.v2.MsgCreateSection")
-	proto.RegisterType((*MsgCreateSectionResponse)(nil), "desmos.subspaces.v2.MsgCreateSectionResponse")
-	proto.RegisterType((*MsgEditSection)(nil), "desmos.subspaces.v2.MsgEditSection")
-	proto.RegisterType((*MsgEditSectionResponse)(nil), "desmos.subspaces.v2.MsgEditSectionResponse")
-	proto.RegisterType((*MsgMoveSection)(nil), "desmos.subspaces.v2.MsgMoveSection")
-	proto.RegisterType((*MsgMoveSectionResponse)(nil), "desmos.subspaces.v2.MsgMoveSectionResponse")
-	proto.RegisterType((*MsgDeleteSection)(nil), "desmos.subspaces.v2.MsgDeleteSection")
-	proto.RegisterType((*MsgDeleteSectionResponse)(nil), "desmos.subspaces.v2.MsgDeleteSectionResponse")
-	proto.RegisterType((*MsgCreateUserGroup)(nil), "desmos.subspaces.v2.MsgCreateUserGroup")
-	proto.RegisterType((*MsgCreateUserGroupResponse)(nil), "desmos.subspaces.v2.MsgCreateUserGroupResponse")
-	proto.RegisterType((*MsgEditUserGroup)(nil), "desmos.subspaces.v2.MsgEditUserGroup")
-	proto.RegisterType((*MsgEditUserGroupResponse)(nil), "desmos.subspaces.v2.MsgEditUserGroupResponse")
-	proto.RegisterType((*MsgMoveUserGroup)(nil), "desmos.subspaces.v2.MsgMoveUserGroup")
-	proto.RegisterType((*MsgMoveUserGroupResponse)(nil), "desmos.subspaces.v2.MsgMoveUserGroupResponse")
-	proto.RegisterType((*MsgSetUserGroupPermissions)(nil), "desmos.subspaces.v2.MsgSetUserGroupPermissions")
-	proto.RegisterType((*MsgSetUserGroupPermissionsResponse)(nil), "desmos.subspaces.v2.MsgSetUserGroupPermissionsResponse")
-	proto.RegisterType((*MsgDeleteUserGroup)(nil), "desmos.subspaces.v2.MsgDeleteUserGroup")
-	proto.RegisterType((*MsgDeleteUserGroupResponse)(nil), "desmos.subspaces.v2.MsgDeleteUserGroupResponse")
-	proto.RegisterType((*MsgAddUserToUserGroup)(nil), "desmos.subspaces.v2.MsgAddUserToUserGroup")
-	proto.RegisterType((*MsgAddUserToUserGroupResponse)(nil), "desmos.subspaces.v2.MsgAddUserToUserGroupResponse")
-	proto.RegisterType((*MsgRemoveUserFromUserGroup)(nil), "desmos.subspaces.v2.MsgRemoveUserFromUserGroup")
-	proto.RegisterType((*MsgRemoveUserFromUserGroupResponse)(nil), "desmos.subspaces.v2.MsgRemoveUserFromUserGroupResponse")
-	proto.RegisterType((*MsgSetUserPermissions)(nil), "desmos.subspaces.v2.MsgSetUserPermissions")
-	proto.RegisterType((*MsgSetUserPermissionsResponse)(nil), "desmos.subspaces.v2.MsgSetUserPermissionsResponse")
-}
-
-func init() { proto.RegisterFile("desmos/subspaces/v2/msgs.proto", fileDescriptor_d549e2340fbe3f45) }
-
-var fileDescriptor_d549e2340fbe3f45 = []byte{
-	// 1243 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x99, 0x4d, 0x6f, 0xe3, 0x44,
-	0x18, 0xc7, 0x6b, 0x27, 0xe9, 0xcb, 0x93, 0xbe, 0xba, 0xfb, 0x92, 0x35, 0x10, 0x57, 0xb3, 0xed,
-	0x76, 0xbb, 0x6c, 0x13, 0x29, 0x20, 0xb1, 0xac, 0xc4, 0x61, 0xc3, 0x2e, 0xa8, 0x82, 0xee, 0xae,
-	0xbc, 0x20, 0x24, 0x24, 0x54, 0x25, 0xf5, 0xe0, 0x46, 0x34, 0x71, 0xe4, 0x71, 0x5a, 0x7a, 0xee,
-	0x85, 0x1b, 0x2b, 0x3e, 0x00, 0xda, 0x03, 0x9c, 0xf8, 0x14, 0x1c, 0x10, 0x1c, 0xf7, 0xc8, 0xc9,
-	0x42, 0xe9, 0x05, 0x0e, 0x70, 0xc8, 0x99, 0x03, 0xf2, 0x8c, 0x3d, 0x1e, 0x27, 0x71, 0x62, 0x57,
-	0x05, 0x02, 0x7b, 0x73, 0x66, 0xfe, 0x9e, 0x99, 0xe7, 0xf7, 0xbc, 0xcc, 0x8c, 0x03, 0x45, 0x03,
-	0x93, 0xa6, 0x45, 0xca, 0xa4, 0x53, 0x27, 0xed, 0xda, 0x3e, 0x26, 0xe5, 0xa3, 0x4a, 0xb9, 0x49,
-	0x4c, 0x52, 0x6a, 0xdb, 0x96, 0x63, 0x29, 0xab, 0xac, 0xbf, 0xc4, 0xfb, 0x4b, 0x47, 0x15, 0xf5,
-	0x92, 0x69, 0x99, 0x16, 0xed, 0x2f, 0x7b, 0x4f, 0x4c, 0xaa, 0xae, 0x0d, 0x1d, 0xca, 0x32, 0xf0,
-	0xa1, 0x3f, 0x18, 0x3a, 0x95, 0x61, 0x65, 0x97, 0x98, 0x6f, 0xdb, 0xb8, 0xe6, 0xe0, 0x27, 0xbe,
-	0x4c, 0xb9, 0x0e, 0xd9, 0x56, 0xad, 0x89, 0x0b, 0xd2, 0x9a, 0x74, 0x73, 0xae, 0xba, 0xd4, 0x73,
-	0xb5, 0xfc, 0x49, 0xad, 0x79, 0x78, 0x17, 0x79, 0xad, 0x48, 0xa7, 0x9d, 0xca, 0x1d, 0xc8, 0x1b,
-	0x98, 0xec, 0xdb, 0x8d, 0xb6, 0xd3, 0xb0, 0x5a, 0x05, 0x99, 0x6a, 0xaf, 0xf4, 0x5c, 0x4d, 0x61,
-	0x5a, 0xa1, 0x13, 0xe9, 0xa2, 0x54, 0x29, 0xc3, 0xac, 0x63, 0xe3, 0x1a, 0xe9, 0xd8, 0x27, 0x85,
-	0x0c, 0x7d, 0x6d, 0xb5, 0xe7, 0x6a, 0x4b, 0xec, 0xb5, 0xa0, 0x07, 0xe9, 0x5c, 0xa4, 0xdc, 0x80,
-	0x9c, 0x75, 0xdc, 0xc2, 0x76, 0x21, 0x4b, 0xd5, 0xcb, 0x3d, 0x57, 0x9b, 0x67, 0x6a, 0xda, 0x8c,
-	0x74, 0xd6, 0xad, 0xdc, 0x86, 0x99, 0x7d, 0xcf, 0x12, 0xcb, 0x2e, 0xe4, 0xa8, 0x52, 0xe9, 0xb9,
-	0xda, 0x22, 0x53, 0xfa, 0x1d, 0x48, 0x0f, 0x24, 0x77, 0x67, 0xbf, 0x78, 0xa6, 0x4d, 0xfd, 0xfa,
-	0x4c, 0x9b, 0x42, 0x75, 0xb8, 0x36, 0x00, 0x41, 0xc7, 0xa4, 0x6d, 0xb5, 0x08, 0x56, 0x1e, 0x40,
-	0x3e, 0xe0, 0xb7, 0xd7, 0x30, 0x28, 0x93, 0x6c, 0x75, 0xbd, 0xeb, 0x6a, 0x10, 0x48, 0x77, 0xee,
-	0x87, 0x56, 0x0b, 0x52, 0xa4, 0x43, 0xf0, 0x6b, 0xc7, 0x40, 0x3f, 0xc8, 0xb0, 0xb4, 0x4b, 0xcc,
-	0x07, 0x46, 0xc3, 0xe1, 0x9c, 0x2f, 0x66, 0x68, 0xee, 0x2e, 0x39, 0x85, 0xbb, 0x32, 0xe7, 0x73,
-	0x57, 0x36, 0x95, 0xbb, 0x72, 0xa3, 0xdd, 0xb5, 0x05, 0xd3, 0xa4, 0x61, 0x7a, 0xc2, 0x69, 0x2a,
-	0x5c, 0xe9, 0xb9, 0xda, 0x82, 0x6f, 0x2b, 0x6d, 0x47, 0xba, 0x2f, 0x10, 0x7c, 0x75, 0x0d, 0xae,
-	0xf6, 0x61, 0x0c, 0x3c, 0x85, 0xbe, 0x94, 0x68, 0x30, 0xdf, 0xc7, 0x87, 0x58, 0x08, 0xe6, 0x0b,
-	0x82, 0x1c, 0x2e, 0x56, 0x4e, 0xbe, 0xd8, 0x97, 0x68, 0x60, 0x45, 0x17, 0xc4, 0x97, 0xfb, 0xad,
-	0x0c, 0xcb, 0x61, 0xd8, 0xe1, 0x7d, 0x0a, 0xfb, 0xbf, 0x11, 0x12, 0x6f, 0xc1, 0x5c, 0xbb, 0x66,
-	0xe3, 0x96, 0xe3, 0xad, 0xd1, 0x8b, 0x89, 0x85, 0xea, 0x5a, 0xd7, 0xd5, 0x66, 0x1f, 0xd3, 0x46,
-	0xba, 0xc2, 0x65, 0x36, 0x06, 0x97, 0x21, 0x7d, 0x96, 0x3d, 0xef, 0x18, 0xe9, 0xf2, 0x14, 0x7d,
-	0x02, 0x85, 0x7e, 0x4c, 0x3c, 0x39, 0xef, 0x01, 0x10, 0xd6, 0x14, 0xd0, 0x5a, 0xa8, 0xa2, 0xae,
-	0xab, 0xcd, 0xf9, 0x42, 0xba, 0x94, 0x15, 0x1f, 0x16, 0x17, 0x22, 0x7d, 0xce, 0xff, 0xb1, 0x63,
-	0xa0, 0x6f, 0x64, 0x58, 0x0c, 0x22, 0xea, 0x62, 0x9d, 0x10, 0x5d, 0x9c, 0x7c, 0x8e, 0xc5, 0x71,
-	0x3f, 0x66, 0x52, 0xf8, 0x31, 0x9b, 0xdc, 0x8f, 0x5b, 0x30, 0x8d, 0x8d, 0x46, 0xe8, 0x07, 0x21,
-	0xa8, 0x59, 0x3b, 0xd2, 0x7d, 0x01, 0x2a, 0xc0, 0x95, 0x28, 0x25, 0x1e, 0xc7, 0x5f, 0x31, 0x80,
-	0xbb, 0xd6, 0x11, 0x9e, 0x3c, 0x80, 0xef, 0xc1, 0x42, 0x0b, 0x1f, 0xef, 0x85, 0xd1, 0x9a, 0xa1,
-	0xa3, 0x6c, 0x76, 0x5d, 0x2d, 0xff, 0x10, 0x1f, 0x0b, 0x01, 0x7b, 0xc9, 0x07, 0x2b, 0xaa, 0x91,
-	0x9e, 0x6f, 0x71, 0x91, 0x58, 0x03, 0xb2, 0x63, 0x6a, 0x80, 0x8f, 0x4b, 0x60, 0xc2, 0x71, 0xfd,
-	0x28, 0xd1, 0xb4, 0xf7, 0x8b, 0xc2, 0xc4, 0x01, 0x0b, 0x6d, 0xcc, 0x8c, 0xb3, 0x51, 0xa5, 0x89,
-	0x19, 0x31, 0x84, 0x5b, 0xf9, 0xa7, 0x0c, 0x0a, 0xcf, 0xda, 0x0f, 0x09, 0xb6, 0xdf, 0xb5, 0xad,
-	0x4e, 0xfb, 0xc5, 0xc9, 0xac, 0x47, 0xb0, 0x6a, 0xe0, 0x4f, 0x6b, 0x9d, 0x43, 0x67, 0xaf, 0x8d,
-	0xed, 0x66, 0x83, 0x90, 0x86, 0xd5, 0x22, 0x85, 0xdc, 0x5a, 0xe6, 0xe6, 0x5c, 0xb5, 0xd8, 0x73,
-	0x35, 0x35, 0x18, 0x61, 0x40, 0x84, 0x74, 0xc5, 0x6f, 0x7d, 0x1c, 0x36, 0x8a, 0x35, 0x73, 0x7a,
-	0x7c, 0xcd, 0xfc, 0x08, 0xd4, 0x41, 0xfa, 0xbc, 0x6a, 0xbe, 0x09, 0xb3, 0xa6, 0xd7, 0x10, 0xd6,
-	0xcc, 0x62, 0xd7, 0xd5, 0x66, 0xa8, 0x88, 0xa2, 0xf3, 0x37, 0xf7, 0x40, 0x84, 0xf4, 0x19, 0xfa,
-	0xb8, 0x63, 0xa0, 0xaf, 0xd9, 0xa6, 0xe5, 0xd5, 0x81, 0x0b, 0xf7, 0xaa, 0xb8, 0x2c, 0x39, 0xd5,
-	0xb2, 0xfe, 0x81, 0x3a, 0xe9, 0x27, 0x45, 0x2e, 0x59, 0x52, 0x44, 0xf8, 0xf0, 0xa4, 0x78, 0xca,
-	0xe0, 0x79, 0x55, 0x61, 0x92, 0xe0, 0x3d, 0x82, 0x45, 0xaf, 0xea, 0x09, 0x19, 0xc5, 0x8a, 0xe4,
-	0x56, 0xd7, 0xd5, 0xe6, 0x1f, 0xe2, 0x63, 0x31, 0xa9, 0x2e, 0x87, 0x55, 0x52, 0x4c, 0xac, 0xf9,
-	0x56, 0x28, 0x4b, 0x55, 0x27, 0x19, 0xae, 0x08, 0x11, 0x8e, 0xeb, 0x54, 0xa6, 0x51, 0xfc, 0x04,
-	0x87, 0x28, 0xc5, 0x8c, 0xf8, 0xf7, 0xc1, 0xdd, 0x81, 0xbc, 0x98, 0xdc, 0x19, 0x9a, 0xdc, 0x42,
-	0x40, 0x45, 0x92, 0x5a, 0x94, 0xa6, 0x21, 0xb4, 0x0e, 0x28, 0x1e, 0x02, 0x67, 0xf5, 0xbd, 0x44,
-	0xeb, 0x2d, 0x2b, 0xc6, 0x93, 0x14, 0x5c, 0x29, 0xf6, 0x93, 0x97, 0xa9, 0xbb, 0xfb, 0x4c, 0xe0,
-	0x16, 0xfe, 0x26, 0xc1, 0xe5, 0x5d, 0x62, 0xde, 0x33, 0x0c, 0xaf, 0xef, 0x03, 0x6b, 0xc2, 0xca,
-	0x4f, 0x87, 0x70, 0x13, 0x85, 0xf2, 0xe3, 0xb5, 0x22, 0x9d, 0x76, 0xa6, 0xf1, 0xb9, 0x06, 0xaf,
-	0x0c, 0x35, 0x95, 0xc3, 0xf8, 0x43, 0xa2, 0xac, 0x74, 0xdc, 0xf4, 0x33, 0xe7, 0x1d, 0xdb, 0x6a,
-	0xfe, 0x9f, 0x89, 0xb0, 0x2c, 0x88, 0xb1, 0x97, 0x63, 0xf9, 0x4e, 0xa6, 0x31, 0xe2, 0x27, 0xcb,
-	0xdf, 0x50, 0x2c, 0x2e, 0xe6, 0xe0, 0x31, 0x9e, 0x4c, 0x5f, 0x65, 0xc9, 0x9e, 0xa7, 0xb2, 0xe4,
-	0x92, 0x45, 0xd9, 0x20, 0xac, 0x00, 0x67, 0xe5, 0xf7, 0x79, 0xc8, 0xec, 0x12, 0x53, 0x39, 0x80,
-	0xc5, 0xbe, 0x2f, 0x44, 0x37, 0x4a, 0x43, 0xbe, 0x42, 0x95, 0x06, 0x3e, 0xa2, 0xa8, 0xa5, 0x64,
-	0x3a, 0x7e, 0x32, 0xa9, 0xc3, 0x7c, 0xe4, 0x0b, 0xc9, 0x7a, 0xdc, 0xfb, 0xa2, 0x4a, 0xbd, 0x9d,
-	0x44, 0xc5, 0xe7, 0x38, 0x80, 0xc5, 0xbe, 0x4f, 0x04, 0xb1, 0xd6, 0x44, 0x75, 0xf1, 0xd6, 0x0c,
-	0xbf, 0xe1, 0x2b, 0x18, 0x16, 0xa2, 0xb7, 0xfb, 0x8d, 0x31, 0x38, 0x98, 0x4c, 0xdd, 0x4e, 0x24,
-	0xe3, 0xd3, 0xec, 0x41, 0x5e, 0xbc, 0xbd, 0x5e, 0x1f, 0x49, 0xc3, 0x9f, 0xe2, 0xd5, 0x04, 0x22,
-	0x71, 0x02, 0xf1, 0x76, 0x17, 0x3b, 0x81, 0x20, 0x8a, 0x9f, 0x60, 0xc8, 0x9d, 0xc8, 0x03, 0x15,
-	0xbd, 0x0f, 0x6d, 0x8c, 0x21, 0x3d, 0x0e, 0xd4, 0xd0, 0x4b, 0x89, 0xf2, 0x19, 0x2c, 0xf5, 0x5f,
-	0x48, 0x36, 0x47, 0xa3, 0xe6, 0x42, 0xb5, 0x9c, 0x50, 0x28, 0xda, 0x14, 0x3d, 0x25, 0x6f, 0x8c,
-	0x42, 0x1e, 0x4e, 0xb4, 0x9d, 0x48, 0x26, 0x4e, 0x13, 0x3d, 0x4f, 0x6e, 0x8c, 0x02, 0x9f, 0x60,
-	0x9a, 0xa1, 0x67, 0x31, 0xe5, 0x54, 0x82, 0xab, 0x71, 0x07, 0xb1, 0x58, 0x34, 0x31, 0x2f, 0xa8,
-	0x6f, 0xa4, 0x7c, 0x41, 0x74, 0x60, 0xff, 0x09, 0x67, 0x73, 0x74, 0x08, 0x24, 0x70, 0x60, 0xcc,
-	0x81, 0x43, 0x71, 0x40, 0x19, 0x72, 0xd8, 0xb8, 0x15, 0x37, 0xcc, 0xa0, 0x56, 0xad, 0x24, 0xd7,
-	0x46, 0x40, 0xc7, 0x6d, 0xeb, 0xb1, 0x26, 0xc4, 0xbc, 0x10, 0x0f, 0x7a, 0xcc, 0x46, 0xea, 0xd9,
-	0x3e, 0x64, 0x13, 0xbd, 0x35, 0xc6, 0x6f, 0xa2, 0x8f, 0x2b, 0xc9, 0xb5, 0xc1, 0xac, 0xd5, 0xf7,
-	0x7f, 0xea, 0x16, 0xa5, 0xe7, 0xdd, 0xa2, 0xf4, 0x4b, 0xb7, 0x28, 0x3d, 0x3d, 0x2b, 0x4e, 0x3d,
-	0x3f, 0x2b, 0x4e, 0xfd, 0x7c, 0x56, 0x9c, 0xfa, 0xb8, 0x62, 0x36, 0x9c, 0x83, 0x4e, 0xbd, 0xb4,
-	0x6f, 0x35, 0xcb, 0x6c, 0xdc, 0xed, 0xc3, 0x5a, 0x9d, 0xf8, 0xcf, 0xe5, 0xa3, 0xd7, 0xcb, 0x9f,
-	0x0b, 0xff, 0x72, 0x38, 0x27, 0x6d, 0x4c, 0xea, 0xd3, 0xf4, 0x2f, 0x8e, 0xd7, 0xfe, 0x0a, 0x00,
-	0x00, 0xff, 0xff, 0x1f, 0x97, 0x4a, 0x64, 0x51, 0x19, 0x00, 0x00,
+	proto.RegisterType((*MsgCreateSubspace)(nil), "desmos.subspaces.v3.MsgCreateSubspace")
+	proto.RegisterType((*MsgCreateSubspaceResponse)(nil), "desmos.subspaces.v3.MsgCreateSubspaceResponse")
+	proto.RegisterType((*MsgEditSubspace)(nil), "desmos.subspaces.v3.MsgEditSubspace")
+	proto.RegisterType((*MsgEditSubspaceResponse)(nil), "desmos.subspaces.v3.MsgEditSubspaceResponse")
+	proto.RegisterType((*MsgDeleteSubspace)(nil), "desmos.subspaces.v3.MsgDeleteSubspace")
+	proto.RegisterType((*MsgDeleteSubspaceResponse)(nil), "desmos.subspaces.v3.MsgDeleteSubspaceResponse")
+	proto.RegisterType((*MsgCreateSection)(nil), "desmos.subspaces.v3.MsgCreateSection")
+	proto.RegisterType((*MsgCreateSectionResponse)(nil), "desmos.subspaces.v3.MsgCreateSectionResponse")
+	proto.RegisterType((*MsgEditSection)(nil), "desmos.subspaces.v3.MsgEditSection")
+	proto.RegisterType((*MsgEditSectionResponse)(nil), "desmos.subspaces.v3.MsgEditSectionResponse")
+	proto.RegisterType((*MsgMoveSection)(nil), "desmos.subspaces.v3.MsgMoveSection")
+	proto.RegisterType((*MsgMoveSectionResponse)(nil), "desmos.subspaces.v3.MsgMoveSectionResponse")
+	proto.RegisterType((*MsgDeleteSection)(nil), "desmos.subspaces.v3.MsgDeleteSection")
+	proto.RegisterType((*MsgDeleteSectionResponse)(nil), "desmos.subspaces.v3.MsgDeleteSectionResponse")
+	proto.RegisterType((*MsgCreateUserGroup)(nil), "desmos.subspaces.v3.MsgCreateUserGroup")
+	proto.RegisterType((*MsgCreateUserGroupResponse)(nil), "desmos.subspaces.v3.MsgCreateUserGroupResponse")
+	proto.RegisterType((*MsgEditUserGroup)(nil), "desmos.subspaces.v3.MsgEditUserGroup")
+	proto.RegisterType((*MsgEditUserGroupResponse)(nil), "desmos.subspaces.v3.MsgEditUserGroupResponse")
+	proto.RegisterType((*MsgMoveUserGroup)(nil), "desmos.subspaces.v3.MsgMoveUserGroup")
+	proto.RegisterType((*MsgMoveUserGroupResponse)(nil), "desmos.subspaces.v3.MsgMoveUserGroupResponse")
+	proto.RegisterType((*MsgSetUserGroupPermissions)(nil), "desmos.subspaces.v3.MsgSetUserGroupPermissions")
+	proto.RegisterType((*MsgSetUserGroupPermissionsResponse)(nil), "desmos.subspaces.v3.MsgSetUserGroupPermissionsResponse")
+	proto.RegisterType((*MsgDeleteUserGroup)(nil), "desmos.subspaces.v3.MsgDeleteUserGroup")
+	proto.RegisterType((*MsgDeleteUserGroupResponse)(nil), "desmos.subspaces.v3.MsgDeleteUserGroupResponse")
+	proto.RegisterType((*MsgAddUserToUserGroup)(nil), "desmos.subspaces.v3.MsgAddUserToUserGroup")
+	proto.RegisterType((*MsgAddUserToUserGroupResponse)(nil), "desmos.subspaces.v3.MsgAddUserToUserGroupResponse")
+	proto.RegisterType((*MsgRemoveUserFromUserGroup)(nil), "desmos.subspaces.v3.MsgRemoveUserFromUserGroup")
+	proto.RegisterType((*MsgRemoveUserFromUserGroupResponse)(nil), "desmos.subspaces.v3.MsgRemoveUserFromUserGroupResponse")
+	proto.RegisterType((*MsgSetUserPermissions)(nil), "desmos.subspaces.v3.MsgSetUserPermissions")
+	proto.RegisterType((*MsgSetUserPermissionsResponse)(nil), "desmos.subspaces.v3.MsgSetUserPermissionsResponse")
+}
+
+func init() { proto.RegisterFile("desmos/subspaces/v3/msgs.proto", fileDescriptor_35d68359a074bdd9) }
+
+var fileDescriptor_35d68359a074bdd9 = []byte{
+	// 1278 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x99, 0x4d, 0x6f, 0x1b, 0x45,
+	0x18, 0xc7, 0xb3, 0x6b, 0x3b, 0x2f, 0x8f, 0x13, 0x27, 0xd9, 0xb4, 0xa9, 0xbb, 0x80, 0x37, 0x9a,
+	0x26, 0x4d, 0x53, 0x1a, 0x5b, 0x4a, 0x90, 0x28, 0x95, 0x38, 0xd4, 0x6d, 0x41, 0x11, 0xb8, 0xad,
+	0xb6, 0x20, 0x24, 0x24, 0x14, 0xd9, 0xd9, 0xc1, 0x59, 0x61, 0x7b, 0xad, 0x9d, 0x75, 0x42, 0xce,
+	0xb9, 0x70, 0xa3, 0xe2, 0x03, 0xa0, 0x1e, 0xe0, 0xc4, 0xa7, 0xe0, 0x80, 0xe0, 0xd8, 0x23, 0xa7,
+	0x15, 0x72, 0x2e, 0x70, 0x80, 0x83, 0x3f, 0x01, 0xda, 0x99, 0xdd, 0xd9, 0x59, 0xdb, 0x6b, 0xaf,
+	0xa3, 0x00, 0x01, 0x6e, 0xeb, 0x99, 0xff, 0xce, 0xcc, 0xf3, 0x7b, 0x5e, 0x76, 0x66, 0x0c, 0x05,
+	0x03, 0x93, 0xa6, 0x45, 0x4a, 0xa4, 0x53, 0x23, 0xed, 0xea, 0x01, 0x26, 0xa5, 0xa3, 0xdd, 0x52,
+	0x93, 0xd4, 0x49, 0xb1, 0x6d, 0x5b, 0x8e, 0xa5, 0xac, 0xb0, 0xfe, 0x22, 0xef, 0x2f, 0x1e, 0xed,
+	0xaa, 0x57, 0xea, 0x56, 0xdd, 0xa2, 0xfd, 0x25, 0xef, 0x89, 0x49, 0xd5, 0xb5, 0xa1, 0x43, 0x59,
+	0x06, 0x6e, 0xf8, 0x83, 0xa1, 0x53, 0x19, 0x96, 0x2b, 0xa4, 0xfe, 0xc0, 0xc6, 0x55, 0x07, 0x3f,
+	0xf3, 0x65, 0xca, 0x0d, 0x48, 0xb7, 0xaa, 0x4d, 0x9c, 0x97, 0xd6, 0xa4, 0x5b, 0x73, 0xe5, 0xc5,
+	0x9e, 0xab, 0x65, 0x4f, 0xaa, 0xcd, 0xc6, 0x3d, 0xe4, 0xb5, 0x22, 0x9d, 0x76, 0x2a, 0x77, 0x21,
+	0x6b, 0x60, 0x72, 0x60, 0x9b, 0x6d, 0xc7, 0xb4, 0x5a, 0x79, 0x99, 0x6a, 0x57, 0x7b, 0xae, 0xa6,
+	0x30, 0xad, 0xd0, 0x89, 0x74, 0x51, 0xaa, 0x94, 0x60, 0xd6, 0xb1, 0x71, 0x95, 0x74, 0xec, 0x93,
+	0x7c, 0x8a, 0xbe, 0xb6, 0xd2, 0x73, 0xb5, 0x45, 0xf6, 0x5a, 0xd0, 0x83, 0x74, 0x2e, 0x52, 0x6e,
+	0x42, 0xc6, 0x3a, 0x6e, 0x61, 0x3b, 0x9f, 0xa6, 0xea, 0xa5, 0x9e, 0xab, 0xcd, 0x33, 0x35, 0x6d,
+	0x46, 0x3a, 0xeb, 0x56, 0xee, 0xc0, 0xcc, 0x81, 0x67, 0x89, 0x65, 0xe7, 0x33, 0x54, 0xa9, 0xf4,
+	0x5c, 0x2d, 0xc7, 0x94, 0x7e, 0x07, 0xd2, 0x03, 0xc9, 0xbd, 0xd9, 0x2f, 0x5e, 0x68, 0x53, 0xbf,
+	0xbe, 0xd0, 0xa6, 0x50, 0x0d, 0xae, 0x0f, 0x40, 0xd0, 0x31, 0x69, 0x5b, 0x2d, 0x82, 0x95, 0x47,
+	0x90, 0x0d, 0xf8, 0xed, 0x9b, 0x06, 0x65, 0x92, 0x2e, 0xaf, 0x77, 0x5d, 0x0d, 0x02, 0xe9, 0xde,
+	0xc3, 0xd0, 0x6a, 0x41, 0x8a, 0x74, 0x08, 0x7e, 0xed, 0x19, 0xe8, 0x07, 0x19, 0x16, 0x2b, 0xa4,
+	0xfe, 0xc8, 0x30, 0x1d, 0xce, 0xf9, 0x62, 0x86, 0xe6, 0xee, 0x92, 0x27, 0x70, 0x57, 0xea, 0x7c,
+	0xee, 0x4a, 0x4f, 0xe4, 0xae, 0xcc, 0x68, 0x77, 0x6d, 0xc1, 0x34, 0x31, 0xeb, 0x9e, 0x70, 0x9a,
+	0x0a, 0x97, 0x7b, 0xae, 0xb6, 0xe0, 0xdb, 0x4a, 0xdb, 0x91, 0xee, 0x0b, 0x04, 0x5f, 0x5d, 0x87,
+	0x6b, 0x7d, 0x18, 0x03, 0x4f, 0xa1, 0x2f, 0x25, 0x1a, 0xcc, 0x0f, 0x71, 0x03, 0x0b, 0xc1, 0x7c,
+	0x41, 0x90, 0xc3, 0xc5, 0xca, 0xc9, 0x17, 0xfb, 0x0a, 0x0d, 0xac, 0xe8, 0x82, 0xf8, 0x72, 0xbf,
+	0x95, 0x61, 0x29, 0x0c, 0x3b, 0x7c, 0x40, 0x61, 0xff, 0x3b, 0x42, 0xe2, 0x6d, 0x98, 0x6b, 0x57,
+	0x6d, 0xdc, 0x72, 0xbc, 0x35, 0x7a, 0x31, 0xb1, 0x50, 0x5e, 0xeb, 0xba, 0xda, 0xec, 0x53, 0xda,
+	0x48, 0x57, 0xb8, 0xc4, 0xc6, 0xe0, 0x32, 0xa4, 0xcf, 0xb2, 0xe7, 0x3d, 0x63, 0xb2, 0x3c, 0x45,
+	0x9f, 0x40, 0xbe, 0x1f, 0x13, 0x4f, 0xce, 0xfb, 0x00, 0x84, 0x35, 0x05, 0xb4, 0x16, 0xca, 0xa8,
+	0xeb, 0x6a, 0x73, 0xbe, 0x90, 0x2e, 0x65, 0xd9, 0x87, 0xc5, 0x85, 0x48, 0x9f, 0xf3, 0x7f, 0xec,
+	0x19, 0xe8, 0x1b, 0x19, 0x72, 0x41, 0x44, 0x5d, 0xac, 0x13, 0xa2, 0x8b, 0x93, 0xcf, 0xb1, 0x38,
+	0xee, 0xc7, 0xd4, 0x04, 0x7e, 0x4c, 0x27, 0xf7, 0xe3, 0x16, 0x4c, 0x63, 0xc3, 0x0c, 0xfd, 0x20,
+	0x04, 0x35, 0x6b, 0x47, 0xba, 0x2f, 0x40, 0x79, 0x58, 0x8d, 0x52, 0xe2, 0x71, 0xfc, 0x15, 0x03,
+	0x58, 0xb1, 0x8e, 0xf0, 0xe5, 0x03, 0xf8, 0x1e, 0x2c, 0xb4, 0xf0, 0xf1, 0x7e, 0x18, 0xad, 0x29,
+	0x3a, 0xca, 0x66, 0xd7, 0xd5, 0xb2, 0x8f, 0xf1, 0xb1, 0x10, 0xb0, 0x57, 0x7c, 0xb0, 0xa2, 0x1a,
+	0xe9, 0xd9, 0x16, 0x17, 0x89, 0x35, 0x20, 0x3d, 0xa6, 0x06, 0xf8, 0xb8, 0x04, 0x26, 0x1c, 0xd7,
+	0x8f, 0x12, 0x4d, 0x7b, 0xbf, 0x28, 0x5c, 0x3a, 0x60, 0xa1, 0x8d, 0xa9, 0x71, 0x36, 0xaa, 0x34,
+	0x31, 0x23, 0x86, 0x70, 0x2b, 0xbf, 0x4f, 0x81, 0xc2, 0xb3, 0xf6, 0x43, 0x82, 0xed, 0x77, 0x6d,
+	0xab, 0xd3, 0xfe, 0xff, 0x64, 0xd6, 0x13, 0x58, 0x31, 0xf0, 0xa7, 0xd5, 0x4e, 0xc3, 0xd9, 0x6f,
+	0x63, 0xbb, 0x69, 0x12, 0x62, 0x5a, 0x2d, 0x92, 0xcf, 0xac, 0xa5, 0x6e, 0xcd, 0x95, 0x0b, 0x3d,
+	0x57, 0x53, 0x83, 0x11, 0x06, 0x44, 0x48, 0x57, 0xfc, 0xd6, 0xa7, 0x61, 0xa3, 0xf2, 0x00, 0x16,
+	0xcd, 0x96, 0xe9, 0x98, 0xd5, 0xc6, 0x7e, 0x13, 0x37, 0x6b, 0xd8, 0x26, 0xf9, 0x69, 0x3a, 0x98,
+	0xda, 0x73, 0xb5, 0x55, 0x36, 0x58, 0x9f, 0x00, 0xe9, 0x39, 0xbf, 0xa5, 0xc2, 0x1a, 0xc4, 0xc2,
+	0x3b, 0x33, 0xbe, 0xf0, 0x7e, 0x04, 0xea, 0xa0, 0x0b, 0x79, 0xe9, 0x7d, 0x0b, 0x66, 0xeb, 0x5e,
+	0x43, 0x58, 0x78, 0x0b, 0x5d, 0x57, 0x9b, 0xa1, 0x22, 0xca, 0xdf, 0xdf, 0x21, 0x04, 0x22, 0xa4,
+	0xcf, 0xd0, 0xc7, 0x3d, 0x03, 0x7d, 0xcd, 0xbe, 0x7c, 0x5e, 0x31, 0xb9, 0xf0, 0xd0, 0x10, 0x97,
+	0x25, 0x4f, 0xb4, 0xac, 0xbf, 0xa1, 0xd8, 0xfa, 0x99, 0x95, 0x49, 0x96, 0x59, 0x11, 0x3e, 0x3c,
+	0xb3, 0x9e, 0x33, 0x78, 0x5e, 0x69, 0xb9, 0x4c, 0xf0, 0x9e, 0x40, 0xce, 0x2b, 0x9d, 0x42, 0x5a,
+	0xb2, 0x4a, 0xbb, 0xd5, 0x75, 0xb5, 0xf9, 0xc7, 0xf8, 0x58, 0xcc, 0xcc, 0xab, 0x61, 0xa9, 0x15,
+	0xb3, 0x73, 0xbe, 0x15, 0xca, 0x26, 0x2a, 0xb6, 0x0c, 0x57, 0x84, 0x08, 0xc7, 0x75, 0x2a, 0xd3,
+	0x28, 0x7e, 0x86, 0x43, 0x94, 0x62, 0x5a, 0xfd, 0xf3, 0xe0, 0xee, 0x42, 0x56, 0xac, 0x10, 0x29,
+	0x9a, 0xd4, 0x42, 0x40, 0x45, 0x2a, 0x83, 0x28, 0x9d, 0x84, 0xd0, 0x3a, 0xa0, 0x78, 0x08, 0x61,
+	0xd1, 0x96, 0x68, 0xd1, 0x66, 0x15, 0xfd, 0x32, 0x05, 0xd7, 0x04, 0x1f, 0xa5, 0x57, 0xa9, 0xbb,
+	0xfb, 0x4c, 0xe0, 0x16, 0xfe, 0x26, 0xc1, 0xd5, 0x0a, 0xa9, 0xdf, 0x37, 0x0c, 0xaf, 0xef, 0x03,
+	0xeb, 0x92, 0x95, 0x9f, 0x0e, 0xe1, 0x26, 0x0a, 0xe5, 0xc7, 0x6b, 0x45, 0x3a, 0xed, 0x9c, 0xc4,
+	0xe7, 0x1a, 0xbc, 0x36, 0xd4, 0x54, 0x0e, 0xe3, 0x0f, 0x89, 0xb2, 0xd2, 0x71, 0xd3, 0xcf, 0x9c,
+	0x77, 0x6c, 0xab, 0xf9, 0x5f, 0x26, 0xc2, 0xb2, 0x20, 0xc6, 0x5e, 0x8e, 0xe5, 0x3b, 0x99, 0xc6,
+	0x88, 0x9f, 0x2c, 0x7f, 0x41, 0xb1, 0xb8, 0x98, 0xdd, 0xcb, 0x78, 0x32, 0x7d, 0x95, 0x25, 0x7d,
+	0x9e, 0xca, 0x92, 0x49, 0x16, 0x65, 0x83, 0xb0, 0x02, 0x9c, 0x3b, 0xbf, 0xcf, 0x43, 0xaa, 0x42,
+	0xea, 0xca, 0x21, 0xe4, 0xfa, 0xae, 0x99, 0x6e, 0x16, 0x87, 0x5c, 0x65, 0x15, 0x07, 0x6e, 0x62,
+	0xd4, 0x62, 0x32, 0x1d, 0xdf, 0x99, 0xd4, 0x60, 0x3e, 0x72, 0xcd, 0xb2, 0x1e, 0xf7, 0xbe, 0xa8,
+	0x52, 0xef, 0x24, 0x51, 0xf1, 0x39, 0x0e, 0x21, 0xd7, 0x77, 0xcf, 0x10, 0x6b, 0x4d, 0x54, 0x17,
+	0x6f, 0xcd, 0xf0, 0x6b, 0x02, 0x05, 0xc3, 0x42, 0xf4, 0x8a, 0x60, 0x63, 0x0c, 0x0e, 0x26, 0x53,
+	0xb7, 0x13, 0xc9, 0xf8, 0x34, 0xfb, 0x90, 0x15, 0x8f, 0xc0, 0x37, 0x46, 0xd2, 0xf0, 0xa7, 0x78,
+	0x3d, 0x81, 0x48, 0x9c, 0x40, 0x3c, 0x22, 0xc6, 0x4e, 0x20, 0x88, 0xe2, 0x27, 0x18, 0x72, 0xb0,
+	0xf2, 0x40, 0x45, 0x0f, 0x55, 0x1b, 0x63, 0x48, 0x8f, 0x03, 0x35, 0xf4, 0x64, 0xa3, 0x7c, 0x06,
+	0x8b, 0xfd, 0xa7, 0x9a, 0xcd, 0xd1, 0xa8, 0xb9, 0x50, 0x2d, 0x25, 0x14, 0x8a, 0x36, 0x45, 0x77,
+	0xc9, 0x1b, 0xa3, 0x90, 0x87, 0x13, 0x6d, 0x27, 0x92, 0x89, 0xd3, 0x44, 0xf7, 0x93, 0x1b, 0xa3,
+	0xc0, 0x27, 0x98, 0x66, 0xe8, 0x5e, 0x4c, 0x39, 0x95, 0xe0, 0x5a, 0xdc, 0x46, 0x2c, 0x16, 0x4d,
+	0xcc, 0x0b, 0xea, 0x9b, 0x13, 0xbe, 0x20, 0x3a, 0xb0, 0x7f, 0x87, 0xb3, 0x39, 0x3a, 0x04, 0x12,
+	0x38, 0x30, 0x66, 0xc3, 0xa1, 0x38, 0xa0, 0x0c, 0xd9, 0x6c, 0xdc, 0x8e, 0x1b, 0x66, 0x50, 0xab,
+	0xee, 0x24, 0xd7, 0x46, 0x40, 0xc7, 0x7d, 0xd6, 0x63, 0x4d, 0x88, 0x79, 0x21, 0x1e, 0xf4, 0x98,
+	0x0f, 0xa9, 0x67, 0xfb, 0x90, 0x8f, 0xe8, 0xed, 0x31, 0x7e, 0x13, 0x7d, 0xbc, 0x93, 0x5c, 0x1b,
+	0xcc, 0x5a, 0x7e, 0xff, 0xa7, 0x6e, 0x41, 0x7a, 0xd9, 0x2d, 0x48, 0xbf, 0x74, 0x0b, 0xd2, 0xf3,
+	0xb3, 0xc2, 0xd4, 0xcb, 0xb3, 0xc2, 0xd4, 0xcf, 0x67, 0x85, 0xa9, 0x8f, 0x77, 0xea, 0xa6, 0x73,
+	0xd8, 0xa9, 0x15, 0x0f, 0xac, 0x66, 0x89, 0x8d, 0xbb, 0xdd, 0xa8, 0xd6, 0x88, 0xff, 0x5c, 0x3a,
+	0x7a, 0xa3, 0xf4, 0xb9, 0xf0, 0x57, 0x89, 0x73, 0xd2, 0xc6, 0xa4, 0x36, 0x4d, 0xff, 0x27, 0xd9,
+	0xfd, 0x33, 0x00, 0x00, 0xff, 0xff, 0x6b, 0x3f, 0x89, 0x0a, 0x96, 0x19, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -1828,7 +1839,7 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient {
 
 func (c *msgClient) CreateSubspace(ctx context.Context, in *MsgCreateSubspace, opts ...grpc.CallOption) (*MsgCreateSubspaceResponse, error) {
 	out := new(MsgCreateSubspaceResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Msg/CreateSubspace", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Msg/CreateSubspace", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1837,7 +1848,7 @@ func (c *msgClient) CreateSubspace(ctx context.Context, in *MsgCreateSubspace, o
 
 func (c *msgClient) EditSubspace(ctx context.Context, in *MsgEditSubspace, opts ...grpc.CallOption) (*MsgEditSubspaceResponse, error) {
 	out := new(MsgEditSubspaceResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Msg/EditSubspace", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Msg/EditSubspace", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1846,7 +1857,7 @@ func (c *msgClient) EditSubspace(ctx context.Context, in *MsgEditSubspace, opts
 
 func (c *msgClient) DeleteSubspace(ctx context.Context, in *MsgDeleteSubspace, opts ...grpc.CallOption) (*MsgDeleteSubspaceResponse, error) {
 	out := new(MsgDeleteSubspaceResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Msg/DeleteSubspace", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Msg/DeleteSubspace", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1855,7 +1866,7 @@ func (c *msgClient) DeleteSubspace(ctx context.Context, in *MsgDeleteSubspace, o
 
 func (c *msgClient) CreateSection(ctx context.Context, in *MsgCreateSection, opts ...grpc.CallOption) (*MsgCreateSectionResponse, error) {
 	out := new(MsgCreateSectionResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Msg/CreateSection", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Msg/CreateSection", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1864,7 +1875,7 @@ func (c *msgClient) CreateSection(ctx context.Context, in *MsgCreateSection, opt
 
 func (c *msgClient) EditSection(ctx context.Context, in *MsgEditSection, opts ...grpc.CallOption) (*MsgEditSectionResponse, error) {
 	out := new(MsgEditSectionResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Msg/EditSection", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Msg/EditSection", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1873,7 +1884,7 @@ func (c *msgClient) EditSection(ctx context.Context, in *MsgEditSection, opts ..
 
 func (c *msgClient) MoveSection(ctx context.Context, in *MsgMoveSection, opts ...grpc.CallOption) (*MsgMoveSectionResponse, error) {
 	out := new(MsgMoveSectionResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Msg/MoveSection", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Msg/MoveSection", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1882,7 +1893,7 @@ func (c *msgClient) MoveSection(ctx context.Context, in *MsgMoveSection, opts ..
 
 func (c *msgClient) DeleteSection(ctx context.Context, in *MsgDeleteSection, opts ...grpc.CallOption) (*MsgDeleteSectionResponse, error) {
 	out := new(MsgDeleteSectionResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Msg/DeleteSection", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Msg/DeleteSection", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1891,7 +1902,7 @@ func (c *msgClient) DeleteSection(ctx context.Context, in *MsgDeleteSection, opt
 
 func (c *msgClient) CreateUserGroup(ctx context.Context, in *MsgCreateUserGroup, opts ...grpc.CallOption) (*MsgCreateUserGroupResponse, error) {
 	out := new(MsgCreateUserGroupResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Msg/CreateUserGroup", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Msg/CreateUserGroup", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1900,7 +1911,7 @@ func (c *msgClient) CreateUserGroup(ctx context.Context, in *MsgCreateUserGroup,
 
 func (c *msgClient) EditUserGroup(ctx context.Context, in *MsgEditUserGroup, opts ...grpc.CallOption) (*MsgEditUserGroupResponse, error) {
 	out := new(MsgEditUserGroupResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Msg/EditUserGroup", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Msg/EditUserGroup", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1909,7 +1920,7 @@ func (c *msgClient) EditUserGroup(ctx context.Context, in *MsgEditUserGroup, opt
 
 func (c *msgClient) MoveUserGroup(ctx context.Context, in *MsgMoveUserGroup, opts ...grpc.CallOption) (*MsgMoveUserGroupResponse, error) {
 	out := new(MsgMoveUserGroupResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Msg/MoveUserGroup", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Msg/MoveUserGroup", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1918,7 +1929,7 @@ func (c *msgClient) MoveUserGroup(ctx context.Context, in *MsgMoveUserGroup, opt
 
 func (c *msgClient) SetUserGroupPermissions(ctx context.Context, in *MsgSetUserGroupPermissions, opts ...grpc.CallOption) (*MsgSetUserGroupPermissionsResponse, error) {
 	out := new(MsgSetUserGroupPermissionsResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Msg/SetUserGroupPermissions", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Msg/SetUserGroupPermissions", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1927,7 +1938,7 @@ func (c *msgClient) SetUserGroupPermissions(ctx context.Context, in *MsgSetUserG
 
 func (c *msgClient) DeleteUserGroup(ctx context.Context, in *MsgDeleteUserGroup, opts ...grpc.CallOption) (*MsgDeleteUserGroupResponse, error) {
 	out := new(MsgDeleteUserGroupResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Msg/DeleteUserGroup", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Msg/DeleteUserGroup", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1936,7 +1947,7 @@ func (c *msgClient) DeleteUserGroup(ctx context.Context, in *MsgDeleteUserGroup,
 
 func (c *msgClient) AddUserToUserGroup(ctx context.Context, in *MsgAddUserToUserGroup, opts ...grpc.CallOption) (*MsgAddUserToUserGroupResponse, error) {
 	out := new(MsgAddUserToUserGroupResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Msg/AddUserToUserGroup", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Msg/AddUserToUserGroup", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1945,7 +1956,7 @@ func (c *msgClient) AddUserToUserGroup(ctx context.Context, in *MsgAddUserToUser
 
 func (c *msgClient) RemoveUserFromUserGroup(ctx context.Context, in *MsgRemoveUserFromUserGroup, opts ...grpc.CallOption) (*MsgRemoveUserFromUserGroupResponse, error) {
 	out := new(MsgRemoveUserFromUserGroupResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Msg/RemoveUserFromUserGroup", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Msg/RemoveUserFromUserGroup", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1954,7 +1965,7 @@ func (c *msgClient) RemoveUserFromUserGroup(ctx context.Context, in *MsgRemoveUs
 
 func (c *msgClient) SetUserPermissions(ctx context.Context, in *MsgSetUserPermissions, opts ...grpc.CallOption) (*MsgSetUserPermissionsResponse, error) {
 	out := new(MsgSetUserPermissionsResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Msg/SetUserPermissions", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Msg/SetUserPermissions", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -2060,7 +2071,7 @@ func _Msg_CreateSubspace_Handler(srv interface{}, ctx context.Context, dec func(
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Msg/CreateSubspace",
+		FullMethod: "/desmos.subspaces.v3.Msg/CreateSubspace",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MsgServer).CreateSubspace(ctx, req.(*MsgCreateSubspace))
@@ -2078,7 +2089,7 @@ func _Msg_EditSubspace_Handler(srv interface{}, ctx context.Context, dec func(in
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Msg/EditSubspace",
+		FullMethod: "/desmos.subspaces.v3.Msg/EditSubspace",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MsgServer).EditSubspace(ctx, req.(*MsgEditSubspace))
@@ -2096,7 +2107,7 @@ func _Msg_DeleteSubspace_Handler(srv interface{}, ctx context.Context, dec func(
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Msg/DeleteSubspace",
+		FullMethod: "/desmos.subspaces.v3.Msg/DeleteSubspace",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MsgServer).DeleteSubspace(ctx, req.(*MsgDeleteSubspace))
@@ -2114,7 +2125,7 @@ func _Msg_CreateSection_Handler(srv interface{}, ctx context.Context, dec func(i
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Msg/CreateSection",
+		FullMethod: "/desmos.subspaces.v3.Msg/CreateSection",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MsgServer).CreateSection(ctx, req.(*MsgCreateSection))
@@ -2132,7 +2143,7 @@ func _Msg_EditSection_Handler(srv interface{}, ctx context.Context, dec func(int
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Msg/EditSection",
+		FullMethod: "/desmos.subspaces.v3.Msg/EditSection",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MsgServer).EditSection(ctx, req.(*MsgEditSection))
@@ -2150,7 +2161,7 @@ func _Msg_MoveSection_Handler(srv interface{}, ctx context.Context, dec func(int
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Msg/MoveSection",
+		FullMethod: "/desmos.subspaces.v3.Msg/MoveSection",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MsgServer).MoveSection(ctx, req.(*MsgMoveSection))
@@ -2168,7 +2179,7 @@ func _Msg_DeleteSection_Handler(srv interface{}, ctx context.Context, dec func(i
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Msg/DeleteSection",
+		FullMethod: "/desmos.subspaces.v3.Msg/DeleteSection",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MsgServer).DeleteSection(ctx, req.(*MsgDeleteSection))
@@ -2186,7 +2197,7 @@ func _Msg_CreateUserGroup_Handler(srv interface{}, ctx context.Context, dec func
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Msg/CreateUserGroup",
+		FullMethod: "/desmos.subspaces.v3.Msg/CreateUserGroup",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MsgServer).CreateUserGroup(ctx, req.(*MsgCreateUserGroup))
@@ -2204,7 +2215,7 @@ func _Msg_EditUserGroup_Handler(srv interface{}, ctx context.Context, dec func(i
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Msg/EditUserGroup",
+		FullMethod: "/desmos.subspaces.v3.Msg/EditUserGroup",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MsgServer).EditUserGroup(ctx, req.(*MsgEditUserGroup))
@@ -2222,7 +2233,7 @@ func _Msg_MoveUserGroup_Handler(srv interface{}, ctx context.Context, dec func(i
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Msg/MoveUserGroup",
+		FullMethod: "/desmos.subspaces.v3.Msg/MoveUserGroup",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MsgServer).MoveUserGroup(ctx, req.(*MsgMoveUserGroup))
@@ -2240,7 +2251,7 @@ func _Msg_SetUserGroupPermissions_Handler(srv interface{}, ctx context.Context,
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Msg/SetUserGroupPermissions",
+		FullMethod: "/desmos.subspaces.v3.Msg/SetUserGroupPermissions",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MsgServer).SetUserGroupPermissions(ctx, req.(*MsgSetUserGroupPermissions))
@@ -2258,7 +2269,7 @@ func _Msg_DeleteUserGroup_Handler(srv interface{}, ctx context.Context, dec func
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Msg/DeleteUserGroup",
+		FullMethod: "/desmos.subspaces.v3.Msg/DeleteUserGroup",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MsgServer).DeleteUserGroup(ctx, req.(*MsgDeleteUserGroup))
@@ -2276,7 +2287,7 @@ func _Msg_AddUserToUserGroup_Handler(srv interface{}, ctx context.Context, dec f
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Msg/AddUserToUserGroup",
+		FullMethod: "/desmos.subspaces.v3.Msg/AddUserToUserGroup",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MsgServer).AddUserToUserGroup(ctx, req.(*MsgAddUserToUserGroup))
@@ -2294,7 +2305,7 @@ func _Msg_RemoveUserFromUserGroup_Handler(srv interface{}, ctx context.Context,
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Msg/RemoveUserFromUserGroup",
+		FullMethod: "/desmos.subspaces.v3.Msg/RemoveUserFromUserGroup",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MsgServer).RemoveUserFromUserGroup(ctx, req.(*MsgRemoveUserFromUserGroup))
@@ -2312,7 +2323,7 @@ func _Msg_SetUserPermissions_Handler(srv interface{}, ctx context.Context, dec f
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Msg/SetUserPermissions",
+		FullMethod: "/desmos.subspaces.v3.Msg/SetUserPermissions",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MsgServer).SetUserPermissions(ctx, req.(*MsgSetUserPermissions))
@@ -2321,7 +2332,7 @@ func _Msg_SetUserPermissions_Handler(srv interface{}, ctx context.Context, dec f
 }
 
 var _Msg_serviceDesc = grpc.ServiceDesc{
-	ServiceName: "desmos.subspaces.v2.Msg",
+	ServiceName: "desmos.subspaces.v3.Msg",
 	HandlerType: (*MsgServer)(nil),
 	Methods: []grpc.MethodDesc{
 		{
@@ -2386,7 +2397,7 @@ var _Msg_serviceDesc = grpc.ServiceDesc{
 		},
 	},
 	Streams:  []grpc.StreamDesc{},
-	Metadata: "desmos/subspaces/v2/msgs.proto",
+	Metadata: "desmos/subspaces/v3/msgs.proto",
 }
 
 func (m *MsgCreateSubspace) Marshal() (dAtA []byte, err error) {
@@ -2934,7 +2945,16 @@ func (m *MsgCreateUserGroup) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 		copy(dAtA[i:], m.Creator)
 		i = encodeVarintMsgs(dAtA, i, uint64(len(m.Creator)))
 		i--
-		dAtA[i] = 0x32
+		dAtA[i] = 0x3a
+	}
+	if len(m.InitialMembers) > 0 {
+		for iNdEx := len(m.InitialMembers) - 1; iNdEx >= 0; iNdEx-- {
+			i -= len(m.InitialMembers[iNdEx])
+			copy(dAtA[i:], m.InitialMembers[iNdEx])
+			i = encodeVarintMsgs(dAtA, i, uint64(len(m.InitialMembers[iNdEx])))
+			i--
+			dAtA[i] = 0x32
+		}
 	}
 	if len(m.DefaultPermissions) > 0 {
 		for iNdEx := len(m.DefaultPermissions) - 1; iNdEx >= 0; iNdEx-- {
@@ -3777,6 +3797,12 @@ func (m *MsgCreateUserGroup) Size() (n int) {
 			n += 1 + l + sovMsgs(uint64(l))
 		}
 	}
+	if len(m.InitialMembers) > 0 {
+		for _, s := range m.InitialMembers {
+			l = len(s)
+			n += 1 + l + sovMsgs(uint64(l))
+		}
+	}
 	l = len(m.Creator)
 	if l > 0 {
 		n += 1 + l + sovMsgs(uint64(l))
@@ -5752,6 +5778,38 @@ func (m *MsgCreateUserGroup) Unmarshal(dAtA []byte) error {
 			m.DefaultPermissions = append(m.DefaultPermissions, string(dAtA[iNdEx:postIndex]))
 			iNdEx = postIndex
 		case 6:
+			if wireType != 2 {
+				return fmt.Errorf("proto: wrong wireType = %d for field InitialMembers", wireType)
+			}
+			var stringLen uint64
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowMsgs
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				stringLen |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+			intStringLen := int(stringLen)
+			if intStringLen < 0 {
+				return ErrInvalidLengthMsgs
+			}
+			postIndex := iNdEx + intStringLen
+			if postIndex < 0 {
+				return ErrInvalidLengthMsgs
+			}
+			if postIndex > l {
+				return io.ErrUnexpectedEOF
+			}
+			m.InitialMembers = append(m.InitialMembers, string(dAtA[iNdEx:postIndex]))
+			iNdEx = postIndex
+		case 7:
 			if wireType != 2 {
 				return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType)
 			}
diff --git a/x/subspaces/types/query.pb.go b/x/subspaces/types/query.pb.go
index 8f5c2c87..7ab3954e 100644
--- a/x/subspaces/types/query.pb.go
+++ b/x/subspaces/types/query.pb.go
@@ -1,5 +1,5 @@
 // Code generated by protoc-gen-gogo. DO NOT EDIT.
-// source: desmos/subspaces/v2/query.proto
+// source: desmos/subspaces/v3/query.proto
 
 package types
 
@@ -40,7 +40,7 @@ func (m *QuerySubspacesRequest) Reset()         { *m = QuerySubspacesRequest{} }
 func (m *QuerySubspacesRequest) String() string { return proto.CompactTextString(m) }
 func (*QuerySubspacesRequest) ProtoMessage()    {}
 func (*QuerySubspacesRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{0}
+	return fileDescriptor_ca70010567dbc47d, []int{0}
 }
 func (m *QuerySubspacesRequest) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -87,7 +87,7 @@ func (m *QuerySubspacesResponse) Reset()         { *m = QuerySubspacesResponse{}
 func (m *QuerySubspacesResponse) String() string { return proto.CompactTextString(m) }
 func (*QuerySubspacesResponse) ProtoMessage()    {}
 func (*QuerySubspacesResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{1}
+	return fileDescriptor_ca70010567dbc47d, []int{1}
 }
 func (m *QuerySubspacesResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -140,7 +140,7 @@ func (m *QuerySubspaceRequest) Reset()         { *m = QuerySubspaceRequest{} }
 func (m *QuerySubspaceRequest) String() string { return proto.CompactTextString(m) }
 func (*QuerySubspaceRequest) ProtoMessage()    {}
 func (*QuerySubspaceRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{2}
+	return fileDescriptor_ca70010567dbc47d, []int{2}
 }
 func (m *QuerySubspaceRequest) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -178,7 +178,7 @@ func (m *QuerySubspaceResponse) Reset()         { *m = QuerySubspaceResponse{} }
 func (m *QuerySubspaceResponse) String() string { return proto.CompactTextString(m) }
 func (*QuerySubspaceResponse) ProtoMessage()    {}
 func (*QuerySubspaceResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{3}
+	return fileDescriptor_ca70010567dbc47d, []int{3}
 }
 func (m *QuerySubspaceResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -226,7 +226,7 @@ func (m *QuerySectionsRequest) Reset()         { *m = QuerySectionsRequest{} }
 func (m *QuerySectionsRequest) String() string { return proto.CompactTextString(m) }
 func (*QuerySectionsRequest) ProtoMessage()    {}
 func (*QuerySectionsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{4}
+	return fileDescriptor_ca70010567dbc47d, []int{4}
 }
 func (m *QuerySectionsRequest) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -279,7 +279,7 @@ func (m *QuerySectionsResponse) Reset()         { *m = QuerySectionsResponse{} }
 func (m *QuerySectionsResponse) String() string { return proto.CompactTextString(m) }
 func (*QuerySectionsResponse) ProtoMessage()    {}
 func (*QuerySectionsResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{5}
+	return fileDescriptor_ca70010567dbc47d, []int{5}
 }
 func (m *QuerySectionsResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -334,7 +334,7 @@ func (m *QuerySectionRequest) Reset()         { *m = QuerySectionRequest{} }
 func (m *QuerySectionRequest) String() string { return proto.CompactTextString(m) }
 func (*QuerySectionRequest) ProtoMessage()    {}
 func (*QuerySectionRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{6}
+	return fileDescriptor_ca70010567dbc47d, []int{6}
 }
 func (m *QuerySectionRequest) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -386,7 +386,7 @@ func (m *QuerySectionResponse) Reset()         { *m = QuerySectionResponse{} }
 func (m *QuerySectionResponse) String() string { return proto.CompactTextString(m) }
 func (*QuerySectionResponse) ProtoMessage()    {}
 func (*QuerySectionResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{7}
+	return fileDescriptor_ca70010567dbc47d, []int{7}
 }
 func (m *QuerySectionResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -437,7 +437,7 @@ func (m *QueryUserGroupsRequest) Reset()         { *m = QueryUserGroupsRequest{}
 func (m *QueryUserGroupsRequest) String() string { return proto.CompactTextString(m) }
 func (*QueryUserGroupsRequest) ProtoMessage()    {}
 func (*QueryUserGroupsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{8}
+	return fileDescriptor_ca70010567dbc47d, []int{8}
 }
 func (m *QueryUserGroupsRequest) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -498,7 +498,7 @@ func (m *QueryUserGroupsResponse) Reset()         { *m = QueryUserGroupsResponse
 func (m *QueryUserGroupsResponse) String() string { return proto.CompactTextString(m) }
 func (*QueryUserGroupsResponse) ProtoMessage()    {}
 func (*QueryUserGroupsResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{9}
+	return fileDescriptor_ca70010567dbc47d, []int{9}
 }
 func (m *QueryUserGroupsResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -553,7 +553,7 @@ func (m *QueryUserGroupRequest) Reset()         { *m = QueryUserGroupRequest{} }
 func (m *QueryUserGroupRequest) String() string { return proto.CompactTextString(m) }
 func (*QueryUserGroupRequest) ProtoMessage()    {}
 func (*QueryUserGroupRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{10}
+	return fileDescriptor_ca70010567dbc47d, []int{10}
 }
 func (m *QueryUserGroupRequest) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -606,7 +606,7 @@ func (m *QueryUserGroupResponse) Reset()         { *m = QueryUserGroupResponse{}
 func (m *QueryUserGroupResponse) String() string { return proto.CompactTextString(m) }
 func (*QueryUserGroupResponse) ProtoMessage()    {}
 func (*QueryUserGroupResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{11}
+	return fileDescriptor_ca70010567dbc47d, []int{11}
 }
 func (m *QueryUserGroupResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -657,7 +657,7 @@ func (m *QueryUserGroupMembersRequest) Reset()         { *m = QueryUserGroupMemb
 func (m *QueryUserGroupMembersRequest) String() string { return proto.CompactTextString(m) }
 func (*QueryUserGroupMembersRequest) ProtoMessage()    {}
 func (*QueryUserGroupMembersRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{12}
+	return fileDescriptor_ca70010567dbc47d, []int{12}
 }
 func (m *QueryUserGroupMembersRequest) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -718,7 +718,7 @@ func (m *QueryUserGroupMembersResponse) Reset()         { *m = QueryUserGroupMem
 func (m *QueryUserGroupMembersResponse) String() string { return proto.CompactTextString(m) }
 func (*QueryUserGroupMembersResponse) ProtoMessage()    {}
 func (*QueryUserGroupMembersResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{13}
+	return fileDescriptor_ca70010567dbc47d, []int{13}
 }
 func (m *QueryUserGroupMembersResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -776,7 +776,7 @@ func (m *QueryUserPermissionsRequest) Reset()         { *m = QueryUserPermission
 func (m *QueryUserPermissionsRequest) String() string { return proto.CompactTextString(m) }
 func (*QueryUserPermissionsRequest) ProtoMessage()    {}
 func (*QueryUserPermissionsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{14}
+	return fileDescriptor_ca70010567dbc47d, []int{14}
 }
 func (m *QueryUserPermissionsRequest) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -816,7 +816,7 @@ func (m *QueryUserPermissionsResponse) Reset()         { *m = QueryUserPermissio
 func (m *QueryUserPermissionsResponse) String() string { return proto.CompactTextString(m) }
 func (*QueryUserPermissionsResponse) ProtoMessage()    {}
 func (*QueryUserPermissionsResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{15}
+	return fileDescriptor_ca70010567dbc47d, []int{15}
 }
 func (m *QueryUserPermissionsResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -878,7 +878,7 @@ func (m *PermissionDetail) Reset()         { *m = PermissionDetail{} }
 func (m *PermissionDetail) String() string { return proto.CompactTextString(m) }
 func (*PermissionDetail) ProtoMessage()    {}
 func (*PermissionDetail) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{16}
+	return fileDescriptor_ca70010567dbc47d, []int{16}
 }
 func (m *PermissionDetail) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -965,7 +965,7 @@ func (m *PermissionDetail_User) Reset()         { *m = PermissionDetail_User{} }
 func (m *PermissionDetail_User) String() string { return proto.CompactTextString(m) }
 func (*PermissionDetail_User) ProtoMessage()    {}
 func (*PermissionDetail_User) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{16, 0}
+	return fileDescriptor_ca70010567dbc47d, []int{16, 0}
 }
 func (m *PermissionDetail_User) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1006,7 +1006,7 @@ func (m *PermissionDetail_Group) Reset()         { *m = PermissionDetail_Group{}
 func (m *PermissionDetail_Group) String() string { return proto.CompactTextString(m) }
 func (*PermissionDetail_Group) ProtoMessage()    {}
 func (*PermissionDetail_Group) Descriptor() ([]byte, []int) {
-	return fileDescriptor_acc17cc7a389b584, []int{16, 1}
+	return fileDescriptor_ca70010567dbc47d, []int{16, 1}
 }
 func (m *PermissionDetail_Group) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1036,101 +1036,101 @@ func (m *PermissionDetail_Group) XXX_DiscardUnknown() {
 var xxx_messageInfo_PermissionDetail_Group proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterType((*QuerySubspacesRequest)(nil), "desmos.subspaces.v2.QuerySubspacesRequest")
-	proto.RegisterType((*QuerySubspacesResponse)(nil), "desmos.subspaces.v2.QuerySubspacesResponse")
-	proto.RegisterType((*QuerySubspaceRequest)(nil), "desmos.subspaces.v2.QuerySubspaceRequest")
-	proto.RegisterType((*QuerySubspaceResponse)(nil), "desmos.subspaces.v2.QuerySubspaceResponse")
-	proto.RegisterType((*QuerySectionsRequest)(nil), "desmos.subspaces.v2.QuerySectionsRequest")
-	proto.RegisterType((*QuerySectionsResponse)(nil), "desmos.subspaces.v2.QuerySectionsResponse")
-	proto.RegisterType((*QuerySectionRequest)(nil), "desmos.subspaces.v2.QuerySectionRequest")
-	proto.RegisterType((*QuerySectionResponse)(nil), "desmos.subspaces.v2.QuerySectionResponse")
-	proto.RegisterType((*QueryUserGroupsRequest)(nil), "desmos.subspaces.v2.QueryUserGroupsRequest")
-	proto.RegisterType((*QueryUserGroupsResponse)(nil), "desmos.subspaces.v2.QueryUserGroupsResponse")
-	proto.RegisterType((*QueryUserGroupRequest)(nil), "desmos.subspaces.v2.QueryUserGroupRequest")
-	proto.RegisterType((*QueryUserGroupResponse)(nil), "desmos.subspaces.v2.QueryUserGroupResponse")
-	proto.RegisterType((*QueryUserGroupMembersRequest)(nil), "desmos.subspaces.v2.QueryUserGroupMembersRequest")
-	proto.RegisterType((*QueryUserGroupMembersResponse)(nil), "desmos.subspaces.v2.QueryUserGroupMembersResponse")
-	proto.RegisterType((*QueryUserPermissionsRequest)(nil), "desmos.subspaces.v2.QueryUserPermissionsRequest")
-	proto.RegisterType((*QueryUserPermissionsResponse)(nil), "desmos.subspaces.v2.QueryUserPermissionsResponse")
-	proto.RegisterType((*PermissionDetail)(nil), "desmos.subspaces.v2.PermissionDetail")
-	proto.RegisterType((*PermissionDetail_User)(nil), "desmos.subspaces.v2.PermissionDetail.User")
-	proto.RegisterType((*PermissionDetail_Group)(nil), "desmos.subspaces.v2.PermissionDetail.Group")
-}
-
-func init() { proto.RegisterFile("desmos/subspaces/v2/query.proto", fileDescriptor_acc17cc7a389b584) }
-
-var fileDescriptor_acc17cc7a389b584 = []byte{
+	proto.RegisterType((*QuerySubspacesRequest)(nil), "desmos.subspaces.v3.QuerySubspacesRequest")
+	proto.RegisterType((*QuerySubspacesResponse)(nil), "desmos.subspaces.v3.QuerySubspacesResponse")
+	proto.RegisterType((*QuerySubspaceRequest)(nil), "desmos.subspaces.v3.QuerySubspaceRequest")
+	proto.RegisterType((*QuerySubspaceResponse)(nil), "desmos.subspaces.v3.QuerySubspaceResponse")
+	proto.RegisterType((*QuerySectionsRequest)(nil), "desmos.subspaces.v3.QuerySectionsRequest")
+	proto.RegisterType((*QuerySectionsResponse)(nil), "desmos.subspaces.v3.QuerySectionsResponse")
+	proto.RegisterType((*QuerySectionRequest)(nil), "desmos.subspaces.v3.QuerySectionRequest")
+	proto.RegisterType((*QuerySectionResponse)(nil), "desmos.subspaces.v3.QuerySectionResponse")
+	proto.RegisterType((*QueryUserGroupsRequest)(nil), "desmos.subspaces.v3.QueryUserGroupsRequest")
+	proto.RegisterType((*QueryUserGroupsResponse)(nil), "desmos.subspaces.v3.QueryUserGroupsResponse")
+	proto.RegisterType((*QueryUserGroupRequest)(nil), "desmos.subspaces.v3.QueryUserGroupRequest")
+	proto.RegisterType((*QueryUserGroupResponse)(nil), "desmos.subspaces.v3.QueryUserGroupResponse")
+	proto.RegisterType((*QueryUserGroupMembersRequest)(nil), "desmos.subspaces.v3.QueryUserGroupMembersRequest")
+	proto.RegisterType((*QueryUserGroupMembersResponse)(nil), "desmos.subspaces.v3.QueryUserGroupMembersResponse")
+	proto.RegisterType((*QueryUserPermissionsRequest)(nil), "desmos.subspaces.v3.QueryUserPermissionsRequest")
+	proto.RegisterType((*QueryUserPermissionsResponse)(nil), "desmos.subspaces.v3.QueryUserPermissionsResponse")
+	proto.RegisterType((*PermissionDetail)(nil), "desmos.subspaces.v3.PermissionDetail")
+	proto.RegisterType((*PermissionDetail_User)(nil), "desmos.subspaces.v3.PermissionDetail.User")
+	proto.RegisterType((*PermissionDetail_Group)(nil), "desmos.subspaces.v3.PermissionDetail.Group")
+}
+
+func init() { proto.RegisterFile("desmos/subspaces/v3/query.proto", fileDescriptor_ca70010567dbc47d) }
+
+var fileDescriptor_ca70010567dbc47d = []byte{
 	// 1113 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x97, 0xcf, 0x6f, 0x1b, 0x45,
-	0x14, 0xc7, 0x3d, 0xf9, 0x51, 0xdb, 0xcf, 0x82, 0x94, 0x49, 0x1b, 0x22, 0x93, 0xec, 0x46, 0x8b,
-	0x28, 0x69, 0xd2, 0xee, 0x12, 0x27, 0x15, 0x25, 0xa0, 0x36, 0x35, 0x55, 0x7e, 0x48, 0x80, 0xca,
+	0x14, 0xc7, 0x3d, 0x89, 0x53, 0xdb, 0xcf, 0x82, 0x94, 0x49, 0x1b, 0x22, 0x93, 0xec, 0x46, 0x8b,
+	0x28, 0x69, 0xd2, 0xee, 0x12, 0x3b, 0x15, 0x25, 0xa0, 0x36, 0x35, 0x55, 0x7e, 0x48, 0x80, 0xca,
 	0x42, 0xc5, 0x8f, 0x4b, 0xb5, 0x8e, 0x47, 0xc6, 0x92, 0xed, 0x75, 0x3d, 0x76, 0x44, 0x14, 0x45,
 	0xa0, 0x9e, 0x38, 0x70, 0x40, 0x42, 0x82, 0x6b, 0x0e, 0x3d, 0x72, 0xe1, 0x86, 0xc4, 0x81, 0x1b,
 	0x2a, 0x27, 0x22, 0x71, 0xe1, 0x64, 0xa1, 0x84, 0x03, 0x67, 0xff, 0x05, 0x68, 0x67, 0x67, 0x66,
-	0x67, 0xd7, 0x8b, 0xb3, 0x8e, 0x23, 0x6e, 0xce, 0xcc, 0x7b, 0xf3, 0x3e, 0xef, 0x3b, 0xef, 0xed,
-	0xbc, 0x80, 0x5e, 0x26, 0xb4, 0xee, 0x52, 0x8b, 0x76, 0x4a, 0xb4, 0xe9, 0xec, 0x12, 0x6a, 0xed,
-	0x15, 0xac, 0xc7, 0x1d, 0xd2, 0xda, 0x37, 0x9b, 0x2d, 0xb7, 0xed, 0xe2, 0x69, 0xdf, 0xc0, 0x94,
-	0x06, 0xe6, 0x5e, 0x21, 0x7f, 0xa5, 0xe2, 0x56, 0x5c, 0xb6, 0x6f, 0x79, 0xbf, 0x7c, 0xd3, 0xfc,
-	0x5c, 0xc5, 0x75, 0x2b, 0x35, 0x62, 0x39, 0xcd, 0xaa, 0xe5, 0x34, 0x1a, 0x6e, 0xdb, 0x69, 0x57,
-	0xdd, 0x06, 0xe5, 0xbb, 0x4b, 0xbb, 0x2e, 0x8b, 0x54, 0x72, 0x28, 0xf1, 0x23, 0x58, 0x7b, 0x2b,
-	0x25, 0xd2, 0x76, 0x56, 0xac, 0xa6, 0x53, 0xa9, 0x36, 0x98, 0x31, 0xb7, 0x5d, 0x88, 0xa3, 0xaa,
-	0xbb, 0x65, 0x52, 0xe3, 0xa7, 0x19, 0x8f, 0xe0, 0xea, 0xfb, 0xde, 0x19, 0x1f, 0x08, 0x0b, 0x9b,
-	0x3c, 0xee, 0x10, 0xda, 0xc6, 0x9b, 0x00, 0xc1, 0x71, 0xb3, 0x68, 0x01, 0x2d, 0xe6, 0x0a, 0xd7,
-	0x4c, 0x3f, 0xb6, 0xe9, 0xc5, 0x36, 0xfd, 0xec, 0x78, 0x6c, 0xf3, 0x81, 0x53, 0x21, 0xdc, 0xd7,
-	0x56, 0x3c, 0x8d, 0xa7, 0x08, 0x66, 0xa2, 0x11, 0x68, 0xd3, 0x6d, 0x50, 0x82, 0xef, 0x41, 0x56,
-	0x82, 0xcd, 0xa2, 0x85, 0xf1, 0xc5, 0x5c, 0x61, 0xde, 0x8c, 0x91, 0xc9, 0x14, 0xae, 0xc5, 0x89,
-	0x67, 0x5d, 0x3d, 0x65, 0x07, 0x5e, 0x78, 0x2b, 0x44, 0x39, 0xc6, 0x28, 0x5f, 0x3d, 0x93, 0xd2,
-	0x8f, 0x1f, 0xc2, 0xfc, 0x04, 0xae, 0x84, 0x28, 0x85, 0x0c, 0xaf, 0x43, 0x4e, 0x44, 0x7b, 0x54,
-	0x2d, 0x33, 0x1d, 0x26, 0x8a, 0x33, 0xbd, 0xae, 0x8e, 0xf7, 0x9d, 0x7a, 0x6d, 0xdd, 0x50, 0x36,
-	0x0d, 0x1b, 0xc4, 0x5f, 0x3b, 0xe5, 0xf5, 0xcc, 0x57, 0x47, 0x7a, 0xea, 0x9f, 0x23, 0x3d, 0x65,
-	0x7c, 0x1c, 0x91, 0x58, 0xe6, 0x7f, 0x17, 0x32, 0xc2, 0x81, 0x0b, 0x9c, 0x28, 0x7d, 0xe9, 0x64,
-	0x7c, 0x21, 0xa0, 0xc9, 0x2e, 0xab, 0x10, 0x01, 0xad, 0xc7, 0x40, 0xab, 0x70, 0x91, 0xcb, 0x1d,
-	0x3b, 0xf7, 0xe5, 0x1e, 0x21, 0x91, 0x9b, 0x24, 0xe0, 0xb9, 0xdd, 0x81, 0x0c, 0xe5, 0x6b, 0xfc,
-	0x6a, 0xe7, 0xe2, 0x73, 0xf3, 0x8d, 0x64, 0x6a, 0xdc, 0xe7, 0xe2, 0x2e, 0xf6, 0x21, 0x4c, 0xab,
-	0x84, 0x89, 0x25, 0x9a, 0x07, 0xe0, 0x30, 0xde, 0xbe, 0x07, 0xf0, 0x9c, 0x9d, 0xe5, 0x2b, 0x3b,
-	0x65, 0xe3, 0xc3, 0xb0, 0xf4, 0x32, 0xef, 0xb7, 0x20, 0xcd, 0x8d, 0xf8, 0x95, 0x26, 0x49, 0x5b,
-	0xb8, 0x18, 0x3f, 0x89, 0x66, 0x79, 0x48, 0x49, 0x6b, 0xab, 0xe5, 0x76, 0x9a, 0x74, 0xd4, 0x42,
-	0x3c, 0x23, 0x91, 0x48, 0x29, 0x8c, 0x8f, 0x52, 0x0a, 0x2f, 0xf6, 0xa1, 0x4b, 0x51, 0x2e, 0x55,
-	0xd8, 0x0a, 0x2f, 0x05, 0x2d, 0x56, 0x13, 0xe9, 0xc8, 0x55, 0xe1, 0x3e, 0x17, 0x57, 0x0a, 0x5f,
-	0x8a, 0x6a, 0x95, 0x91, 0x46, 0x16, 0xd7, 0x84, 0x0c, 0xa3, 0x94, 0xd2, 0x16, 0xa7, 0x7b, 0x5d,
-	0x7d, 0xca, 0xf7, 0x12, 0x3b, 0x86, 0x9d, 0x66, 0x3f, 0x59, 0xd9, 0xcc, 0x44, 0x09, 0xb8, 0x46,
-	0xeb, 0x30, 0xc9, 0x8c, 0x78, 0xd9, 0x24, 0x93, 0xc8, 0x77, 0x31, 0x7e, 0x47, 0x30, 0x17, 0x3e,
-	0xf6, 0x5d, 0x52, 0x2f, 0x91, 0x16, 0xfd, 0xbf, 0xf3, 0xbb, 0xb0, 0x6a, 0x7a, 0x82, 0x60, 0xfe,
-	0x3f, 0x32, 0xe2, 0x7a, 0xcd, 0x42, 0xba, 0xee, 0x2f, 0xb1, 0xa2, 0xca, 0xda, 0xe2, 0xcf, 0x8b,
-	0xab, 0x97, 0x9f, 0x11, 0xbc, 0x24, 0x21, 0x1e, 0x90, 0x56, 0xbd, 0x4a, 0xa9, 0xfa, 0x99, 0x3d,
-	0xb7, 0xaa, 0x6b, 0xfd, 0x2d, 0x59, 0xbc, 0xda, 0xeb, 0xea, 0x2f, 0x70, 0x3f, 0xb9, 0x67, 0xa8,
-	0x9d, 0xfa, 0x32, 0x4c, 0x74, 0x28, 0x69, 0x31, 0x55, 0xb3, 0xc5, 0xa9, 0x5e, 0x57, 0xcf, 0xf9,
-	0xf6, 0xde, 0xaa, 0x61, 0xb3, 0x4d, 0xe5, 0xd9, 0xf9, 0x51, 0x2d, 0x8a, 0x10, 0x3d, 0x57, 0xf0,
-	0x36, 0xe4, 0x9a, 0xc1, 0xb2, 0xaf, 0xa2, 0x8a, 0xaf, 0x6c, 0x1a, 0xb6, 0x6a, 0x8a, 0x3f, 0x82,
-	0x74, 0x99, 0xb4, 0x9d, 0x6a, 0x8d, 0xce, 0x8e, 0xb1, 0x86, 0x7e, 0x25, 0xb6, 0x5a, 0x83, 0xa0,
-	0xf7, 0x99, 0x75, 0x71, 0xc6, 0x2b, 0xda, 0x5e, 0x57, 0x7f, 0xde, 0x0f, 0xc0, 0xcf, 0x30, 0x6c,
-	0x71, 0x9a, 0xf1, 0xeb, 0x38, 0x5c, 0x8e, 0x7a, 0x8d, 0xfa, 0xa9, 0xc6, 0x1b, 0x8a, 0x6e, 0xb9,
-	0xc2, 0x52, 0x22, 0x54, 0xd6, 0x69, 0xdb, 0x29, 0x5f, 0x54, 0xfc, 0xb6, 0xe8, 0xcd, 0x09, 0x76,
-	0xc4, 0x72, 0xb2, 0x23, 0x58, 0xd9, 0x6e, 0x8b, 0x26, 0xcd, 0xd7, 0x60, 0xc2, 0x3b, 0x54, 0x5e,
-	0x23, 0x1a, 0x70, 0x8d, 0xf8, 0x16, 0x40, 0x20, 0x38, 0x13, 0x39, 0xab, 0x56, 0x48, 0xb0, 0x67,
-	0xd8, 0x8a, 0xa1, 0xbc, 0x7d, 0x94, 0xaf, 0xc1, 0x24, 0x8b, 0x8f, 0xdf, 0x50, 0x3a, 0x18, 0xb1,
-	0x4a, 0xd3, 0x4e, 0xba, 0x7a, 0x9a, 0x6d, 0xee, 0xdc, 0x1f, 0xd8, 0xcc, 0x5a, 0x3f, 0x44, 0x7c,
-	0xb4, 0xe0, 0x57, 0x71, 0x12, 0xc6, 0x69, 0xa7, 0x5e, 0x38, 0x06, 0x98, 0x64, 0xc5, 0x87, 0xbf,
-	0x46, 0x90, 0x95, 0xa3, 0x1f, 0x8e, 0x57, 0x3f, 0x76, 0x02, 0xcd, 0x2f, 0x27, 0xb2, 0xf5, 0x8b,
-	0xd9, 0xb8, 0xf6, 0xe4, 0x8f, 0xbf, 0xbf, 0x1d, 0x5b, 0xc0, 0x9a, 0x15, 0x37, 0xf2, 0x06, 0x03,
-	0xe3, 0xf7, 0x08, 0x32, 0xc2, 0x1b, 0x5f, 0x3f, 0x3b, 0x82, 0x80, 0x59, 0x4a, 0x62, 0xca, 0x59,
-	0xd6, 0x18, 0x8b, 0x89, 0x6f, 0x0c, 0x66, 0xb1, 0x0e, 0x94, 0xb2, 0x3e, 0xc4, 0xdf, 0x79, 0x64,
-	0x62, 0xfc, 0x19, 0x44, 0x16, 0x1e, 0xf6, 0x06, 0x92, 0x45, 0xa6, 0x32, 0x63, 0x95, 0x91, 0xdd,
-	0xc4, 0xcb, 0xb1, 0x64, 0x21, 0x1e, 0x4b, 0x8e, 0x62, 0x47, 0x08, 0xd2, 0xfc, 0x24, 0xbc, 0x78,
-	0x66, 0x30, 0x81, 0x75, 0x3d, 0x81, 0x25, 0xa7, 0xda, 0x60, 0x54, 0xeb, 0xf8, 0xf6, 0x10, 0x54,
-	0xd6, 0x41, 0xd0, 0xf2, 0x87, 0xf8, 0x29, 0x02, 0x08, 0xe6, 0x0e, 0x3c, 0xa0, 0x72, 0xfa, 0x06,
-	0xab, 0xfc, 0x8d, 0x64, 0xc6, 0x9c, 0xf5, 0x4d, 0xc6, 0x7a, 0x0b, 0xaf, 0x0e, 0x73, 0xb7, 0x16,
-	0x9f, 0x64, 0x7e, 0x40, 0x90, 0x95, 0x67, 0x0e, 0xea, 0x85, 0xe8, 0x80, 0x92, 0x5f, 0x4e, 0x64,
+	0xc7, 0xeb, 0xc5, 0x59, 0xc7, 0x11, 0x37, 0x67, 0xe6, 0xbd, 0x79, 0x9f, 0xf7, 0x9d, 0xf7, 0x76,
+	0x5e, 0x40, 0x2f, 0x13, 0x5a, 0x77, 0xa9, 0x45, 0x3b, 0x25, 0xda, 0x74, 0x76, 0x09, 0xb5, 0xf6,
+	0x0a, 0xd6, 0xe3, 0x0e, 0x69, 0xed, 0x9b, 0xcd, 0x96, 0xdb, 0x76, 0xf1, 0x8c, 0x6f, 0x60, 0x4a,
+	0x03, 0x73, 0xaf, 0x90, 0xbb, 0x52, 0x71, 0x2b, 0x2e, 0xdb, 0xb7, 0xbc, 0x5f, 0xbe, 0x69, 0x6e,
+	0xbe, 0xe2, 0xba, 0x95, 0x1a, 0xb1, 0x9c, 0x66, 0xd5, 0x72, 0x1a, 0x0d, 0xb7, 0xed, 0xb4, 0xab,
+	0x6e, 0x83, 0xf2, 0xdd, 0xe5, 0x5d, 0x97, 0x45, 0x2a, 0x39, 0x94, 0xf8, 0x11, 0xac, 0xbd, 0xd5,
+	0x12, 0x69, 0x3b, 0xab, 0x56, 0xd3, 0xa9, 0x54, 0x1b, 0xcc, 0x98, 0xdb, 0x2e, 0x46, 0x51, 0xd5,
+	0xdd, 0x32, 0xa9, 0xf1, 0xd3, 0x8c, 0x47, 0x70, 0xf5, 0x7d, 0xef, 0x8c, 0x0f, 0x84, 0x85, 0x4d,
+	0x1e, 0x77, 0x08, 0x6d, 0xe3, 0x4d, 0x80, 0xe0, 0xb8, 0x39, 0xb4, 0x88, 0x96, 0xb2, 0xf9, 0x6b,
+	0xa6, 0x1f, 0xdb, 0xf4, 0x62, 0x9b, 0x7e, 0x76, 0x3c, 0xb6, 0xf9, 0xc0, 0xa9, 0x10, 0xee, 0x6b,
+	0x2b, 0x9e, 0xc6, 0x53, 0x04, 0xb3, 0xe1, 0x08, 0xb4, 0xe9, 0x36, 0x28, 0xc1, 0xf7, 0x20, 0x23,
+	0xc1, 0xe6, 0xd0, 0xe2, 0xe4, 0x52, 0x36, 0xbf, 0x60, 0x46, 0xc8, 0x64, 0x0a, 0xd7, 0x62, 0xf2,
+	0x59, 0x57, 0x4f, 0xd8, 0x81, 0x17, 0xde, 0xea, 0xa3, 0x9c, 0x60, 0x94, 0xaf, 0x9e, 0x49, 0xe9,
+	0xc7, 0xef, 0xc3, 0xfc, 0x04, 0xae, 0xf4, 0x51, 0x0a, 0x19, 0x5e, 0x87, 0xac, 0x88, 0xf6, 0xa8,
+	0x5a, 0x66, 0x3a, 0x24, 0x8b, 0xb3, 0xbd, 0xae, 0x8e, 0xf7, 0x9d, 0x7a, 0x6d, 0xdd, 0x50, 0x36,
+	0x0d, 0x1b, 0xc4, 0x5f, 0x3b, 0xe5, 0xf5, 0xf4, 0x57, 0x47, 0x7a, 0xe2, 0x9f, 0x23, 0x3d, 0x61,
+	0x7c, 0x1c, 0x92, 0x58, 0xe6, 0x7f, 0x17, 0xd2, 0xc2, 0x81, 0x0b, 0x1c, 0x2b, 0x7d, 0xe9, 0x64,
+	0x7c, 0x21, 0xa0, 0xc9, 0x2e, 0xab, 0x10, 0x01, 0xad, 0x47, 0x40, 0xab, 0x70, 0xa1, 0xcb, 0x9d,
+	0x38, 0xf7, 0xe5, 0x1e, 0x21, 0x91, 0x9b, 0x24, 0xe0, 0xb9, 0xdd, 0x81, 0x34, 0xe5, 0x6b, 0xfc,
+	0x6a, 0xe7, 0xa3, 0x73, 0xf3, 0x8d, 0x64, 0x6a, 0xdc, 0xe7, 0xe2, 0x2e, 0xf6, 0x21, 0xcc, 0xa8,
+	0x84, 0xb1, 0x25, 0x5a, 0x00, 0xe0, 0x30, 0xde, 0xbe, 0x07, 0xf0, 0x9c, 0x9d, 0xe1, 0x2b, 0x3b,
+	0x65, 0xe3, 0xc3, 0x7e, 0xe9, 0x65, 0xde, 0x6f, 0x41, 0x8a, 0x1b, 0xf1, 0x2b, 0x8d, 0x93, 0xb6,
+	0x70, 0x31, 0x7e, 0x12, 0xcd, 0xf2, 0x90, 0x92, 0xd6, 0x56, 0xcb, 0xed, 0x34, 0xe9, 0xb8, 0x85,
+	0x78, 0x46, 0x22, 0xa1, 0x52, 0x98, 0x1c, 0xa7, 0x14, 0x5e, 0x1c, 0x40, 0x97, 0xa2, 0x5c, 0xaa,
+	0xb0, 0x15, 0x5e, 0x0a, 0x5a, 0xa4, 0x26, 0xd2, 0x91, 0xab, 0xc2, 0x7d, 0x2e, 0xae, 0x14, 0xbe,
+	0x14, 0xd5, 0x2a, 0x23, 0x8d, 0x2d, 0xae, 0x09, 0x69, 0x46, 0x29, 0xa5, 0x2d, 0xce, 0xf4, 0xba,
+	0xfa, 0xb4, 0xef, 0x25, 0x76, 0x0c, 0x3b, 0xc5, 0x7e, 0xb2, 0xb2, 0x99, 0x0d, 0x13, 0x70, 0x8d,
+	0xd6, 0x61, 0x8a, 0x19, 0xf1, 0xb2, 0x89, 0x27, 0x91, 0xef, 0x62, 0xfc, 0x8e, 0x60, 0xbe, 0xff,
+	0xd8, 0x77, 0x49, 0xbd, 0x44, 0x5a, 0xf4, 0xff, 0xce, 0xef, 0xc2, 0xaa, 0xe9, 0x09, 0x82, 0x85,
+	0xff, 0xc8, 0x88, 0xeb, 0x35, 0x07, 0xa9, 0xba, 0xbf, 0xc4, 0x8a, 0x2a, 0x63, 0x8b, 0x3f, 0x2f,
+	0xae, 0x5e, 0x7e, 0x46, 0xf0, 0x92, 0x84, 0x78, 0x40, 0x5a, 0xf5, 0x2a, 0xa5, 0xea, 0x67, 0xf6,
+	0xdc, 0xaa, 0xae, 0x0d, 0xb6, 0x64, 0xf1, 0x6a, 0xaf, 0xab, 0xbf, 0xc0, 0xfd, 0xe4, 0x9e, 0xa1,
+	0x76, 0xea, 0xcb, 0x90, 0xec, 0x50, 0xd2, 0x62, 0xaa, 0x66, 0x8a, 0xd3, 0xbd, 0xae, 0x9e, 0xf5,
+	0xed, 0xbd, 0x55, 0xc3, 0x66, 0x9b, 0xca, 0xb3, 0xf3, 0xa3, 0x5a, 0x14, 0x7d, 0xf4, 0x5c, 0xc1,
+	0xdb, 0x90, 0x6d, 0x06, 0xcb, 0xbe, 0x8a, 0x2a, 0xbe, 0xb2, 0x69, 0xd8, 0xaa, 0x29, 0xfe, 0x08,
+	0x52, 0x65, 0xd2, 0x76, 0xaa, 0x35, 0x3a, 0x37, 0xc1, 0x1a, 0xfa, 0x95, 0xc8, 0x6a, 0x0d, 0x82,
+	0xde, 0x67, 0xd6, 0xc5, 0x59, 0xaf, 0x68, 0x7b, 0x5d, 0xfd, 0x79, 0x3f, 0x00, 0x3f, 0xc3, 0xb0,
+	0xc5, 0x69, 0xc6, 0xaf, 0x93, 0x70, 0x39, 0xec, 0x35, 0xee, 0xa7, 0x1a, 0x6f, 0x28, 0xba, 0x65,
+	0xf3, 0xcb, 0xb1, 0x50, 0x59, 0xa7, 0x6d, 0x27, 0x7c, 0x51, 0xf1, 0xdb, 0xa2, 0x37, 0x93, 0xec,
+	0x88, 0x95, 0x78, 0x47, 0xb0, 0xb2, 0xdd, 0x16, 0x4d, 0x9a, 0xab, 0x41, 0xd2, 0x3b, 0x54, 0x5e,
+	0x23, 0x1a, 0x72, 0x8d, 0xf8, 0x16, 0x40, 0x20, 0x38, 0x13, 0x39, 0xa3, 0x56, 0x48, 0xb0, 0x67,
+	0xd8, 0x8a, 0xa1, 0xbc, 0x7d, 0x94, 0xab, 0xc1, 0x14, 0x8b, 0x8f, 0xdf, 0x50, 0x3a, 0x18, 0xb1,
+	0x4a, 0xd3, 0x4e, 0xba, 0x7a, 0x8a, 0x6d, 0xee, 0xdc, 0x1f, 0xda, 0xcc, 0xda, 0x20, 0x44, 0x74,
+	0xb4, 0xe0, 0x57, 0x71, 0x0a, 0x26, 0x69, 0xa7, 0x9e, 0x3f, 0x06, 0x98, 0x62, 0xc5, 0x87, 0xbf,
+	0x46, 0x90, 0x91, 0xa3, 0x1f, 0x8e, 0x56, 0x3f, 0x72, 0x02, 0xcd, 0xad, 0xc4, 0xb2, 0xf5, 0x8b,
+	0xd9, 0xb8, 0xf6, 0xe4, 0x8f, 0xbf, 0xbf, 0x9d, 0x58, 0xc4, 0x9a, 0x15, 0x35, 0xf2, 0x06, 0x03,
+	0xe3, 0xf7, 0x08, 0xd2, 0xc2, 0x1b, 0x5f, 0x3f, 0x3b, 0x82, 0x80, 0x59, 0x8e, 0x63, 0xca, 0x59,
+	0xd6, 0x18, 0x8b, 0x89, 0x6f, 0x0c, 0x67, 0xb1, 0x0e, 0x94, 0xb2, 0x3e, 0xc4, 0xdf, 0x79, 0x64,
+	0x62, 0xfc, 0x19, 0x46, 0xd6, 0x3f, 0xec, 0x0d, 0x25, 0x0b, 0x4d, 0x65, 0x46, 0x81, 0x91, 0xdd,
+	0xc4, 0x2b, 0x91, 0x64, 0x7d, 0x3c, 0x96, 0x1c, 0xc5, 0x8e, 0x10, 0xa4, 0xf8, 0x49, 0x78, 0xe9,
+	0xcc, 0x60, 0x02, 0xeb, 0x7a, 0x0c, 0x4b, 0x4e, 0xb5, 0xc1, 0xa8, 0xd6, 0xf1, 0xed, 0x11, 0xa8,
+	0xac, 0x83, 0xa0, 0xe5, 0x0f, 0xf1, 0x53, 0x04, 0x10, 0xcc, 0x1d, 0x78, 0x48, 0xe5, 0x0c, 0x0c,
+	0x56, 0xb9, 0x1b, 0xf1, 0x8c, 0x39, 0xeb, 0x9b, 0x8c, 0xf5, 0x16, 0x2e, 0x8c, 0x72, 0xb7, 0x16,
+	0x9f, 0x64, 0x7e, 0x40, 0x90, 0x91, 0x67, 0x0e, 0xeb, 0x85, 0xf0, 0x80, 0x92, 0x5b, 0x89, 0x65,
 	0xcb, 0x19, 0x37, 0x19, 0xe3, 0x06, 0xbe, 0x73, 0x0e, 0x46, 0xeb, 0x40, 0x7c, 0x08, 0x0e, 0xf1,
-	0x6f, 0x08, 0x2e, 0x47, 0xdf, 0x5f, 0xbc, 0x92, 0x80, 0x24, 0x3c, 0x7d, 0xe4, 0x0b, 0xc3, 0xb8,
-	0xf0, 0x1c, 0xde, 0x63, 0x39, 0x6c, 0xe3, 0xcd, 0xd1, 0x72, 0xb0, 0xc4, 0x50, 0xf0, 0x0b, 0x82,
-	0xa9, 0xc8, 0x43, 0x88, 0x5f, 0x1b, 0xcc, 0xd5, 0xff, 0xe2, 0xe7, 0x57, 0x86, 0xf0, 0xe0, 0x89,
-	0x6c, 0xb1, 0x44, 0xee, 0xe1, 0xbb, 0x43, 0x25, 0xa2, 0xbc, 0xb6, 0xd6, 0x81, 0xf7, 0x22, 0x1c,
-	0x16, 0xdf, 0x79, 0x76, 0xa2, 0xa1, 0xe3, 0x13, 0x0d, 0xfd, 0x75, 0xa2, 0xa1, 0x6f, 0x4e, 0xb5,
-	0xd4, 0xf1, 0xa9, 0x96, 0xfa, 0xf3, 0x54, 0x4b, 0x7d, 0x5a, 0xa8, 0x54, 0xdb, 0x9f, 0x75, 0x4a,
-	0xe6, 0xae, 0x5b, 0xe7, 0x41, 0x6e, 0xd6, 0x9c, 0x12, 0x15, 0x01, 0xf7, 0xd6, 0xac, 0xcf, 0x95,
-	0x40, 0xed, 0xfd, 0x26, 0xa1, 0xa5, 0x4b, 0xec, 0xdf, 0xff, 0xd5, 0x7f, 0x03, 0x00, 0x00, 0xff,
-	0xff, 0x5b, 0x47, 0x60, 0x49, 0xb8, 0x10, 0x00, 0x00,
+	0x6f, 0x08, 0x2e, 0x87, 0xdf, 0x5f, 0xbc, 0x1a, 0x83, 0xa4, 0x7f, 0xfa, 0xc8, 0xe5, 0x47, 0x71,
+	0xe1, 0x39, 0xbc, 0xc7, 0x72, 0xd8, 0xc6, 0x9b, 0xe3, 0xe5, 0x60, 0x89, 0xa1, 0xe0, 0x17, 0x04,
+	0xd3, 0xa1, 0x87, 0x10, 0xbf, 0x36, 0x9c, 0x6b, 0xf0, 0xc5, 0xcf, 0xad, 0x8e, 0xe0, 0xc1, 0x13,
+	0xd9, 0x62, 0x89, 0xdc, 0xc3, 0x77, 0x47, 0x4a, 0x44, 0x79, 0x6d, 0xad, 0x03, 0xef, 0x45, 0x38,
+	0x2c, 0xbe, 0xf3, 0xec, 0x44, 0x43, 0xc7, 0x27, 0x1a, 0xfa, 0xeb, 0x44, 0x43, 0xdf, 0x9c, 0x6a,
+	0x89, 0xe3, 0x53, 0x2d, 0xf1, 0xe7, 0xa9, 0x96, 0xf8, 0x34, 0x5f, 0xa9, 0xb6, 0x3f, 0xeb, 0x94,
+	0xcc, 0x5d, 0xb7, 0xce, 0x83, 0xdc, 0xac, 0x39, 0x25, 0x2a, 0x02, 0xee, 0xad, 0x59, 0x9f, 0x2b,
+	0x81, 0xda, 0xfb, 0x4d, 0x42, 0x4b, 0x97, 0xd8, 0xbf, 0xff, 0x85, 0x7f, 0x03, 0x00, 0x00, 0xff,
+	0xff, 0x86, 0x06, 0x31, 0x9f, 0xb8, 0x10, 0x00, 0x00,
 }
 
 func (this *PermissionDetail) Equal(that interface{}) bool {
@@ -1324,7 +1324,7 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient {
 
 func (c *queryClient) Subspaces(ctx context.Context, in *QuerySubspacesRequest, opts ...grpc.CallOption) (*QuerySubspacesResponse, error) {
 	out := new(QuerySubspacesResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Query/Subspaces", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Query/Subspaces", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1333,7 +1333,7 @@ func (c *queryClient) Subspaces(ctx context.Context, in *QuerySubspacesRequest,
 
 func (c *queryClient) Subspace(ctx context.Context, in *QuerySubspaceRequest, opts ...grpc.CallOption) (*QuerySubspaceResponse, error) {
 	out := new(QuerySubspaceResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Query/Subspace", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Query/Subspace", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1342,7 +1342,7 @@ func (c *queryClient) Subspace(ctx context.Context, in *QuerySubspaceRequest, op
 
 func (c *queryClient) Sections(ctx context.Context, in *QuerySectionsRequest, opts ...grpc.CallOption) (*QuerySectionsResponse, error) {
 	out := new(QuerySectionsResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Query/Sections", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Query/Sections", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1351,7 +1351,7 @@ func (c *queryClient) Sections(ctx context.Context, in *QuerySectionsRequest, op
 
 func (c *queryClient) Section(ctx context.Context, in *QuerySectionRequest, opts ...grpc.CallOption) (*QuerySectionResponse, error) {
 	out := new(QuerySectionResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Query/Section", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Query/Section", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1360,7 +1360,7 @@ func (c *queryClient) Section(ctx context.Context, in *QuerySectionRequest, opts
 
 func (c *queryClient) UserGroups(ctx context.Context, in *QueryUserGroupsRequest, opts ...grpc.CallOption) (*QueryUserGroupsResponse, error) {
 	out := new(QueryUserGroupsResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Query/UserGroups", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Query/UserGroups", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1369,7 +1369,7 @@ func (c *queryClient) UserGroups(ctx context.Context, in *QueryUserGroupsRequest
 
 func (c *queryClient) UserGroup(ctx context.Context, in *QueryUserGroupRequest, opts ...grpc.CallOption) (*QueryUserGroupResponse, error) {
 	out := new(QueryUserGroupResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Query/UserGroup", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Query/UserGroup", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1378,7 +1378,7 @@ func (c *queryClient) UserGroup(ctx context.Context, in *QueryUserGroupRequest,
 
 func (c *queryClient) UserGroupMembers(ctx context.Context, in *QueryUserGroupMembersRequest, opts ...grpc.CallOption) (*QueryUserGroupMembersResponse, error) {
 	out := new(QueryUserGroupMembersResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Query/UserGroupMembers", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Query/UserGroupMembers", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1387,7 +1387,7 @@ func (c *queryClient) UserGroupMembers(ctx context.Context, in *QueryUserGroupMe
 
 func (c *queryClient) UserPermissions(ctx context.Context, in *QueryUserPermissionsRequest, opts ...grpc.CallOption) (*QueryUserPermissionsResponse, error) {
 	out := new(QueryUserPermissionsResponse)
-	err := c.cc.Invoke(ctx, "/desmos.subspaces.v2.Query/UserPermissions", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/desmos.subspaces.v3.Query/UserPermissions", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1459,7 +1459,7 @@ func _Query_Subspaces_Handler(srv interface{}, ctx context.Context, dec func(int
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Query/Subspaces",
+		FullMethod: "/desmos.subspaces.v3.Query/Subspaces",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(QueryServer).Subspaces(ctx, req.(*QuerySubspacesRequest))
@@ -1477,7 +1477,7 @@ func _Query_Subspace_Handler(srv interface{}, ctx context.Context, dec func(inte
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Query/Subspace",
+		FullMethod: "/desmos.subspaces.v3.Query/Subspace",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(QueryServer).Subspace(ctx, req.(*QuerySubspaceRequest))
@@ -1495,7 +1495,7 @@ func _Query_Sections_Handler(srv interface{}, ctx context.Context, dec func(inte
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Query/Sections",
+		FullMethod: "/desmos.subspaces.v3.Query/Sections",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(QueryServer).Sections(ctx, req.(*QuerySectionsRequest))
@@ -1513,7 +1513,7 @@ func _Query_Section_Handler(srv interface{}, ctx context.Context, dec func(inter
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Query/Section",
+		FullMethod: "/desmos.subspaces.v3.Query/Section",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(QueryServer).Section(ctx, req.(*QuerySectionRequest))
@@ -1531,7 +1531,7 @@ func _Query_UserGroups_Handler(srv interface{}, ctx context.Context, dec func(in
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Query/UserGroups",
+		FullMethod: "/desmos.subspaces.v3.Query/UserGroups",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(QueryServer).UserGroups(ctx, req.(*QueryUserGroupsRequest))
@@ -1549,7 +1549,7 @@ func _Query_UserGroup_Handler(srv interface{}, ctx context.Context, dec func(int
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Query/UserGroup",
+		FullMethod: "/desmos.subspaces.v3.Query/UserGroup",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(QueryServer).UserGroup(ctx, req.(*QueryUserGroupRequest))
@@ -1567,7 +1567,7 @@ func _Query_UserGroupMembers_Handler(srv interface{}, ctx context.Context, dec f
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Query/UserGroupMembers",
+		FullMethod: "/desmos.subspaces.v3.Query/UserGroupMembers",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(QueryServer).UserGroupMembers(ctx, req.(*QueryUserGroupMembersRequest))
@@ -1585,7 +1585,7 @@ func _Query_UserPermissions_Handler(srv interface{}, ctx context.Context, dec fu
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/desmos.subspaces.v2.Query/UserPermissions",
+		FullMethod: "/desmos.subspaces.v3.Query/UserPermissions",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(QueryServer).UserPermissions(ctx, req.(*QueryUserPermissionsRequest))
@@ -1594,7 +1594,7 @@ func _Query_UserPermissions_Handler(srv interface{}, ctx context.Context, dec fu
 }
 
 var _Query_serviceDesc = grpc.ServiceDesc{
-	ServiceName: "desmos.subspaces.v2.Query",
+	ServiceName: "desmos.subspaces.v3.Query",
 	HandlerType: (*QueryServer)(nil),
 	Methods: []grpc.MethodDesc{
 		{
@@ -1631,7 +1631,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{
 		},
 	},
 	Streams:  []grpc.StreamDesc{},
-	Metadata: "desmos/subspaces/v2/query.proto",
+	Metadata: "desmos/subspaces/v3/query.proto",
 }
 
 func (m *QuerySubspacesRequest) Marshal() (dAtA []byte, err error) {
diff --git a/x/subspaces/types/query.pb.gw.go b/x/subspaces/types/query.pb.gw.go
index d37d4fa8..9469f931 100644
--- a/x/subspaces/types/query.pb.gw.go
+++ b/x/subspaces/types/query.pb.gw.go
@@ -1,5 +1,5 @@
 // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
-// source: desmos/subspaces/v2/query.proto
+// source: desmos/subspaces/v3/query.proto
 
 /*
 Package types is a reverse proxy.
@@ -976,21 +976,21 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie
 }
 
 var (
-	pattern_Query_Subspaces_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1}, []string{"desmos", "subspaces", "v2"}, "", runtime.AssumeColonVerbOpt(true)))
+	pattern_Query_Subspaces_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1}, []string{"desmos", "subspaces", "v3"}, "", runtime.AssumeColonVerbOpt(true)))
 
-	pattern_Query_Subspace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 1, 0, 4, 1, 5, 3}, []string{"desmos", "subspaces", "v2", "subspace_id"}, "", runtime.AssumeColonVerbOpt(true)))
+	pattern_Query_Subspace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 1, 0, 4, 1, 5, 3}, []string{"desmos", "subspaces", "v3", "subspace_id"}, "", runtime.AssumeColonVerbOpt(true)))
 
-	pattern_Query_Sections_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"desmos", "subspaces", "v2", "subspace_id", "sections"}, "", runtime.AssumeColonVerbOpt(true)))
+	pattern_Query_Sections_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"desmos", "subspaces", "v3", "subspace_id", "sections"}, "", runtime.AssumeColonVerbOpt(true)))
 
-	pattern_Query_Section_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"desmos", "subspaces", "v2", "subspace_id", "sections", "section_id"}, "", runtime.AssumeColonVerbOpt(true)))
+	pattern_Query_Section_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"desmos", "subspaces", "v3", "subspace_id", "sections", "section_id"}, "", runtime.AssumeColonVerbOpt(true)))
 
-	pattern_Query_UserGroups_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"desmos", "subspaces", "v2", "subspace_id", "groups"}, "", runtime.AssumeColonVerbOpt(true)))
+	pattern_Query_UserGroups_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"desmos", "subspaces", "v3", "subspace_id", "groups"}, "", runtime.AssumeColonVerbOpt(true)))
 
-	pattern_Query_UserGroup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"desmos", "subspaces", "v2", "subspace_id", "groups", "group_id"}, "", runtime.AssumeColonVerbOpt(true)))
+	pattern_Query_UserGroup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"desmos", "subspaces", "v3", "subspace_id", "groups", "group_id"}, "", runtime.AssumeColonVerbOpt(true)))
 
-	pattern_Query_UserGroupMembers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"desmos", "subspaces", "v2", "subspace_id", "groups", "group_id", "members"}, "", runtime.AssumeColonVerbOpt(true)))
+	pattern_Query_UserGroupMembers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"desmos", "subspaces", "v3", "subspace_id", "groups", "group_id", "members"}, "", runtime.AssumeColonVerbOpt(true)))
 
-	pattern_Query_UserPermissions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"desmos", "subspaces", "v2", "subspace_id", "permissions", "user"}, "", runtime.AssumeColonVerbOpt(true)))
+	pattern_Query_UserPermissions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"desmos", "subspaces", "v3", "subspace_id", "permissions", "user"}, "", runtime.AssumeColonVerbOpt(true)))
 )
 
 var (


Test patch:
diff --git a/x/profiles/client/cli/cli_profile_test.go b/x/profiles/client/cli/cli_profile_test.go
index 09e9e8b7..3e78493b 100644
--- a/x/profiles/client/cli/cli_profile_test.go
+++ b/x/profiles/client/cli/cli_profile_test.go
@@ -51,10 +51,7 @@ func (s *IntegrationTestSuite) TestCmdQueryProfile() {
 				s.network.Validators[1].Address.String(),
 				fmt.Sprintf("--%s=json", tmcli.OutputFlag),
 			},
-			shouldErr: false,
-			expectedOutput: types.QueryProfileResponse{
-				Profile: nil,
-			},
+			shouldErr: true,
 		},
 		{
 			name: "existing profile is returned properly",
diff --git a/x/profiles/keeper/grpc_query_test.go b/x/profiles/keeper/grpc_query_test.go
index 5d47cc2a..bfe41b05 100644
--- a/x/profiles/keeper/grpc_query_test.go
+++ b/x/profiles/keeper/grpc_query_test.go
@@ -30,10 +30,9 @@ func (suite *KeeperTestSuite) TestQueryServer_Profile() {
 			shouldErr: true,
 		},
 		{
-			name:        "profile not found",
-			req:         types.NewQueryProfileRequest("cosmos19mj6dkd85m84gxvf8d929w572z5h9q0u8d8wpa"),
-			shouldErr:   false,
-			expResponse: &types.QueryProfileResponse{Profile: nil},
+			name:      "profile not found returns error",
+			req:       types.NewQueryProfileRequest("cosmos19mj6dkd85m84gxvf8d929w572z5h9q0u8d8wpa"),
+			shouldErr: true,
 		},
 		{
 			name: "found profile using DTag",
diff --git a/x/subspaces/client/cli/cli_test.go b/x/subspaces/client/cli/cli_test.go
index bf511d1a..3f4f4662 100644
--- a/x/subspaces/client/cli/cli_test.go
+++ b/x/subspaces/client/cli/cli_test.go
@@ -964,6 +964,8 @@ func (s *IntegrationTestSuite) TestCmdCreateUserGroup() {
 			name: "valid data returns no error",
 			args: []string{
 				"2", "testing-group",
+				fmt.Sprintf("--%s=%s", cli.FlagPermissions, types.PermissionSetPermissions),
+				fmt.Sprintf("--%s=%s", cli.FlagInitialMembers, "cosmos1g4yzh3q3grf804t4y4fuynrvrxtshgxy7j783f"),
 				fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
 				fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
 				fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
diff --git a/x/subspaces/keeper/msg_server_test.go b/x/subspaces/keeper/msg_server_test.go
index b9dae671..2184bc54 100644
--- a/x/subspaces/keeper/msg_server_test.go
+++ b/x/subspaces/keeper/msg_server_test.go
@@ -1398,6 +1398,7 @@ func (suite *KeeperTestsuite) TestMsgServer_CreateUserGroup() {
 				"group",
 				"description",
 				types.NewPermissions(types.PermissionEditSubspace),
+				nil,
 				"cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5",
 			),
 			shouldErr: true,
@@ -1421,6 +1422,7 @@ func (suite *KeeperTestsuite) TestMsgServer_CreateUserGroup() {
 				"group",
 				"description",
 				types.NewPermissions(types.PermissionEditSubspace),
+				nil,
 				"cosmos1y4emx0mm4ncva9mnv9yvjrm7nrq3psvmwhk9ll",
 			),
 			shouldErr: true,
@@ -1444,6 +1446,7 @@ func (suite *KeeperTestsuite) TestMsgServer_CreateUserGroup() {
 				"group",
 				"description",
 				types.NewPermissions(types.PermissionEditSubspace),
+				nil,
 				"cosmos1y4emx0mm4ncva9mnv9yvjrm7nrq3psvmwhk9ll",
 			),
 			shouldErr: true,
@@ -1474,6 +1477,7 @@ func (suite *KeeperTestsuite) TestMsgServer_CreateUserGroup() {
 				"group",
 				"description",
 				types.NewPermissions(types.PermissionEditSubspace),
+				nil,
 				"cosmos1y4emx0mm4ncva9mnv9yvjrm7nrq3psvmwhk9ll",
 			),
 			shouldErr: true,
@@ -1514,6 +1518,7 @@ func (suite *KeeperTestsuite) TestMsgServer_CreateUserGroup() {
 				"another group",
 				"another description",
 				types.NewPermissions("invalid"),
+				nil,
 				"cosmos1x5pjlvufs4znnhhkwe8v4tw3kz30f3lxgwza53",
 			),
 			shouldErr: true,
@@ -1554,6 +1559,7 @@ func (suite *KeeperTestsuite) TestMsgServer_CreateUserGroup() {
 				"another group",
 				"another description",
 				types.NewPermissions(types.PermissionEditSubspace),
+				[]string{"cosmos16yhs7fgqnf6fjm4tftv66g2smtmee62wyg780l"},
 				"cosmos1x5pjlvufs4znnhhkwe8v4tw3kz30f3lxgwza53",
 			),
 			shouldErr:   false,
@@ -1570,10 +1576,17 @@ func (suite *KeeperTestsuite) TestMsgServer_CreateUserGroup() {
 					sdk.NewAttribute(types.AttributeKeySubspaceID, "1"),
 					sdk.NewAttribute(types.AttributeKeyUserGroupID, "2"),
 				),
+				sdk.NewEvent(
+					types.EventTypeAddUserToGroup,
+					sdk.NewAttribute(types.AttributeKeySubspaceID, "1"),
+					sdk.NewAttribute(types.AttributeKeyUserGroupID, "2"),
+					sdk.NewAttribute(types.AttributeKeyUser, "cosmos16yhs7fgqnf6fjm4tftv66g2smtmee62wyg780l"),
+				),
 			},
 			check: func(ctx sdk.Context) {
 				suite.Require().True(suite.k.HasUserGroup(ctx, 1, 1))
 				suite.Require().True(suite.k.HasUserGroup(ctx, 1, 2))
+				suite.Require().True(suite.k.IsMemberOfGroup(ctx, 1, 2, "cosmos16yhs7fgqnf6fjm4tftv66g2smtmee62wyg780l"))
 			},
 		},
 	}
diff --git a/x/subspaces/types/msgs_test.go b/x/subspaces/types/msgs_test.go
index 4a905fe9..3fa0295f 100644
--- a/x/subspaces/types/msgs_test.go
+++ b/x/subspaces/types/msgs_test.go
@@ -582,6 +582,7 @@ var msgCreateUserGroup = types.NewMsgCreateUserGroup(
 	"Group",
 	"Description",
 	types.NewPermissions(types.PermissionEditSubspace),
+	[]string{"cosmos16yhs7fgqnf6fjm4tftv66g2smtmee62wyg780l"},
 	"cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5",
 )
 
@@ -607,6 +608,7 @@ func TestMsgCreateUserGroup_ValidateBasic(t *testing.T) {
 				"group",
 				"description",
 				types.NewPermissions(types.PermissionEditSubspace),
+				[]string{"cosmos16yhs7fgqnf6fjm4tftv66g2smtmee62wyg780l"},
 				"cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5",
 			),
 			shouldErr: true,
@@ -619,6 +621,7 @@ func TestMsgCreateUserGroup_ValidateBasic(t *testing.T) {
 				"",
 				"description",
 				types.NewPermissions(types.PermissionEditSubspace),
+				[]string{"cosmos16yhs7fgqnf6fjm4tftv66g2smtmee62wyg780l"},
 				"cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5",
 			),
 			shouldErr: true,
@@ -631,6 +634,20 @@ func TestMsgCreateUserGroup_ValidateBasic(t *testing.T) {
 				"group",
 				"description",
 				types.NewPermissions("INVALID"),
+				[]string{"cosmos16yhs7fgqnf6fjm4tftv66g2smtmee62wyg780l"},
+				"cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5",
+			),
+			shouldErr: true,
+		},
+		{
+			name: "invalid initial member returns error",
+			msg: types.NewMsgCreateUserGroup(
+				1,
+				1,
+				"group",
+				"description",
+				types.NewPermissions(types.PermissionEditSubspace),
+				[]string{""},
 				"cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5",
 			),
 			shouldErr: true,
@@ -643,6 +660,7 @@ func TestMsgCreateUserGroup_ValidateBasic(t *testing.T) {
 				"group",
 				"description",
 				types.NewPermissions(types.PermissionEditSubspace),
+				[]string{"cosmos16yhs7fgqnf6fjm4tftv66g2smtmee62wyg780l"},
 				"cosmos1m0czrla04f7rp3zg7dsgc4kl",
 			),
 			shouldErr: true,
@@ -667,7 +685,7 @@ func TestMsgCreateUserGroup_ValidateBasic(t *testing.T) {
 }
 
 func TestMsgCreateUserGroup_GetSignBytes(t *testing.T) {
-	expected := `{"type":"desmos/MsgCreateUserGroup","value":{"creator":"cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5","default_permissions":["EDIT_SUBSPACE"],"description":"Description","name":"Group","subspace_id":"1"}}`
+	expected := `{"type":"desmos/MsgCreateUserGroup","value":{"creator":"cosmos1m0czrla04f7rp3zg7dsgc4kla54q7pc4xt00l5","default_permissions":["EDIT_SUBSPACE"],"description":"Description","initial_members":["cosmos16yhs7fgqnf6fjm4tftv66g2smtmee62wyg780l"],"name":"Group","subspace_id":"1"}}`
 	require.Equal(t, expected, string(msgCreateUserGroup.GetSignBytes()))
 }
 
diff --git a/x/subspaces/wasm/msg_parser_test.go b/x/subspaces/wasm/msg_parser_test.go
index bb3c34df..f827d3ea 100644
--- a/x/subspaces/wasm/msg_parser_test.go
+++ b/x/subspaces/wasm/msg_parser_test.go
@@ -99,6 +99,7 @@ func TestMsgsParser_ParseCustomMsgs(t *testing.T) {
 					"test",
 					"",
 					types.NewPermissions(types.PermissionEverything),
+					[]string{"cosmos16yhs7fgqnf6fjm4tftv66g2smtmee62wyg780l"},
 					"cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69",
 				),
 			),
@@ -109,6 +110,7 @@ func TestMsgsParser_ParseCustomMsgs(t *testing.T) {
 				"test",
 				"",
 				types.NewPermissions(types.PermissionEverything),
+				[]string{"cosmos16yhs7fgqnf6fjm4tftv66g2smtmee62wyg780l"},
 				"cosmos1qzskhrcjnkdz2ln4yeafzsdwht8ch08j4wed69",
 			)},
 		},