diff --git a/server/src/jamid/jami-swig.ts b/server/src/jamid/jami-swig.ts
index b072328..1ada8e9 100644
--- a/server/src/jamid/jami-swig.ts
+++ b/server/src/jamid/jami-swig.ts
@@ -16,7 +16,7 @@
  * <https://www.gnu.org/licenses/>.
  */
 import { Constructable } from '../interfaces.js';
-import { itMap, itRange, itToArr, itToMap, itToRecord } from './utils.js';
+import { itMap, itRange, itToArr, itToRecord } from './utils.js';
 
 enum Bool {
   False = 'false',
@@ -47,11 +47,9 @@
 export type VectMap = SwigVec<StringMap>;
 // export type Blob = SwigVec<number>;
 
-// TODO: Consider always converting to Record rather than Map as conversion to interfaces is easier
 export const stringVectToArray = (sv: StringVect) => itToArr(swigVecToIt(sv));
 export const stringMapToRecord = (sm: StringMap) => itToRecord(swigMapToIt(sm));
-export const stringMapToMap = (sm: StringMap) => itToMap(swigMapToIt(sm));
-// export const vectMapToArrayMap = (vm: VectMap) => itToArr(itMap(swigVecToIt(vm), stringMapToMap));
+export const vectMapToRecordArray = (vm: VectMap) => itToArr(itMap(swigVecToIt(vm), stringMapToRecord));
 
 /**
  * Non-exhaustive list of properties for JamiSwig.
diff --git a/server/src/jamid/jamid.ts b/server/src/jamid/jamid.ts
index 8676875..27ff0e3 100644
--- a/server/src/jamid/jamid.ts
+++ b/server/src/jamid/jamid.ts
@@ -34,10 +34,11 @@
   RegistrationStateChanged,
   VolatileDetailsChanged,
 } from './jami-signal-interfaces.js';
-import { JamiSwig, StringMap, stringMapToRecord, stringVectToArray } from './jami-swig.js';
+import { JamiSwig, StringMap, stringMapToRecord, stringVectToArray, vectMapToRecordArray } from './jami-swig.js';
 import { require } from './utils.js';
 
 // TODO: Mechanism to map account IDs to a list of WebSockets
+// TODO: Convert Records to interfaces and replace them in common/ (e.g. Contact)
 
 @Service()
 export class Jamid {
@@ -230,6 +231,26 @@
     return stringMapToRecord(this.jamiSwig.getKnownRingDevices(accountId));
   }
 
+  addContact(accountId: string, contactId: string) {
+    this.jamiSwig.addContact(accountId, contactId);
+  }
+
+  removeContact(accountId: string, contactId: string) {
+    this.jamiSwig.removeContact(accountId, contactId, false);
+  }
+
+  blockContact(accountId: string, contactId: string) {
+    this.jamiSwig.removeContact(accountId, contactId, true);
+  }
+
+  getContacts(accountId: string): Record<string, string>[] {
+    return vectMapToRecordArray(this.jamiSwig.getContacts(accountId));
+  }
+
+  getContactDetails(accountId: string, contactId: string): Record<string, string> {
+    return stringMapToRecord(this.jamiSwig.getContactDetails(accountId, contactId));
+  }
+
   getDefaultModerators(accountId: string): string[] {
     return stringVectToArray(this.jamiSwig.getDefaultModerators(accountId));
   }
diff --git a/server/src/jamid/utils.ts b/server/src/jamid/utils.ts
index 0952fec..f692578 100644
--- a/server/src/jamid/utils.ts
+++ b/server/src/jamid/utils.ts
@@ -43,14 +43,6 @@
 
 export const itToArr = <T>(it: Iterable<T>) => Array.from(it);
 
-export const itToMap = <T, U>(it: Iterable<[T, U]>) => {
-  const m = new Map<T, U>();
-  for (const [k, v] of it) {
-    m.set(k, v);
-  }
-  return m;
-};
-
 export const itToRecord = <T>(it: Iterable<[string, T]>) => {
   const r: Record<string, T> = {};
   for (const [k, v] of it) {
