diff --git a/Examples/xx-messenger/Package.swift b/Examples/xx-messenger/Package.swift
index 84704908d409169e4dd5cfdf8dabff36b8733b0a..f4fa8cab5742fa457d07a1761ac84022860dfd71 100644
--- a/Examples/xx-messenger/Package.swift
+++ b/Examples/xx-messenger/Package.swift
@@ -266,6 +266,7 @@ let package = Package(
       name: "GroupsFeature",
       dependencies: [
         .target(name: "AppCore"),
+        .target(name: "NewGroupFeature"),
         .product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
         .product(name: "ComposablePresentation", package: "swift-composable-presentation"),
         .product(name: "XXClient", package: "elixxir-dapps-sdk-swift"),
diff --git a/Examples/xx-messenger/Sources/GroupsFeature/GroupsComponent.swift b/Examples/xx-messenger/Sources/GroupsFeature/GroupsComponent.swift
index 9d12a95d49af444dc165f3b92ddbc6838ffb0ca0..e5b01a9e8316dfe5ef8fd4367634eb3bc34909a2 100644
--- a/Examples/xx-messenger/Sources/GroupsFeature/GroupsComponent.swift
+++ b/Examples/xx-messenger/Sources/GroupsFeature/GroupsComponent.swift
@@ -1,23 +1,31 @@
 import AppCore
 import ComposableArchitecture
+import ComposablePresentation
 import Foundation
+import NewGroupFeature
 import XXModels
 
 public struct GroupsComponent: ReducerProtocol {
   public struct State: Equatable {
     public init(
-      groups: IdentifiedArrayOf<Group> = []
+      groups: IdentifiedArrayOf<Group> = [],
+      newGroup: NewGroupComponent.State? = nil
     ) {
       self.groups = groups
+      self.newGroup = newGroup
     }
 
     public var groups: IdentifiedArrayOf<XXModels.Group> = []
+    public var newGroup: NewGroupComponent.State?
   }
 
   public enum Action: Equatable {
     case start
     case didFetchGroups([XXModels.Group])
     case didSelectGroup(XXModels.Group)
+    case newGroupButtonTapped
+    case newGroupDismissed
+    case newGroup(NewGroupComponent.Action)
   }
 
   public init() {}
@@ -45,7 +53,24 @@ public struct GroupsComponent: ReducerProtocol {
 
       case .didSelectGroup(_):
         return .none
+
+      case .newGroupButtonTapped:
+        state.newGroup = NewGroupComponent.State()
+        return .none
+
+      case .newGroupDismissed:
+        state.newGroup = nil
+        return .none
+
+      case .newGroup(_):
+        return .none
       }
     }
+    .presenting(
+      state: .keyPath(\.newGroup),
+      id: .notNil(),
+      action: /Action.newGroup,
+      presented: { NewGroupComponent() }
+    )
   }
 }
diff --git a/Examples/xx-messenger/Sources/GroupsFeature/GroupsView.swift b/Examples/xx-messenger/Sources/GroupsFeature/GroupsView.swift
index 79e102148377c3f30234df5ff32e9fd021f5d2ce..847381f51ea018ca1b81e3654d7743b5a8011b0d 100644
--- a/Examples/xx-messenger/Sources/GroupsFeature/GroupsView.swift
+++ b/Examples/xx-messenger/Sources/GroupsFeature/GroupsView.swift
@@ -1,5 +1,7 @@
 import AppCore
 import ComposableArchitecture
+import ComposablePresentation
+import NewGroupFeature
 import SwiftUI
 import XXModels
 
@@ -21,6 +23,10 @@ public struct GroupsView: View {
   public var body: some View {
     WithViewStore(store, observe: ViewState.init) { viewStore in
       Form {
+        newGroupButton {
+          viewStore.send(.newGroupButtonTapped)
+        }
+
         ForEach(viewStore.groups) { group in
           groupView(group) {
             viewStore.send(.didSelectGroup(group))
@@ -28,10 +34,32 @@ public struct GroupsView: View {
         }
       }
       .navigationTitle("Groups")
+      .background(NavigationLinkWithStore(
+        store.scope(
+          state: \.newGroup,
+          action: Component.Action.newGroup
+        ),
+        onDeactivate: { viewStore.send(.newGroupDismissed) },
+        destination: NewGroupView.init
+      ))
       .task { viewStore.send(.start) }
     }
   }
 
+  func newGroupButton(action: @escaping () -> Void) -> some View {
+    Section {
+      Button {
+        action()
+      } label: {
+        HStack {
+          Text("New Group")
+          Spacer()
+          Image(systemName: "chevron.forward")
+        }
+      }
+    }
+  }
+
   func groupView(
     _ group: XXModels.Group,
     onSelect: @escaping () -> Void
diff --git a/Examples/xx-messenger/Tests/GroupsFeatureTests/GroupsComponentTests.swift b/Examples/xx-messenger/Tests/GroupsFeatureTests/GroupsComponentTests.swift
index c726955f4cc892ecffda8694a3a5bec90c54544d..7a7f93016ddd8875e08162832788f0735755d3a0 100644
--- a/Examples/xx-messenger/Tests/GroupsFeatureTests/GroupsComponentTests.swift
+++ b/Examples/xx-messenger/Tests/GroupsFeatureTests/GroupsComponentTests.swift
@@ -1,6 +1,7 @@
 import Combine
 import ComposableArchitecture
 import CustomDump
+import NewGroupFeature
 import XCTest
 import XXModels
 @testable import GroupsFeature
@@ -73,6 +74,21 @@ final class GroupsComponentTests: XCTestCase {
 
     store.send(.didSelectGroup(.stub(2)))
   }
+
+  func testNewGroup() {
+    let store = TestStore(
+      initialState: GroupsComponent.State(),
+      reducer: GroupsComponent()
+    )
+
+    store.send(.newGroupButtonTapped) {
+      $0.newGroup = NewGroupComponent.State()
+    }
+
+    store.send(.newGroupDismissed) {
+      $0.newGroup = nil
+    }
+  }
 }
 
 private extension XXModels.Group {