diff --git a/appointment-import/src/main/java/smash/appointment/parse/AppointmentEntry.java b/appointment-import/src/main/java/smash/appointment/parse/AppointmentEntry.java
index b4faf7c678c40b3daa3f6429d2314ce8d11e87ce..4b8001727ff44fdd7e46e3a9fa5f35695d0e02e7 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/AppointmentEntry.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/AppointmentEntry.java
@@ -12,6 +12,8 @@ public class AppointmentEntry {
 	private Subject								subject;
 	private Set<AppointmentType>	types	= new HashSet<>();
 	private String								source;
+	private String								location;
+	
 
 	/**
 	 * @return the time
@@ -144,4 +146,20 @@ public class AppointmentEntry {
 		}
 
 	}
+
+	/**
+	 * @return the location
+	 * @see #location
+	 */
+	public String getLocation() {
+		return location;
+	}
+
+	/**
+	 * @param location the location to set
+	 * @see #location
+	 */
+	public void setLocation(String location) {
+		this.location = location;
+	}
 }
diff --git a/appointment-import/src/main/java/smash/appointment/parse/AppointmentSqlExporter.java b/appointment-import/src/main/java/smash/appointment/parse/AppointmentSqlExporter.java
index 6966c9ec3dcea9a0d39f302eb625c6aeb923005a..4c669334a76b25c7a1ebe5959bbb4e771df61346 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/AppointmentSqlExporter.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/AppointmentSqlExporter.java
@@ -1,33 +1,53 @@
 package smash.appointment.parse;
 
