diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactManager.java
index 55768a660cd18fad0c76da6f6c13e600091f3f9f..e2732145a8420d6b3265c2388d65fb256a8c1279 100644
--- a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactManager.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactManager.java
@@ -114,6 +114,11 @@ public interface ContactManager {
 	boolean contactExists(AuthorId remoteAuthorId, AuthorId localAuthorId)
 			throws DbException;
 
+	/**
+	 * Returns the {@link AuthorInfo} for the given author.
+	 */
+	AuthorInfo getAuthorInfo(AuthorId a) throws DbException;
+
 	/**
 	 * Returns the {@link AuthorInfo} for the given author.
 	 */
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java
index 49ecdaf13e4e2cef9c34400cf9e6754849e5905e..71a63c9b57f32dc3ba47c6e90b8c3da8e1b62b03 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java
@@ -201,6 +201,11 @@ class ContactManagerImpl implements ContactManager {
 		db.removeContact(txn, c);
 	}
 
+	@Override
+	public AuthorInfo getAuthorInfo(AuthorId a) throws DbException {
+		return db.transactionWithResult(true, txn -> getAuthorInfo(txn, a));
+	}
+
 	@Override
 	public AuthorInfo getAuthorInfo(Transaction txn, AuthorId authorId)
 			throws DbException {
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java
index ce8bcabd44b315cd9abd69f363e488d55dd10a31..1dea4f9df9850cf0b34faed098dfd2cab908abaa 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java
@@ -224,7 +224,28 @@ public class ContactManagerImplTest extends BrambleMockTestCase {
 	}
 
 	@Test
-	public void testGetAuthorStatus() throws DbException {
+	public void testGetAuthorStatus() throws Exception {
+		Transaction txn = new Transaction(null, true);
+		Collection<Contact> contacts = singletonList(
+				new Contact(new ContactId(1), remote, localAuthor.getId(),
+						alias, false, true));
+
+		context.checking(new DbExpectations() {{
+			oneOf(db).transactionWithResult(with(equal(true)),
+					withDbCallable(txn));
+			oneOf(identityManager).getLocalAuthor(txn);
+			will(returnValue(localAuthor));
+			oneOf(db).getContactsByAuthorId(txn, remote.getId());
+			will(returnValue(contacts));
+		}});
+		AuthorInfo authorInfo =
+				contactManager.getAuthorInfo(txn, remote.getId());
+		assertEquals(UNVERIFIED, authorInfo.getStatus());
+		assertEquals(alias, contact.getAlias());
+	}
+
+	@Test
+	public void testGetAuthorStatusTransaction() throws DbException {
 		Transaction txn = new Transaction(null, true);
 
 		// check unknown author
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/DbExpectations.java b/bramble-core/src/test/java/org/briarproject/bramble/test/DbExpectations.java
index 4493552d3a0f4d8842f42394a1c976bb32540f7c..8c5fa8f281e2e308acb97a39a3ccebdac26aa55a 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/test/DbExpectations.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/test/DbExpectations.java
@@ -1,5 +1,6 @@
 package org.briarproject.bramble.test;
 
+import org.briarproject.bramble.api.db.DbCallable;
 import org.briarproject.bramble.api.db.DbRunnable;
 import org.briarproject.bramble.api.db.Transaction;
 import org.jmock.Expectations;
@@ -13,4 +14,11 @@ public class DbExpectations extends Expectations {
 		return null;
 	}
 
+	protected <R, E extends Exception> DbCallable<R, E> withDbCallable(
+			Transaction txn) {
+		addParameterMatcher(any(DbCallable.class));
+		currentBuilder().setAction(new RunTransactionWithResultAction(txn));
+		return null;
+	}
+
 }
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/RunTransactionWithResultAction.java b/bramble-core/src/test/java/org/briarproject/bramble/test/RunTransactionWithResultAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..cbd22b1260fc2d020b789c622db4c1ebfb3fa79e
--- /dev/null
+++ b/bramble-core/src/test/java/org/briarproject/bramble/test/RunTransactionWithResultAction.java
@@ -0,0 +1,27 @@
+package org.briarproject.bramble.test;
+
+import org.briarproject.bramble.api.db.DbCallable;
+import org.briarproject.bramble.api.db.Transaction;
+import org.hamcrest.Description;
+import org.jmock.api.Action;
+import org.jmock.api.Invocation;
+
+public class RunTransactionWithResultAction implements Action {
+
+	private final Transaction txn;
+
+	public RunTransactionWithResultAction(Transaction txn) {
+		this.txn = txn;
+	}
+
+	@Override
+	public Object invoke(Invocation invocation) throws Throwable {
+		DbCallable task = (DbCallable) invocation.getParameter(1);
+		return task.call(txn);
+	}
+
+	@Override
+	public void describeTo(Description description) {
+		description.appendText("runs a task inside a database transaction");
+	}
+}