diff --git a/app/src/main/java/io/elixxir/dapp/bindings/data/Cmix.kt b/app/src/main/java/io/elixxir/dapp/bindings/data/Cmix.kt
index be20d16dd7af7162344a4093c9cea6da3eacf7cd..ef91c1f5b20cf25aeb691f2a3826d611cb664be9 100644
--- a/app/src/main/java/io/elixxir/dapp/bindings/data/Cmix.kt
+++ b/app/src/main/java/io/elixxir/dapp/bindings/data/Cmix.kt
@@ -1,19 +1,31 @@
 package io.elixxir.dapp.bindings.data
 
-import bindings.ReceptionIdentity
-import io.elixxir.dapp.bindings.model.Connection
+import io.elixxir.dapp.bindings.model.*
+import io.elixxir.dapp.bindings.model.Contact
+import io.elixxir.dapp.bindings.model.E2eId
 import io.elixxir.dapp.bindings.model.NetworkFollowerStatus
-import io.elixxir.dapp.bindings.model.NodeRegistrationStatus
 
 internal interface Cmix {
-    fun connect(): Connection
-    fun startNetworkFollower()
+    fun connect(
+        e2eId: E2eId,
+        recipientContact: Contact,
+        e2eParams: E2eParams
+    ): Connection
+
+    fun startNetworkFollower(timeoutMs: Long)
+
     fun stopNetworkFollower()
+
     fun isNetworkHealthy(): Boolean
-    fun registerHealthCallback()
-    fun unregisterHealthCallback()
+
+    fun registerHealthListener(listener: NetworkHealthListener): HealthListenerId
+
+    fun unregisterHealthListener(id: HealthListenerId)
+
     fun getNodeRegistrationStatus(): NodeRegistrationStatus
+
     fun makeReceptionIdentity(): ReceptionIdentity
+
     fun getNetworkFollowerStatus(): NetworkFollowerStatus
 }
 
diff --git a/app/src/main/java/io/elixxir/dapp/bindings/data/CmixAdapter.kt b/app/src/main/java/io/elixxir/dapp/bindings/data/CmixAdapter.kt
index 61bfbccc4e3160d1f0cc9b9a918e5d6f56d1ecd9..7c7203b420eee201f6b19c9062adf296b788f253 100644
--- a/app/src/main/java/io/elixxir/dapp/bindings/data/CmixAdapter.kt
+++ b/app/src/main/java/io/elixxir/dapp/bindings/data/CmixAdapter.kt
@@ -1,47 +1,62 @@
 package io.elixxir.dapp.bindings.data
 
-import bindings.ReceptionIdentity
+import io.elixxir.dapp.bindings.model.*
 import io.elixxir.dapp.bindings.model.Connection
+import io.elixxir.dapp.bindings.model.Contact
+import io.elixxir.dapp.bindings.model.E2eId
+import io.elixxir.dapp.bindings.model.E2eParams
 import io.elixxir.dapp.bindings.model.NetworkFollowerStatus