+import java.util.Calendar;
+
 public class AppointmentSqlExporter extends SqlExporter {
 
-	public String toSql(AppointmentEntry appointment, boolean isFinished) {
+	public String toSql(AppointmentEntry appointment) {
 		StringBuilder result = new StringBuilder("");
 
 		result.append("insert into web_appointment (");
 		result.append("datetime_when, ");
 		result.append("length, ");
-		result.append("is_finished, ");
+		result.append("status, ");
 		result.append("comment, ");
+		result.append("location_id, ");
 		result.append("visit_id) ");
 
 		result.append("values (");
-		result.append(getStringVal(appointment.getDay() + " " + appointment.getTime()+"+00") + ",");
+		result.append(getStringVal(appointment.getDay() + " " + appointment.getTime() + "+00") + ",");
 		result.append(getStringVal(appointment.getDuration()) + ",");
-		result.append(isFinished + ",");
+		if (isBefore(appointment, Calendar.getInstance())) {
+			result.append("'FINISHED',");
+		} else {
+			result.append("'SCHEDULED',");
+		}
 		result.append(getStringVal(appointment.getSource()) + ",");
+		switch (appointment.getLocation().substring(0, 1)) {
+			case ("L"):
+				result.append("(select id from web_location where name = 'LIH'),");
+				break;
+			case ("F"):
+				result.append("(select id from web_location where name = 'Flying Team'),");
+				break;
+			case ("P"):
+				result.append("(select id from web_location where name = 'PRC'),");
+				break;
+			default:
+				throw new RuntimeException("Unknown location: " + appointment.getLocation());
+		}
 		result.append("(select max(id) from web_visit)");
-		result.append(");");
+		result.append(");\n");
 
 		for (AppointmentType type : appointment.getTypes()) {
-			result.append("insert into web_appointment_appointment_types (");
+			result.append("\tinsert into web_appointment_appointment_types (");
 			result.append("appointment_id, ");
 			result.append("appointmenttype_id) ");
 			result.append("values (");
 			result.append("(select max(id) from web_appointment),");
 			result.append("(select id from web_appointmenttype where code=" + getStringVal(type.getAbbreviation()) + ") ");
-			result.append(");");
+			result.append(");\n");
 		}
 
 		return result.toString();
diff --git a/appointment-import/src/main/java/smash/appointment/parse/CellParser.java b/appointment-import/src/main/java/smash/appointment/parse/CellParser.java
index a3fcd104e1f615b5ba89d45fd7c25137c73eb4cf..bfd6940fcf13b38ed6c8e2279e953bc515f70192 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/CellParser.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/CellParser.java
@@ -42,6 +42,11 @@ public class CellParser {
 
 		Subject subject = extractSubject(query);
 		result.setSubject(subject);
+		if (subject!=null) {
+			result.setLocation(subject.getToBeSeenAt());
+		} else {
+			result.setLocation("PRC");
+		}
 
 		AppointmentTypeCollection type = extractType(query);
 		if (type == null) {
diff --git a/appointment-import/src/main/java/smash/appointment/parse/RedcapCalendarParser.java b/appointment-import/src/main/java/smash/appointment/parse/RedcapCalendarParser.java
index ac392d9800290839ec7ae24ff45fe1be8817e696..41a5d791d53a07ad39a1fc3c35db84bb9d3ebd1d 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/RedcapCalendarParser.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/RedcapCalendarParser.java
@@ -84,6 +84,7 @@ public class RedcapCalendarParser {
 		if (subject != null && !subject.getToBeSeenAt().equalsIgnoreCase("LIH")) {
 			return null;
 		}
+		result.setLocation("LIH");
 		result.setDay(day);
 		result.setTime(time);
 		result.setSource("From redcap: " + query);
diff --git a/appointment-import/src/main/java/smash/appointment/parse/RedcapParser.java b/appointment-import/src/main/java/smash/appointment/parse/RedcapParser.java
index 8ba9e39616c177ea8487d95bd2a959f3964e09de..2f4615a2f9bf9e82ebd980a1a31301119dd70e17 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/RedcapParser.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/RedcapParser.java
@@ -92,6 +92,7 @@ public class RedcapParser {
 		entry.setSubject(subject);
 		entry.setSource("Imported from RedCap");
 		entry.addType(AppointmentType.LEVEL_B_M_POWER);
+		entry.setLocation(subject.getToBeSeenAt());
 		return entry;
 	}
 
@@ -102,6 +103,7 @@ public class RedcapParser {
 		entry.setSubject(subject);
 		entry.setSource("Imported from RedCap");
 		entry.addType(AppointmentType.LEVEL_SB);
+		entry.setLocation(subject.getToBeSeenAt());
 		return entry;
 	}
 
@@ -116,6 +118,7 @@ public class RedcapParser {
 		entry.setSubject(subject);
 		entry.setSource("Imported from RedCap");
 		entry.addType(AppointmentType.LEVEL_BV);
+		entry.setLocation(subject.getToBeSeenAt());
 		return entry;
 	}
 
@@ -130,6 +133,7 @@ public class RedcapParser {
 		entry.setSubject(subject);
 		entry.setSource("Imported from RedCap");
 		entry.addType(AppointmentType.LEVEL_BG);
+		entry.setLocation(subject.getToBeSeenAt());
 		return entry;
 	}
 
@@ -144,6 +148,7 @@ public class RedcapParser {
 		entry.setSubject(subject);
 		entry.setSource("Imported from RedCap");
 		entry.addType(AppointmentType.LEVEL_B);
+		entry.setLocation(subject.getToBeSeenAt());
 		return entry;
 	}
 
@@ -162,6 +167,7 @@ public class RedcapParser {
 		entry.setSource("Imported from RedCap");
 		entry.setTime(time);
 		entry.addType(AppointmentType.LEVEL_A);
+		entry.setLocation(subject.getToBeSeenAt());
 		return entry;
 	}
 
diff --git a/appointment-import/src/main/java/smash/appointment/parse/SubjectSqlExporter.java b/appointment-import/src/main/java/smash/appointment/parse/SubjectSqlExporter.java
index e3056da5f1bb3d9f72a537e606544f557508480b..0e3389198112f172885be125dc195b11e2767dac 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/SubjectSqlExporter.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/SubjectSqlExporter.java
@@ -25,7 +25,7 @@ public class SubjectSqlExporter extends SqlExporter {
 		result.append("nd_number,");
 		result.append("mpower_id,");
 		result.append("screening_number,");
-		result.append("default_appointment_location,");
+		result.append("default_location_id,");
 		result.append("type,");
 		result.append("dead,");
 		result.append("resigned,");
@@ -51,7 +51,20 @@ public class SubjectSqlExporter extends SqlExporter {
 		result.append(getStringVal(subject.getNdNumber()) + ",");
 		result.append(getStringVal(subject.getmPowerId()) + ",");
 		result.append(getStringVal(subject.getScreeningNumber()) + ",");
-		result.append(getStringVal(subject.getToBeSeenAt()) + ",");
+		switch (subject.getToBeSeenAt()) {
+			case ("L"):
+				result.append("(select id from web_location where name = 'LIH'),");
+				break;
+			case ("F"):
+				result.append("(select id from web_location where name = 'Flying Team'),");
+				break;
+			case ("P"):
+				result.append("(select id from web_location where name = 'PRC'),");
+				break;
+			default:
+				throw new RuntimeException("Unknown location: " + subject.getToBeSeenAt());
+		}
+
 		result.append(getStringVal(subject.getType().toString().substring(0, 1)) + ",");
 		result.append(subject.isDead() + ",");
 		result.append(subject.isResigned() + ",");
diff --git a/appointment-import/src/main/java/smash/appointment/parse/VisitSqlExporter.java b/appointment-import/src/main/java/smash/appointment/parse/VisitSqlExporter.java
index 16077d37622b97edd5c407abebc6e4344112a3b9..730b6c09cfc0d9e9d432ab5ed42f0322db30a5f6 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/VisitSqlExporter.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/VisitSqlExporter.java
@@ -24,7 +24,7 @@ public class VisitSqlExporter extends SqlExporter {
 			boolean entryFinished= isFinished;
 			if (isBefore(entry, Calendar.getInstance()))
 				entryFinished=true;
-			result.append(appointmentSqlExporter.toSql(entry, entryFinished)+"\n");
+			result.append(appointmentSqlExporter.toSql(entry)+"\n");
 		}
 
 		return result.toString();