diff --git a/briar-api/src/org/briarproject/api/privategroup/PrivateGroupManager.java b/briar-api/src/org/briarproject/api/privategroup/PrivateGroupManager.java
index 956a42344649b2d88cdbf0924d4c5ab1cda0986d..f2253c99a7c0c1999c1910146602e586ba4cf153 100644
--- a/briar-api/src/org/briarproject/api/privategroup/PrivateGroupManager.java
+++ b/briar-api/src/org/briarproject/api/privategroup/PrivateGroupManager.java
@@ -18,6 +18,9 @@ public interface PrivateGroupManager extends MessageTracker {
 	@NotNull
 	ClientId getClientId();
 
+	/** Adds a new private group. */
+	GroupId addPrivateGroup(String name) throws DbException;
+
 	/** Removes a dissolved private group. */
 	void removePrivateGroup(GroupId g) throws DbException;
 
diff --git a/briar-core/src/org/briarproject/privategroup/PrivateGroupManagerImpl.java b/briar-core/src/org/briarproject/privategroup/PrivateGroupManagerImpl.java
index 6f40bd9c6c9c069c4e9de80d9cbfa7c887626b53..05c2d4021c4c766a2cdbcb89baea7e792a594aeb 100644
--- a/briar-core/src/org/briarproject/privategroup/PrivateGroupManagerImpl.java
+++ b/briar-core/src/org/briarproject/privategroup/PrivateGroupManagerImpl.java
@@ -28,6 +28,7 @@ import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import java.security.GeneralSecurityException;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.logging.Logger;
@@ -70,6 +71,21 @@ public class PrivateGroupManagerImpl extends BdfIncomingMessageHook implements
 		return CLIENT_ID;
 	}
 
+	@Override
+	public GroupId addPrivateGroup(String name) throws DbException {
+		PrivateGroup group;
+		Transaction txn = db.startTransaction(false);
+		try {
+			LocalAuthor a = identityManager.getLocalAuthor(txn);
+			group = privateGroupFactory.createPrivateGroup(name, a);
+			db.addGroup(txn, group.getGroup());
+			txn.setComplete();
+		} finally {
+			db.endTransaction(txn);
+		}
+		return group.getId();
+	}
+
 	@Override
 	public void removePrivateGroup(GroupId g) throws DbException {
 
@@ -137,7 +153,24 @@ public class PrivateGroupManagerImpl extends BdfIncomingMessageHook implements
 	@NotNull
 	@Override
 	public Collection<PrivateGroup> getPrivateGroups() throws DbException {
-		return Collections.emptyList();
+		Collection<Group> groups;
+		Transaction txn = db.startTransaction(true);
+		try {
+			groups = db.getGroups(txn, getClientId());
+			txn.setComplete();
+		} finally {
+			db.endTransaction(txn);
+		}
+		try {
+			Collection<PrivateGroup> privateGroups =
+					new ArrayList<PrivateGroup>(groups.size());
+			for (Group g : groups) {
+				privateGroups.add(privateGroupFactory.parsePrivateGroup(g));
+			}
+			return privateGroups;
+		} catch (FormatException e) {
+			throw new DbException(e);
+		}
 	}
 
 	@Override