-import io.elixxir.dapp.bindings.model.NodeRegistrationStatus
 import bindings.Cmix as CoreCmix
 
 @JvmInline
 internal value class CmixAdapter(private val cmix: CoreCmix) : Cmix {
 
-    override fun connect(): Connection {
-        TODO("Not yet implemented")
+    override fun connect(
+        e2eId: E2eId,
+        recipientContact: Contact,
+        e2eParams: E2eParams
+    ): Connection {
+        // TODO: Use factory method to get Connection implementation
+        return ConnectionAdapter(
+            cmix.connect(
+                e2eId.value,
+                recipientContact.value,
+                e2eParams.value
+            )
+        )
     }
 
-    override fun startNetworkFollower() {
-        TODO("Not yet implemented")
+    override fun startNetworkFollower(timeoutMs: Long) {
+        cmix.startNetworkFollower(timeoutMs)
     }
 
     override fun stopNetworkFollower() {
-        TODO("Not yet implemented")
+        cmix.stopNetworkFollower()
     }
 
     override fun isNetworkHealthy(): Boolean {
-        TODO("Not yet implemented")
+        return cmix.isHealthy
     }
 
-    override fun registerHealthCallback() {
-        TODO("Not yet implemented")
+    override fun registerHealthListener(listener: NetworkHealthListener): HealthListenerId {
+        return HealthListenerId(
+            cmix.addHealthCallback(HealthCallbackAdapter.placeholder)
+        )
     }
 
-    override fun unregisterHealthCallback() {
-        TODO("Not yet implemented")
+    override fun unregisterHealthListener(id: HealthListenerId) {
+        cmix.removeHealthCallback(id.value)
     }
 
     override fun getNodeRegistrationStatus(): NodeRegistrationStatus {
-        TODO("Not yet implemented")
+        return NodeRegistrationStatus(cmix.nodeRegistrationStatus)
     }
 
     override fun makeReceptionIdentity(): ReceptionIdentity {
-        TODO("Not yet implemented")
+        return ReceptionIdentity(cmix.makeReceptionIdentity())
     }
 
     override fun getNetworkFollowerStatus(): NetworkFollowerStatus {
-        TODO("Not yet implemented")
+        return NetworkFollowerStatus.from(cmix.networkFollowerStatus())
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChat.kt b/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChat.kt
index 162e8d766c89abbfd36e8a73de2a661167802aa5..ff2d4d85dc13963b169eca4d310649f2f3daa343 100644
--- a/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChat.kt
+++ b/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChat.kt
@@ -1,11 +1,14 @@
 package io.elixxir.dapp.bindings.data
 
+import io.elixxir.dapp.bindings.model.GroupInfo
+import io.elixxir.dapp.bindings.model.GroupReport
+import io.elixxir.dapp.group.model.Group
 import io.elixxir.dapp.group.model.GroupId
 
 internal interface GroupChat {
-    fun getGroup(groupId: GroupId)
-    fun joinGroup()
-    fun leaveGroup()
-    fun makeGroup()
-    fun resendInvitation()
+    fun getGroup(groupId: GroupId): Group
+    fun joinGroup(trackedGroupId: Long)
+    fun leaveGroup(groupId: GroupId)
+    fun makeGroup(info: GroupInfo): GroupReport
+    fun resendInvitations(group: Group): GroupReport
 }
\ No newline at end of file
diff --git a/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChatAdapter.kt b/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChatAdapter.kt
index a2252a980b036a1731de9f012b2aa60206c7f640..277bc79934ddb01b67f6d5fcafd91a4b67483845 100644
--- a/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChatAdapter.kt
+++ b/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChatAdapter.kt
@@ -1,26 +1,37 @@
 package io.elixxir.dapp.bindings.data
 
+import io.elixxir.dapp.bindings.model.GroupAdapter
+import io.elixxir.dapp.bindings.model.GroupInfo
+import io.elixxir.dapp.bindings.model.GroupReport
+import io.elixxir.dapp.group.model.Group
 import io.elixxir.dapp.group.model.GroupId
 import bindings.GroupChat as CoreGroupChat
 
 internal class GroupChatAdapter(private val groupChat: CoreGroupChat) : GroupChat {
-    override fun getGroup(groupId: GroupId) {
-        TODO("Not yet implemented")
+    override fun getGroup(groupId: GroupId): Group {
+         return GroupAdapter(groupChat.getGroup(groupId.value))
     }
 
-    override fun joinGroup() {
-        TODO("Not yet implemented")
+    override fun joinGroup(trackedGroupId: Long) {
+        groupChat.joinGroup(trackedGroupId)
     }
 
-    override fun leaveGroup() {
-        TODO("Not yet implemented")
+    override fun leaveGroup(groupId: GroupId) {
+        groupChat.leaveGroup(groupId.value)
     }
 
-    override fun makeGroup() {
-        TODO("Not yet implemented")
+    override fun makeGroup(info: GroupInfo): GroupReport {
+        return GroupReport(
+            groupChat.makeGroup(
+                info.membershipData.value,
+                info.description.toByteArray(),
+                info.name.toByteArray())
+        )
     }
 
-    override fun resendInvitation() {
-        TODO("Not yet implemented")
+    override fun resendInvitations(group: Group): GroupReport {
+        return GroupReport(
+            groupChat.resendRequest(group.groupId.value)
+        )
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/Group.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/Group.kt
deleted file mode 100644
index 1bf99c9b1615aa6e036f299028023c1f5c12b18d..0000000000000000000000000000000000000000
--- a/app/src/main/java/io/elixxir/dapp/bindings/model/Group.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package io.elixxir.dapp.bindings.model
-
-import io.elixxir.dapp.group.model.GroupId
-
-internal interface Group {
-    val id: GroupId
-    val name: String
-    val initMessage: String
-    val members: List<String>
-    val creationTimeMs: Long
-}
\ No newline at end of file
diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/GroupAdapter.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupAdapter.kt
new file mode 100644
index 0000000000000000000000000000000000000000..07a97a7dd461756db4966f651cd4f6e2f5ed3908
--- /dev/null
+++ b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupAdapter.kt
@@ -0,0 +1,20 @@
+package io.elixxir.dapp.bindings.model
+
+import io.elixxir.dapp.group.model.Group
+import io.elixxir.dapp.group.model.GroupId
+import io.elixxir.dapp.user.model.User
+import bindings.Group as CoreGroup
+
+@JvmInline
+internal value class GroupAdapter(val value: CoreGroup): Group {
+    override val groupId: GroupId
+        get() = GroupId(value.id)
+    override val name: String
+        get() = String(value.name)
+    override val description: String
+        get() = String(value.initMessage)
+    override val members: List<User>
+        get() = listOf()
+    override val creator: User
+        get() = User.placeholder
+}
\ No newline at end of file
diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/GroupInfo.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupInfo.kt
new file mode 100644
index 0000000000000000000000000000000000000000..84b84ddc462d0d106fa3540432617f7529acdae0
--- /dev/null
+++ b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupInfo.kt
@@ -0,0 +1,7 @@
+package io.elixxir.dapp.bindings.model
+
+internal data class GroupInfo(
+    val membershipData: GroupMembership,
+    val description: String,
+    val name: String
+)
\ No newline at end of file
diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/GroupMembership.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupMembership.kt
new file mode 100644
index 0000000000000000000000000000000000000000..04c32bf12a8c43c125e569625d0256a9e3c00238
--- /dev/null
+++ b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupMembership.kt
@@ -0,0 +1,4 @@
+package io.elixxir.dapp.bindings.model
+
+@JvmInline
+internal value class GroupMembership(val value: ByteArray)
\ No newline at end of file
diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/GroupReport.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupReport.kt
new file mode 100644
index 0000000000000000000000000000000000000000..c70edbb833711757ee5d25fbcb4cec8cef6abc2c
--- /dev/null
+++ b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupReport.kt
@@ -0,0 +1,4 @@
+package io.elixxir.dapp.bindings.model
+
+@JvmInline
+internal value class GroupReport(val value: ByteArray)
\ No newline at end of file
diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/HealthCallback.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/HealthCallback.kt
new file mode 100644
index 0000000000000000000000000000000000000000..bc5aec42b9d98577f51da4b26cdc19228eaac4d3
--- /dev/null
+++ b/app/src/main/java/io/elixxir/dapp/bindings/model/HealthCallback.kt
@@ -0,0 +1,24 @@
+package io.elixxir.dapp.bindings.model
+
+internal interface NetworkHealthListener {
+    fun onHealthChanged(isHealthy: Boolean)
+}
+
+internal class HealthCallbackAdapter(
+    private val listener: NetworkHealthListener
+) : NetworkHealthListener by listener,
+    bindings.NetworkHealthCallback
+{
+    override fun callback(isHealthy: Boolean) {
+        onHealthChanged(isHealthy)
+    }
+
+    companion object {
+        val placeholder: HealthCallbackAdapter =
+            HealthCallbackAdapter(
+                object : NetworkHealthListener {
+                    override fun onHealthChanged(isHealthy: Boolean) { }
+                }
+            )
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/HealthListenerId.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/HealthListenerId.kt
new file mode 100644
index 0000000000000000000000000000000000000000..5034d6810b296e4fb05643409eb1b3c8fafc07c9
--- /dev/null
+++ b/app/src/main/java/io/elixxir/dapp/bindings/model/HealthListenerId.kt
@@ -0,0 +1,4 @@
+package io.elixxir.dapp.bindings.model
+
+@JvmInline
+internal value class HealthListenerId(val value: Long)
\ No newline at end of file
diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/NodeRegistrationStatus.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/NodeRegistrationStatus.kt
index 90fb610b62c769f4880fd514bf570662b9837e17..620eee54a3914d7de4577827aa5882f7f6a01ee7 100644
--- a/app/src/main/java/io/elixxir/dapp/bindings/model/NodeRegistrationStatus.kt
+++ b/app/src/main/java/io/elixxir/dapp/bindings/model/NodeRegistrationStatus.kt
@@ -1,4 +1,4 @@
 package io.elixxir.dapp.bindings.model
 
-class NodeRegistrationStatus {
-}
\ No newline at end of file
+@JvmInline
+internal value class NodeRegistrationStatus(val value: ByteArray)
\ No newline at end of file
diff --git a/app/src/main/java/io/elixxir/dapp/user/model/User.kt b/app/src/main/java/io/elixxir/dapp/user/model/User.kt
index 056dbd64805f81cd27c56fe1febd1449cce01f3e..c24e22376e3aca42596669f4387cc917c91789d2 100644
--- a/app/src/main/java/io/elixxir/dapp/user/model/User.kt
+++ b/app/src/main/java/io/elixxir/dapp/user/model/User.kt
@@ -3,6 +3,16 @@ package io.elixxir.dapp.user.model
 interface User {
     val userId: Long
     val username: String
-    val phone: String
-    val email: String
+    val phone: String?
+    val email: String?
+
+    companion object {
+        val placeholder = object : User {
+            override val userId: Long = 0
+            override val username: String = ""
+            override val phone: String? = null
+            override val email: String? = null
+
+        }
+    }
 }
\ No newline at end of file