diff --git a/database.py b/database.py
index eb74b085eeab9c3b5e3b477476d65cae14f419d5..65fe3b0d01960bbbad1421dc51f8e7ec687a2b2a 100644
--- a/database.py
+++ b/database.py
@@ -69,7 +69,12 @@ def lookup_address(address: str):
 def set_address_latlong(address: str, latlong: Tuple[float, float]):
 	with Connection() as conn:
 		latlong_str = f"{ repr(latlong[0]) },{ repr(latlong[1]) }"
-		conn.execute("INSERT INTO AddressToLatLong (address, latlong) VALUES (?, ?)", (address, latlong_str))
+		if latlong == None:
+			conn.execute("DELETE FROM AddressToLatLong WHERE address = ?", (address))
+		else:
+			conn.execute("UPDATE AddressToLatLong SET latlong = ? WHERE address = ?", (latlong_str, address))
+			if conn.cursor.rowcount == 0:
+				conn.execute("INSERT INTO AddressToLatLong (address, latlong) VALUES (?, ?)", (address, latlong_str))
 		conn.commit()
 
 class Workspace:
diff --git a/main.py b/main.py
index 19c7226f08ee8c3d0caa815927633888c337ab17..ba0929a8df91ec28a896861d9fca36027d9cca24 100644
--- a/main.py
+++ b/main.py
@@ -83,6 +83,44 @@ def add_workspace():
 
 		return render_template("add-workspace-result.html", messages = messages)
 
+@app.route("/admin/set-latlong", methods = ["GET", "POST"])
+def set_latlong():
+	if request.method == "GET":
+		address = request.args.get("address")
+		addresses = []
+		if address == None:
+			workspaces = database.get_workspaces()
+			for workspace in workspaces:
+				if workspace.address not in addresses:
+					addresses.append(workspace.address)
+
+			addresses = [address for address in addresses if database.lookup_address(address) == None]
+		return render_template("set-latlong.html", address = address, addresses = addresses)
+
+	if request.method == "POST":
+		address = request.form["address"]
+		errors = []
+		if len(address.strip()) <= 0:
+			errors.append("Address must not be empty")
+
+		try:
+			latitude = float(request.form["latitude"])
+		except ValueError:
+			errors.append("Latitude must be a number")
+		try:
+			longitude = float(request.form["longitude"])
+		except ValueError:
+			errors.append("Longitude must be a number")
+
+		if len(errors) > 0:
+			messages = ["Errors were found:"]
+			messages.extend(errors)
+		else:
+			database.set_address_latlong(address, (latitude, longitude))
+			messages = ["Address set successfully"]
+
+		return render_template("set-latlong-result.html", messages = messages)
+
 @app.route("/admin/import-workspaces", methods = ["GET", "POST"])
 def import_workspaces():
 	if request.method == "GET":
diff --git a/templates/set-latlong-result.html b/templates/set-latlong-result.html
new file mode 100644
index 0000000000000000000000000000000000000000..3b88aefaccb7e76723dfe433f4320890d74476b2
--- /dev/null
+++ b/templates/set-latlong-result.html
@@ -0,0 +1,7 @@
+{% extends "main.html" %}
+{% block title %}Set Latitude and Longitude of Address{% endblock %}
+{% block mainBlock %}
+{% for message in messages %}
+<div>{{ message }}</div>
+{% endfor %}
+{% endblock %}
\ No newline at end of file
diff --git a/templates/set-latlong.html b/templates/set-latlong.html
new file mode 100644
index 0000000000000000000000000000000000000000..58932b18397ed5ee97772a3bb4fe8fa7463ae6c1
--- /dev/null
+++ b/templates/set-latlong.html
@@ -0,0 +1,28 @@
+{% extends "main.html" %}
+{% block title %}Set Latitude and Longitude of Address{% endblock %}
+{% block mainBlock %}
+{% if address == None %}
+<h1>Addresses without latitude and longitude</h1>
+{% for address in addresses %}
+<div><a href="/admin/set-latlong?address={{ address|urlencode }}">{{ address }}</a></div>
+{% endfor %}
+{% else %}
+<form action="/admin/set-latlong" method="POST">
+	<table>
+		<tr>
+			<td><label for="address">Address:</label></td>
+			<td><input id="address" type="text" name="address" readonly value="{{ address }}"></td>
+		</tr>
+		<tr>
+			<td><label for="latitude">Latitude:</label></td>
+			<td><input id="latitude" type="text" name="latitude"></td>
+		</tr>
+		<tr>
+			<td><label for="longitude">Longitude:</label></td>
+			<td><input id="longitude" type="text" name="longitude"></td>
+		</tr>
+	</table>
+	<input type="submit">
+</form>
+{% endif %}
+{% endblock %}
\ No newline at end of file