diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java
index 45bba640147292976cc416122031a72bc8c2408c..144c94c9c098f4b83ce39f7f7bf9f1c9102a31d2 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java
@@ -37,6 +37,7 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -393,7 +394,7 @@ abstract class JdbcDatabase implements Database<Connection> {
 
 	// Package access for testing
 	List<Migration<Connection>> getMigrations() {
-		return singletonList(new Migration38_39());
+		return Arrays.asList(new Migration38_39(), new Migration39_40());
 	}
 
 	private void storeSchemaVersion(Connection txn, int version)
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/Migration39_40.java b/bramble-core/src/main/java/org/briarproject/bramble/db/Migration39_40.java
new file mode 100644
index 0000000000000000000000000000000000000000..7a6b8a35f37e4064914cb8a2e370cd835b981981
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/db/Migration39_40.java
@@ -0,0 +1,57 @@
+package org.briarproject.bramble.db;
+
+import org.briarproject.bramble.api.db.DbException;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.logging.Logger;
+
+import javax.annotation.Nullable;
+
+import static java.util.logging.Level.WARNING;
+import static org.briarproject.bramble.util.LogUtils.logException;
+
+class Migration39_40 implements Migration<Connection> {
+
+	private static final Logger LOG =
+			Logger.getLogger(Migration39_40.class.getName());
+
+	@Override
+	public int getStartVersion() {
+		return 39;
+	}
+
+	@Override
+	public int getEndVersion() {
+		return 40;
+	}
+
+	@Override
+	public void migrate(Connection txn) throws DbException {
+		Statement s = null;
+		try {
+			s = txn.createStatement();
+			// Add type column to contacts
+			s.execute("ALTER TABLE contacts"
+					+ " ADD type INT");
+			// Set type to REGULAR (0)
+			s.execute("UPDATE contacts"
+					+ " SET type = 0");
+			// Set type NOT NULL
+			s.execute("ALTER TABLE contacts"
+					+ " ALTER COLUMN type INT NOT NULL");
+		} catch (SQLException e) {
+			tryToClose(s);
+			throw new DbException(e);
+		}
+	}
+
+	private void tryToClose(@Nullable Statement s) {
+		try {
+			if (s != null) s.close();
+		} catch (SQLException e) {
+			logException(LOG, WARNING, e);
+		}
+	}
+}