diff --git a/tdt4140-gr1800/app.core/src/main/java/tdt4140/gr1800/app/db/DbAccessImpl.java b/tdt4140-gr1800/app.core/src/main/java/tdt4140/gr1800/app/db/DbAccessImpl.java
index 4122a67e3e89bb899798658b05f089e829b5bf84..aacbcf889337406a4e6fd7320ad0d5477de18672 100644
--- a/tdt4140-gr1800/app.core/src/main/java/tdt4140/gr1800/app/db/DbAccessImpl.java
+++ b/tdt4140-gr1800/app.core/src/main/java/tdt4140/gr1800/app/db/DbAccessImpl.java
@@ -5,11 +5,13 @@ import java.sql.Date;
 import java.sql.DriverManager;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.sql.Statement;
 import java.sql.Time;
 import java.time.LocalDate;
 import java.time.LocalTime;
 import java.time.ZoneId;
 import java.util.Collection;
+import java.util.Scanner;
 
 import tdt4140.gr1800.app.core.GeoLocation;
 import tdt4140.gr1800.app.core.GeoLocations;
@@ -18,35 +20,62 @@ import tdt4140.gr1800.app.core.Person;
 public class DbAccessImpl extends AbstractDbAccessImpl {
 
 	private final DbAccessHelper helper;
-	
-	private DbAccessImpl(DbAccessHelper helper) {
+
+	private DbAccessImpl(final DbAccessHelper helper) {
 		this.helper = helper;
 	}
 
-	public DbAccessImpl(Connection dbConnection) {
+	public DbAccessImpl(final Connection dbConnection) {
 		this(new DbAccessHelper(dbConnection));
 	}
 
-	public DbAccessImpl(String connectionUri, String user, String pass) throws SQLException {
+	public DbAccessImpl(final String connectionUri, final String user, final String pass) throws SQLException {
 		this(DriverManager.getConnection(connectionUri, user, pass));
 	}
 
-	public DbAccessImpl(String connectionUri) throws SQLException {
+	public DbAccessImpl(final String connectionUri) throws SQLException {
 		this(connectionUri, "SA", "");
 	}
-	
+
+	//
+
+	public void executeStatements(final String path, final boolean cleanUp) throws SQLException {
+		final Statement dbStatement = helper.getDbConnection().createStatement();
+		final StringBuilder buffer = new StringBuilder();
+		try (Scanner scanner = new Scanner(getClass().getResourceAsStream(path))) {
+			while (scanner.hasNextLine()) {
+				final String line = scanner.nextLine();
+				final int pos = line.indexOf(";");
+				if (pos >= 0) {
+					buffer.append(line.substring(0, pos + 1));
+					final String sql = buffer.toString();
+					buffer.setLength(0);
+					if (pos < line.length()) {
+						buffer.append(line.substring(pos + 1));
+					}
+					if (cleanUp || (! sql.startsWith("DROP"))) {
+						dbStatement.execute(sql);
+					}
+				} else {
+					buffer.append(line);
+					buffer.append("\n");
+				}
+			}
+		}
+	}
+
 	//
-	
+
 	@Override
-	public synchronized Person createPerson(String name, String email) {
-		Person person = super.createPerson(name, email);
-		int id = helper.executeDbInsertGettingIdentity(String.format("INSERT INTO person (name, email) VALUES ('%s', '%s')", name, email));
+	public synchronized Person createPerson(final String name, final String email) {
+		final Person person = super.createPerson(name, email);
+		final int id = helper.executeDbInsertGettingIdentity(String.format("INSERT INTO person (name, email) VALUES ('%s', '%s')", name, email));
 		personIds.set(person, id);
 		return person;
 	}
 
-	protected Person createPerson(int id, String name, String email) {
-		Person person = new Person();
+	protected Person createPerson(final int id, final String name, final String email) {
+		final Person person = new Person();
 		person.setName(name);
 		person.setEmail(email);
 		personIds.remove(id);
@@ -55,17 +84,17 @@ public class DbAccessImpl extends AbstractDbAccessImpl {
 	}
 
 	@Override
-	public Collection<Person> getAllPersons(boolean refresh) {
+	public Collection<Person> getAllPersons(final boolean refresh) {
 		if (refresh) {
 			personIds.clear();
-			ResultSet result = helper.executeQuery("SELECT id, name, email FROM person");
+			final ResultSet result = helper.executeQuery("SELECT id, name, email FROM person");
 			try {
 				while (result.next()) {
-					int id = result.getInt(1);
-					String name = result.getString(2), email = result.getString(3);
+					final int id = result.getInt(1);
+					final String name = result.getString(2), email = result.getString(3);
 					createPerson(id, name, email);
 				}
-			} catch (SQLException e) {
+			} catch (final SQLException e) {
 				helper.throwException(e);
 			}
 		}
@@ -73,19 +102,19 @@ public class DbAccessImpl extends AbstractDbAccessImpl {
 	}
 
 	@Override
-	public Person getPerson(int id, boolean refresh) {
+	public Person getPerson(final int id, final boolean refresh) {
 		Person person = null;
 		if (! refresh) {
 			person = super.getPerson(id, false);
 		}
 		if (person == null || refresh) {
-			ResultSet result = helper.executeQuery("SELECT id, name, email FROM person WHERE id = ?", id);
+			final ResultSet result = helper.executeQuery("SELECT id, name, email FROM person WHERE id = ?", id);
 			try {
 				if (result.next()) {
-					String name = result.getString(2), email = result.getString(3);
+					final String name = result.getString(2), email = result.getString(3);
 					person = createPerson(id, name, email);
 				}
-			} catch (SQLException e) {
+			} catch (final SQLException e) {
 				helper.throwException(e);
 			}
 		}
@@ -93,20 +122,20 @@ public class DbAccessImpl extends AbstractDbAccessImpl {
 	}
 
 	@Override
-	public Person getPersonByName(String name, boolean refresh) {
+	public Person getPersonByName(final String name, final boolean refresh) {
 		Person person = null;
 		if (! refresh) {
 			person = super.getPersonByName(name, false);
 		}
 		if (person == null || refresh) {
-			ResultSet result = helper.executeQuery("SELECT id, name, email FROM person WHERE name = ?", name);
+			final ResultSet result = helper.executeQuery("SELECT id, name, email FROM person WHERE name = ?", name);
 			try {
 				if (result.next()) {
-					int id = result.getInt(1);
-					String dbName = result.getString(2), email = result.getString(3);
+					final int id = result.getInt(1);
+					final String dbName = result.getString(2), email = result.getString(3);
 					person = createPerson(id, dbName, email);
 				}
-			} catch (SQLException e) {
+			} catch (final SQLException e) {
 				helper.throwException(e);
 			}
 		}
@@ -114,47 +143,47 @@ public class DbAccessImpl extends AbstractDbAccessImpl {
 	}
 
 	@Override
-	public Person getPersonByEmail(String email, boolean refresh) {
+	public Person getPersonByEmail(final String email, final boolean refresh) {
 		Person person = null;
 		if (! refresh) {
 			person = super.getPersonByEmail(email, false);
 		}
 		if (person == null || refresh) {
-			ResultSet result = helper.executeQuery("SELECT id, name, email FROM person WHERE email = ?", email);
+			final ResultSet result = helper.executeQuery("SELECT id, name, email FROM person WHERE email = ?", email);
 			try {
 				if (result.next()) {
-					int id = result.getInt(1);
-					String name = result.getString(2), dbEmail = result.getString(3);
+					final int id = result.getInt(1);
+					final String name = result.getString(2), dbEmail = result.getString(3);
 					person = createPerson(id, name, dbEmail);
 				}
-			} catch (SQLException e) {
+			} catch (final SQLException e) {
 				helper.throwException(e);
 			}
 		}
 		return person;
 	}
-	
+
 	@Override
-	public synchronized void updatePersonData(Person person) {
+	public synchronized void updatePersonData(final Person person) {
 		helper.executeDbStatement("UPDATE person SET name = ?, email = ? WHERE id = ?", person.getName(), person.getEmail(), getId(person));
 	}
 
 	@Override
-	public synchronized void deletePerson(Person person) {
-		int id = getId(person);
+	public synchronized void deletePerson(final Person person) {
+		final int id = getId(person);
 		super.deletePerson(person);
 		helper.executeDbStatement("DELETE FROM person WHERE id = ?", id);
 		// not needed with ON DELETE CASCADE set on foreign keys
-//		helper.executeDbStatement("DELETE FROM geoLocations WHERE ownerId = ?", person.getId());
-//		helper.executeDbStatement("DELETE FROM geoLocation WHERE ownerId = ?", person.getId());
+		//		helper.executeDbStatement("DELETE FROM geoLocations WHERE ownerId = ?", person.getId());
+		//		helper.executeDbStatement("DELETE FROM geoLocation WHERE ownerId = ?", person.getId());
 	}
-	
+
 	//
 
 	@Override
-	public GeoLocations createGeoLocations(Person owner) {
-		GeoLocations geoLocations = super.createGeoLocations(owner);
-		int id = helper.executeDbInsertGettingIdentity(String.format("INSERT INTO geoLocations (ownerId) VALUES ('%s')", getId(owner)));
+	public GeoLocations createGeoLocations(final Person owner) {
+		final GeoLocations geoLocations = super.createGeoLocations(owner);
+		final int id = helper.executeDbInsertGettingIdentity(String.format("INSERT INTO geoLocations (ownerId) VALUES ('%s')", getId(owner)));
 		geoLocationsIds.set(geoLocations, id);
 		return geoLocations;
 	}
@@ -165,94 +194,94 @@ public class DbAccessImpl extends AbstractDbAccessImpl {
 	}
 
 	@Override
-	public Collection<GeoLocations> getGeoLocations(Person owner, boolean refresh) {
-		Collection<GeoLocations> existingGeoLocations = super.getGeoLocations(owner, false);
+	public Collection<GeoLocations> getGeoLocations(final Person owner, final boolean refresh) {
+		final Collection<GeoLocations> existingGeoLocations = super.getGeoLocations(owner, false);
 		if (refresh || existingGeoLocations.isEmpty()) {
 			owner.removeGeolocations((String[]) null);
 			geoLocationsIds.removeAll(existingGeoLocations);
 			existingGeoLocations.clear();
-			int ownerId = getId(owner);
-			ResultSet result = helper.executeQuery("SELECT id, path, name, description, date, time, zone FROM geoLocations WHERE ownerId = ?", ownerId);
+			final int ownerId = getId(owner);
+			final ResultSet result = helper.executeQuery("SELECT id, path, name, description, date, time, zone FROM geoLocations WHERE ownerId = ?", ownerId);
 			try {
 				while (result.next()) {
-					int id = result.getInt(1);
-					boolean path = result.getBoolean(2);
-					String name = result.getString(3), description = result.getString(4);
-					GeoLocations geoLocations = new GeoLocations(owner);
+					final int id = result.getInt(1);
+					final boolean path = result.getBoolean(2);
+					final String name = result.getString(3), description = result.getString(4);
+					final GeoLocations geoLocations = new GeoLocations(owner);
 					owner.addGeolocations(geoLocations);
 					geoLocations.setPath(path);
 					geoLocations.setName(name);
 					geoLocations.setDescription(description);
-					Date date = result.getDate(5);
-					Time time = result.getTime(6);
-					String zone = result.getString(7);
+					final Date date = result.getDate(5);
+					final Time time = result.getTime(6);
+					final String zone = result.getString(7);
 					geoLocations.setDate(date != null ? date.toLocalDate() : null);
 					geoLocations.setTime(time != null ? time.toLocalTime() : null);
 					geoLocations.setZone(zone != null ? ZoneId.of(zone) : null);
 					existingGeoLocations.add(geoLocations);
 					geoLocationsIds.set(geoLocations, id);
-					ResultSet tagResults = helper.executeQuery(String.format("SELECT tag FROM tag WHERE ownerId = ? AND ownerType = '%s'", TagOwnerType.GLS), id);
+					final ResultSet tagResults = helper.executeQuery(String.format("SELECT tag FROM tag WHERE ownerId = ? AND ownerType = '%s'", TagOwnerType.GLS), id);
 					while (tagResults.next()) {
 						geoLocations.addTags(tagResults.getString(1));
 					}
 				}
-			} catch (SQLException e) {
+			} catch (final SQLException e) {
 				helper.throwException(e);
 			}
-			ResultSet tagResult = helper.executeQuery(String.format("SELECT geoLocations.id, tag.tag FROM geoLocations, tag WHERE geoLocations.ownerId = ? AND tag.ownerId = geoLocations.id AND ownerType = '%s'", TagOwnerType.GLS), ownerId);
+			final ResultSet tagResult = helper.executeQuery(String.format("SELECT geoLocations.id, tag.tag FROM geoLocations, tag WHERE geoLocations.ownerId = ? AND tag.ownerId = geoLocations.id AND ownerType = '%s'", TagOwnerType.GLS), ownerId);
 			try {
 				while (tagResult.next()) {
-					int geoLocationsId = tagResult.getInt(1);
-					String tag = tagResult.getString(2);
-					GeoLocations geoLocations = geoLocationsIds.get(geoLocationsId);
+					final int geoLocationsId = tagResult.getInt(1);
+					final String tag = tagResult.getString(2);
+					final GeoLocations geoLocations = geoLocationsIds.get(geoLocationsId);
 					if (geoLocations != null) {
 						geoLocations.addTags(tag);
 					}
 				}
-			} catch (SQLException e) {
+			} catch (final SQLException e) {
 				helper.throwException(e);
 			}
 		}
 		return existingGeoLocations;
 	}
-	
+
 	@Override
-	public void updateGeoLocationsData(GeoLocations geoLocations) {
-		boolean path = geoLocations.isPath();
-		String name = geoLocations.getName(), desc = geoLocations.getDescription();
-		LocalDate date = geoLocations.getDate();
-		LocalTime time = geoLocations.getTime();
-		String zone = (geoLocations.getZone() != null ? geoLocations.getZone().getId() : null);
-		int ownerId = getId(geoLocations);
+	public void updateGeoLocationsData(final GeoLocations geoLocations) {
+		final boolean path = geoLocations.isPath();
+		final String name = geoLocations.getName(), desc = geoLocations.getDescription();
+		final LocalDate date = geoLocations.getDate();
+		final LocalTime time = geoLocations.getTime();
+		final String zone = (geoLocations.getZone() != null ? geoLocations.getZone().getId() : null);
+		final int ownerId = getId(geoLocations);
 		helper.executeDbStatement("UPDATE geoLocations SET path = ?, name = ?, description = ?, date = ?, time = ?, zone = ? WHERE id = ?", path, name, desc, Date.valueOf(date), Time.valueOf(time), zone, ownerId);
 		deleteTags(ownerId, TagOwnerType.GLS);
 		String insertStatement = "INSERT INTO tag (ownerId, ownerType, tag) VALUES ";
-		String[] tags = geoLocations.getTags();
+		final String[] tags = geoLocations.getTags();
 		for (int i = 0; i < tags.length; i++) {
 			if (i > 0) {
-				insertStatement += ", ";				
+				insertStatement += ", ";
 			}
 			insertStatement += String.format("(%s, '%s', '%s')", ownerId, TagOwnerType.GLS, tags[i]);
 		}
 		helper.executeDbStatement(insertStatement);
 	}
 
-	protected void deleteTags(int ownerId, TagOwnerType ownerType) {
+	protected void deleteTags(final int ownerId, final TagOwnerType ownerType) {
 		helper.executeDbStatement(String.format("DELETE FROM tag WHERE ownerId = ? AND ownerType = '%s'", ownerType), ownerId);
 	}
 
 	@Override
-	public void deleteGeoLocations(GeoLocations geoLocations) {
-		int ownerId = getId(geoLocations);
+	public void deleteGeoLocations(final GeoLocations geoLocations) {
+		final int ownerId = getId(geoLocations);
 		super.deleteGeoLocations(geoLocations);
 		helper.executeDbStatement("DELETE FROM geoLocations WHERE id = ?", ownerId);
 		deleteTags(ownerId, TagOwnerType.GLS);
 	}
-	
+
 	//
 
 	@Override
-	public void updateGeoLocationData(GeoLocations geoLocations, GeoLocation geoLocation) {
+	public void updateGeoLocationData(final GeoLocations geoLocations, final GeoLocation geoLocation) {
 		throw new UnsupportedOperationException("NYI");
 	}
 }
diff --git a/tdt4140-gr1800/app.core/src/main/java/tdt4140/gr1800/app/json/IdDeserializer.java b/tdt4140-gr1800/app.core/src/main/java/tdt4140/gr1800/app/json/IdDeserializer.java
new file mode 100644
index 0000000000000000000000000000000000000000..2b6f94d38420883d2ab33eec02333c6e7bc1d114
--- /dev/null
+++ b/tdt4140-gr1800/app.core/src/main/java/tdt4140/gr1800/app/json/IdDeserializer.java
@@ -0,0 +1,30 @@
+package tdt4140.gr1800.app.json;
+
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+public abstract class IdDeserializer<T> extends StdDeserializer<T> {
+
+	public IdDeserializer(final Class<T> clazz) {
+		super(clazz);
+	}
+
+	void deserialize(final ObjectNode objectNode, final String fieldName, final Consumer<String> setter) throws JsonProcessingException {
+		if (objectNode.has(fieldName)) {
+			final String s = objectNode.get(fieldName).asText();
+			setter.accept(s);
+		}
+	}
+
+	<U> void deserialize(final ObjectNode objectNode, final String fieldName, final Function<String, U> parser, final Consumer<U> setter) throws JsonProcessingException {
+		if (objectNode.has(fieldName)) {
+			final String s = objectNode.get(fieldName).asText();
+			final U value = parser.apply(s);
+			setter.accept(value);
+		}
+	}
+}
diff --git a/tdt4140-gr1800/app.core/src/main/java/tdt4140/gr1800/app/json/PersonDeserializer.java b/tdt4140-gr1800/app.core/src/main/java/tdt4140/gr1800/app/json/PersonDeserializer.java
index 7c7f32a61139b4478af722e6cc3427969ce1686c..a2e66e8698f29ec12d98e56e495407b081b46a8b 100644
--- a/tdt4140-gr1800/app.core/src/main/java/tdt4140/gr1800/app/json/PersonDeserializer.java
+++ b/tdt4140-gr1800/app.core/src/main/java/tdt4140/gr1800/app/json/PersonDeserializer.java
@@ -6,14 +6,13 @@ import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.DeserializationContext;
 import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 import tdt4140.gr1800.app.core.GeoLocations;
 import tdt4140.gr1800.app.core.Person;
 
-public class PersonDeserializer extends StdDeserializer<Person> {
+public class PersonDeserializer extends IdDeserializer<Person> {
 
 	public PersonDeserializer() {
 		super(Person.class);
@@ -31,10 +30,8 @@ public class PersonDeserializer extends StdDeserializer<Person> {
 		if (jsonNode instanceof ObjectNode) {
 			final ObjectNode objectNode = (ObjectNode) jsonNode;
 			final Person person = new Person();
-			if (objectNode.has(GeoLocationsSerializer.NAME_FIELD_NAME)) {
-				final String name = objectNode.get(GeoLocationsSerializer.NAME_FIELD_NAME).asText();
-				person.setName(name);
-			}
+			deserialize(objectNode, PersonSerializer.NAME_FIELD_NAME, person::setName);
+			deserialize(objectNode, PersonSerializer.EMAIL_FIELD_NAME, person::setEmail);
 			if (objectNode.has(GeoLocationsSerializer.LOCATIONS_FIELD_NAME)) {
 				final JsonNode locationsNode = objectNode.get(GeoLocationsSerializer.LOCATIONS_FIELD_NAME);
 				if (locationsNode instanceof ArrayNode) {
diff --git a/tdt4140-gr1800/app.core/src/test/java/tdt4140/gr1800/app/db/HsqldbAccessTest.java b/tdt4140-gr1800/app.core/src/test/java/tdt4140/gr1800/app/db/HsqldbAccessTest.java
index b585b22a67d23f26d82cd21b27a1ff7e138d4aee..48c040870323014eb1ad2c8488f5f17b9c9c94bf 100644
--- a/tdt4140-gr1800/app.core/src/test/java/tdt4140/gr1800/app/db/HsqldbAccessTest.java
+++ b/tdt4140-gr1800/app.core/src/test/java/tdt4140/gr1800/app/db/HsqldbAccessTest.java
@@ -3,11 +3,9 @@ package tdt4140.gr1800.app.db;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.SQLException;
-import java.sql.Statement;
 import java.time.LocalDate;
 import java.time.LocalTime;
 import java.util.Collection;
-import java.util.Scanner;
 
 import org.junit.After;
 import org.junit.Assert;
@@ -22,52 +20,28 @@ public class HsqldbAccessTest {
 	private Connection dbCon;
 	private AbstractDbAccessImpl dbAccess;
 	private static int testNum = 0;
-	
+
 	@Before
 	public void setUp() throws Exception {
 		Class.forName("org.hsqldb.jdbc.JDBCDriver");
 		dbCon = DriverManager.getConnection("jdbc:hsqldb:mem:" + HsqldbAccessTest.class.getName() + testNum, "SA", "");
-		executeStatements("schema.sql");
-		dbAccess = new DbAccessImpl(dbCon);
+		final DbAccessImpl dbAccess = new DbAccessImpl(dbCon);
+		dbAccess.executeStatements("schema.sql", false);
+		this.dbAccess = dbAccess;
 		testNum++;
 	}
-	
+
 	@After
 	public void tearDown() {
 		if (dbCon != null) {
 			try {
 				dbCon.close();
-			} catch (SQLException e) {
+			} catch (final SQLException e) {
 			}
 		}
 	}
 
-	protected void executeStatements(String path) throws SQLException {
-		Statement dbStatement = dbCon.createStatement();
-		StringBuilder buffer = new StringBuilder();
-		try (Scanner scanner = new Scanner(HsqldbAccessTest.class.getResourceAsStream(path))) {
-			while (scanner.hasNextLine()) {
-				String line = scanner.nextLine();
-				int pos = line.indexOf(";");
-				if (pos >= 0) {
-					buffer.append(line.substring(0, pos + 1));
-					String sql = buffer.toString();
-					buffer.setLength(0);
-					if (pos < line.length()) {
-						buffer.append(line.substring(pos + 1));
-					}
-					if (! sql.startsWith("DROP")) {
-						dbStatement.execute(sql);
-					}
-				} else {
-					buffer.append(line);
-					buffer.append("\n");
-				}
-			}
-		}
-	}
-	
-	protected void checkPersonData(Person hal, Person dbHal) {
+	protected void checkPersonData(final Person hal, final Person dbHal) {
 		Assert.assertNotNull(dbHal);
 		Assert.assertEquals(hal.getName(), dbHal.getName());
 		Assert.assertEquals(hal.getEmail(), dbHal.getEmail());
@@ -75,95 +49,95 @@ public class HsqldbAccessTest {
 
 	@Test
 	public void testCreatePersonGetAllPersons() {
-		Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
-		Collection<Person> persons = dbAccess.getAllPersons(false);
+		final Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
+		final Collection<Person> persons = dbAccess.getAllPersons(false);
 		Assert.assertEquals(1, persons.size());
 		checkPersonData(hal, persons.iterator().next());
 		dbAccess.personIds.clear();
-		Collection<Person> dbPersons = dbAccess.getAllPersons(true);
+		final Collection<Person> dbPersons = dbAccess.getAllPersons(true);
 		Assert.assertEquals(1, dbPersons.size());
 		checkPersonData(hal, dbPersons.iterator().next());
 	}
 
 	@Test
 	public void testCreatePersonGetPerson() {
-		Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
-		int id = dbAccess.getId(hal);
-		Person dbHal = dbAccess.getPerson(id, true);
+		final Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
+		final int id = dbAccess.getId(hal);
+		final Person dbHal = dbAccess.getPerson(id, true);
 		checkPersonData(hal, dbHal);
 		Assert.assertSame(dbHal, dbAccess.getPerson(id, false));
 	}
-	
+
 	@Test
 	public void testCreatePersonGetPersonByName() {
-		Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
-		Person dbHal = dbAccess.getPersonByName(hal.getName(), true);
+		final Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
+		final Person dbHal = dbAccess.getPersonByName(hal.getName(), true);
 		checkPersonData(hal, dbHal);
 	}
-	
+
 	@Test
 	public void testCreatePersonGetPersonByEmail() {
-		Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
-		Person dbHal = dbAccess.getPersonByEmail(hal.getEmail(), true);
+		final Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
+		final Person dbHal = dbAccess.getPersonByEmail(hal.getEmail(), true);
 		checkPersonData(hal, dbHal);
 	}
-	
+
 	@Test
 	public void testCreatePersonUpdatePerson() {
-		Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
-		int id = dbAccess.getId(hal);
+		final Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
+		final int id = dbAccess.getId(hal);
 		hal.setName("Hallvard");
 		hal.setEmail("hallvard.traetteberg@gmail.com");
 		dbAccess.updatePersonData(hal);
-		Person dbHal = dbAccess.getPerson(id, true);
+		final Person dbHal = dbAccess.getPerson(id, true);
 		checkPersonData(hal, dbHal);
 	}
 
 	@Test
 	public void testCreatePersonDeletePerson() {
-		Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
+		final Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
 		dbAccess.deletePerson(hal);
-		Collection<Person> persons = dbAccess.getAllPersons(true);
+		final Collection<Person> persons = dbAccess.getAllPersons(true);
 		Assert.assertEquals(0, persons.size());
 	}
-	
+
 	@Test
 	public void testCreatePersonCreateGeoLocationsGetGeoLocations() {
-		Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
+		final Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
 		// no GeoLocations so far
 		Assert.assertEquals(0, dbAccess.getGeoLocations(hal, false).size());
-		GeoLocations geoLocations1 = dbAccess.createGeoLocations(hal);
+		final GeoLocations geoLocations1 = dbAccess.createGeoLocations(hal);
 		// check we have one locally
 		Assert.assertEquals(1, hal.getGeoLocations((String[]) null).size());
-		Collection<GeoLocations> geoLocations = dbAccess.getGeoLocations(hal, false);
+		final Collection<GeoLocations> geoLocations = dbAccess.getGeoLocations(hal, false);
 		Assert.assertEquals(1, hal.getGeoLocations((String[]) null).size());
 		Assert.assertEquals(1, geoLocations.size());
 		Assert.assertSame(geoLocations1, geoLocations.iterator().next());
 		dbAccess.geoLocationsIds.clear();
 		// check we have one in the db
-		Collection<GeoLocations> dbGeoLocations = dbAccess.getGeoLocations(hal, true);
-		Assert.assertEquals(1, hal.getGeoLocations((String[]) null).size()); 
+		final Collection<GeoLocations> dbGeoLocations = dbAccess.getGeoLocations(hal, true);
+		Assert.assertEquals(1, hal.getGeoLocations((String[]) null).size());
 		Assert.assertEquals(1, dbGeoLocations.size());
 	}
-	
+
 	@Test
 	public void testCreatePersonCreateUpdateGeoLocationsGetGeoLocations() {
-		Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
-		GeoLocations geoLocations1 = dbAccess.createGeoLocations(hal);
+		final Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
+		final GeoLocations geoLocations1 = dbAccess.createGeoLocations(hal);
 		geoLocations1.setName("geoLocs1");
 		geoLocations1.setDescription("my first geo-location");
 		geoLocations1.setDate(LocalDate.of(2018, 3, 14));
 		geoLocations1.setTime(LocalTime.of(11, 14));
 		geoLocations1.setZone("Europe/Oslo");
-		String[] tags = {"tag1", "tag2"}; 
+		final String[] tags = {"tag1", "tag2"};
 		geoLocations1.addTags(tags);
 		dbAccess.updateGeoLocationsData(geoLocations1);
 		dbAccess.geoLocationsIds.clear();
 		// check the db
-		Collection<GeoLocations> dbGeoLocations = dbAccess.getGeoLocations(hal, true);
-		Assert.assertEquals(1, hal.getGeoLocations((String[]) null).size()); 
+		final Collection<GeoLocations> dbGeoLocations = dbAccess.getGeoLocations(hal, true);
+		Assert.assertEquals(1, hal.getGeoLocations((String[]) null).size());
 		Assert.assertEquals(1, dbGeoLocations.size());
-		GeoLocations dbGeoLocations1 = dbGeoLocations.iterator().next();
+		final GeoLocations dbGeoLocations1 = dbGeoLocations.iterator().next();
 		Assert.assertEquals(geoLocations1.getName(), dbGeoLocations1.getName());
 		Assert.assertEquals(geoLocations1.getDescription(), dbGeoLocations1.getDescription());
 		Assert.assertEquals(geoLocations1.getDate(), dbGeoLocations1.getDate());
@@ -172,13 +146,13 @@ public class HsqldbAccessTest {
 		Assert.assertEquals(2, dbGeoLocations1.getTags().length);
 		Assert.assertTrue(dbGeoLocations1.hasTags(tags));
 	}
-	
+
 	@Test
 	public void testCreatePersonCreateGeoLocationsDeleteGeoLocations() {
-		Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
-		GeoLocations geoLocations = dbAccess.createGeoLocations(hal);
-		Collection<GeoLocations> dbGeoLocations = dbAccess.getGeoLocations(hal, true);
-		Assert.assertEquals(1, dbGeoLocations.size());		
+		final Person hal = dbAccess.createPerson("hal", "hal@ntnu.no");
+		final GeoLocations geoLocations = dbAccess.createGeoLocations(hal);
+		final Collection<GeoLocations> dbGeoLocations = dbAccess.getGeoLocations(hal, true);
+		Assert.assertEquals(1, dbGeoLocations.size());
 		dbAccess.deleteGeoLocations(geoLocations);
 	}
 }
diff --git a/tdt4140-gr1800/web.server/.classpath b/tdt4140-gr1800/web.server/.classpath
index 1e97e0a8f5945d79db4606d8520507033190fa1c..d46faf10ed6b222a00963f1db7c75123572c051c 100644
--- a/tdt4140-gr1800/web.server/.classpath
+++ b/tdt4140-gr1800/web.server/.classpath
@@ -6,11 +6,6 @@
 			<attribute name="maven.pomderived" value="true"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/webapp">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
 	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
 		<attributes>
 			<attribute name="optional" value="true"/>
diff --git a/tdt4140-gr1800/web.server/src/main/java/tdt4140/gr1800/web/server/GeoServlet.java b/tdt4140-gr1800/web.server/src/main/java/tdt4140/gr1800/web/server/GeoServlet.java
index 0e99b506c013fae43f9f0cc222e6b19203af822c..b4cf14893cce046fa05b7b9d0dd94709d984e4a2 100644
--- a/tdt4140-gr1800/web.server/src/main/java/tdt4140/gr1800/web/server/GeoServlet.java
+++ b/tdt4140-gr1800/web.server/src/main/java/tdt4140/gr1800/web/server/GeoServlet.java
@@ -44,7 +44,9 @@ public class GeoServlet extends HttpServlet {
 			dbConnectionUrl = dbConnectionParam;
 		}
 		try {
-			dbAccess = new DbAccessImpl(dbConnectionUrl);
+			final DbAccessImpl dbAccess = new DbAccessImpl(dbConnectionUrl);
+			dbAccess.executeStatements("schema.sql", false);
+			this.dbAccess = dbAccess;
 		} catch (final SQLException e) {
 			throw new ServletException("Error when initializing database connection (" + dbConnectionUrl + "): " + e, e);
 		}
@@ -55,6 +57,7 @@ public class GeoServlet extends HttpServlet {
 		final RestEntity<GeoLocation> geoLocationEntity = new RestEntity<>();
 
 		final RestRelation<Void, Person> rootPersonRelation = new RootPersonsRelation("persons", personEntity);
+		rootPersonRelation.setDbAccess(dbAccess);
 		rootEntity.addRelation(rootPersonRelation);
 		final RestRelation<Person, ?> personGeoLocationsRelation = new PersonGeoLocationsRelation("geoLocations", geoLocationsEntity);
 		personGeoLocationsRelation.setDbAccess(dbAccess);
@@ -105,7 +108,7 @@ public class GeoServlet extends HttpServlet {
 		response.setContentType("application/json");
 		response.setStatus(HttpServletResponse.SC_OK);
 		try (OutputStream output = response.getOutputStream()) {
-			objectMapper.writeValue(output, result);
+			objectMapper.writerWithDefaultPrettyPrinter().writeValue(output, result);
 		} catch (final Exception e) {
 			response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
 		}
diff --git a/tdt4140-gr1800/web.server/src/test/java/tdt4140/gr1800/web/server/GeoLocationsServerIT.java b/tdt4140-gr1800/web.server/src/test/java/tdt4140/gr1800/web/server/GeoLocationsServerIT.java
index 1b2fd7c292ac7ba7ea971f8e64d7af33e2e97efa..c39bd5fa0a512dbb79167caf260ffde6f8f3115d 100644
--- a/tdt4140-gr1800/web.server/src/test/java/tdt4140/gr1800/web/server/GeoLocationsServerIT.java
+++ b/tdt4140-gr1800/web.server/src/test/java/tdt4140/gr1800/web/server/GeoLocationsServerIT.java
@@ -67,8 +67,9 @@ public class GeoLocationsServerIT {
 		try (OutputStream conOut = con.getOutputStream()) {
 			conOut.write(bytes);
 		}
-		try (InputStream conIn = url.openStream()) {
+		try (InputStream conIn = con.getInputStream()) {
 			final JsonNode jsonTree = objectMapper.readTree(conIn);
+			//			System.out.println(jsonTree);
 			Assert.assertTrue(jsonTree instanceof ObjectNode);
 			Assert.assertTrue(((ObjectNode) jsonTree).has("id"));
 			final Person conPerson = objectMapper.treeToValue(jsonTree, Person.class);
diff --git a/tdt4140-gr1800/web.server/src/test/java/tdt4140/gr1800/web/server/HttpMethodTest.java b/tdt4140-gr1800/web.server/src/test/java/tdt4140/gr1800/web/server/HttpMethodTest.java
index 6bf4d06618f5748bc7a1a6395d6cf068e564cc0a..f3f5fc49026a16d5d04d3508c50784c823939723 100644
--- a/tdt4140-gr1800/web.server/src/test/java/tdt4140/gr1800/web/server/HttpMethodTest.java
+++ b/tdt4140-gr1800/web.server/src/test/java/tdt4140/gr1800/web/server/HttpMethodTest.java
@@ -222,12 +222,6 @@ public class HttpMethodTest {
 		Assert.assertEquals(false, dbAccessRecord.get("getGeoLocations"));
 		Assert.assertTrue(result instanceof Collection<?>);
 		Assert.assertEquals(2, ((Collection<?>) result).size());
-
-		try {
-			objectMapper.writerWithDefaultPrettyPrinter().writeValue(System.out, person);
-		} catch (final Exception e) {
-			e.printStackTrace();
-		}
 	}
 
 	@Test