diff --git a/de.srsoftware.cal.app/src/main/java/de/srsoftware/cal/app/AutoImporter.java b/de.srsoftware.cal.app/src/main/java/de/srsoftware/cal/app/AutoImporter.java
index 29de9c5..755b683 100644
--- a/de.srsoftware.cal.app/src/main/java/de/srsoftware/cal/app/AutoImporter.java
+++ b/de.srsoftware.cal.app/src/main/java/de/srsoftware/cal/app/AutoImporter.java
@@ -19,14 +19,19 @@ public class AutoImporter implements Runnable, ClassListener {
 	private static final System.Logger LOG = System.getLogger(AutoImporter.class.getSimpleName());
 	private static final Map<String, String> DESCRIPTION_TAGS = Map.<String, String>ofEntries(
 			entry("50s","50er"),
+			entry("50’s","50er"),
 			entry("50er","50er"),
 			entry("60s","60er"),
+			entry("60’s","60er"),
 			entry("60er","60er"),
 			entry("70s","70er"),
+			entry("70’s","70er"),
 			entry("70er","70er"),
 			entry("80s","80er"),
+			entry("80’s","80er"),
 			entry("80er","80er"),
 			entry("90s","90er"),
+			entry("90’s","90er"),
 			entry("90er","90er"),
 			entry("ac dc","Metal"),
 			entry("alternative rock","AlternativeRock"),
@@ -91,6 +96,7 @@ public class AutoImporter implements Runnable, ClassListener {
 			entry("humor","Comedy"),
 			entry("humpa","Humppa"),
 			entry("humppa","Humppa"),
+			entry("indie","indie"),
 			entry("industrial","Industrial"),
 			entry("industrial metal","IndustrialMetal"),
 			entry("jam session","JamSession"),
@@ -281,7 +287,7 @@ public class AutoImporter implements Runnable, ClassListener {
 
 	@Override
 	public void classAdded(Class<?> aClass) {
-		if (Importer.class.isAssignableFrom(aClass)) try {
+		if (Importer.class.isAssignableFrom(aClass) && aClass.getSimpleName().contains("Ebu")) try {
 			var instance = aClass.getDeclaredConstructor().newInstance();
 			importers.add((Importer) instance);
 			lastImport = null;
diff --git a/de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/MariaDB.java b/de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/MariaDB.java
index 70458da..255289f 100644
--- a/de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/MariaDB.java
+++ b/de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/MariaDB.java
@@ -1,6 +1,7 @@
 /* © SRSoftware 2024 */
 package de.srsoftware.cal.db;
 
+import static de.srsoftware.cal.Util.extractCoords;
 import static de.srsoftware.cal.db.Fields.*;
 import static de.srsoftware.cal.db.Fields.ALL;
 import static de.srsoftware.tools.Error.error;
@@ -74,38 +75,10 @@ public class MariaDB implements Database {
 			keys.close();
 			if (saved == null) return error("Insert query did not return appointment id!");
 
-			{  // link to attachments
-				var         attachments = saved.attachments();
-				InsertQuery assignQuery = null;
-				for (var attachment : attachments) {
-					var urlId = getOrCreateUrl(attachment.url());
-					if (assignQuery == null) assignQuery = insertInto(APPOINTMENT_ATTACHMENTS, AID, UID, MIME);
-					if (urlId.isPresent()) assignQuery.values(saved.id(), urlId.get(), attachment.mime());
-				}
-				if (assignQuery != null) assignQuery.ignoreDuplicates().execute(connection);
-			}
-
-			{  // link to links
-				var         links       = saved.links();
-				InsertQuery assignQuery = null;
-				for (var link : links) {
-					var urlId = getOrCreateUrl(link.url());
-					if (assignQuery == null) assignQuery = insertInto(APPOINTMENT_URLS, AID, UID, DESCRIPTION);
-					if (urlId.isPresent()) assignQuery.values(saved.id(), urlId.get(), link.desciption());
-				}
-				if (assignQuery != null) assignQuery.ignoreDuplicates().execute(connection);
-			}
+			addAttachments(saved);
+			addLinks(saved);
+			addTags(saved);
 
-			{
-				var         tags        = saved.tags();
-				InsertQuery assignQuery = null;
-				for (var tag : tags) {
-					var tagId = getOrCreateTag(tag);
-					if (assignQuery == null) assignQuery = insertInto(APPOINTMENT_TAGS, AID, TID);
-					if (tagId.isPresent()) assignQuery.values(saved.id(), tagId.get());
-				}
-				if (assignQuery != null) assignQuery.ignoreDuplicates().execute(connection);
-			}
 			return Payload.of(saved);
 		} catch (SQLException e) {
 			LOG.log(ERROR, "Failed to store appointment", e);
@@ -113,6 +86,39 @@ public class MariaDB implements Database {
 		}
 	}
 
+	private void addAttachments(Appointment saved) throws SQLException {  // link to attachments
+		var         attachments = saved.attachments();
+		InsertQuery assignQuery = null;
+		for (var attachment : attachments) {
+			var urlId = getOrCreateUrl(attachment.url());
+			if (assignQuery == null) assignQuery = insertInto(APPOINTMENT_ATTACHMENTS, AID, UID, MIME);
+			if (urlId.isPresent()) assignQuery.values(saved.id(), urlId.get(), attachment.mime());
+		}
+		if (assignQuery != null) assignQuery.ignoreDuplicates().execute(connection);
+	}
+
+	private void addLinks(Appointment saved) throws SQLException {  // link to links
+		var         links       = saved.links();
+		InsertQuery assignQuery = null;
+		for (var link : links) {
+			var urlId = getOrCreateUrl(link.url());
+			if (assignQuery == null) assignQuery = insertInto(APPOINTMENT_URLS, AID, UID, DESCRIPTION);
+			if (urlId.isPresent()) assignQuery.values(saved.id(), urlId.get(), link.desciption());
+		}
+		if (assignQuery != null) assignQuery.ignoreDuplicates().execute(connection);
+	}
+
+	private void addTags(Appointment saved) throws SQLException {
+		var         tags        = saved.tags();
+		InsertQuery assignQuery = null;
+		for (var tag : tags) {
+			var tagId = getOrCreateTag(tag);
+			if (assignQuery == null) assignQuery = insertInto(APPOINTMENT_TAGS, AID, TID);
+			if (tagId.isPresent()) assignQuery.values(saved.id(), tagId.get());
+		}
+		if (assignQuery != null) assignQuery.ignoreDuplicates().execute(connection);
+	}
+
 	private Optional<Long> getOrCreateUrl(URL url) throws SQLException {
 		var  rs  = select(UID).from(URLS).where(URL, equal(url.toString())).exec(connection);
 		Long uid = null;
@@ -158,8 +164,7 @@ public class MariaDB implements Database {
 
 	@Override
 	public Result<List<Appointment>> list(LocalDateTime from, LocalDateTime till, Integer count, Integer offset) {
-		var query = Query  //
-			.select("appointments.*", "GROUP_CONCAT(keyword) AS tags")
+		var query = select("appointments.*", "GROUP_CONCAT(keyword) AS tags")
 			.from(APPOINTMENTS)
 			.leftJoin(AID, "appointment_tags", AID)
 			.leftJoin("tid", "tags", "tid")
@@ -279,7 +284,7 @@ public class MariaDB implements Database {
 		var appointment = new BaseAppointment(id, title, description, start, end, location);
 
 		try {
-			Util.extractCoords(results.getString(COORDS)).optional().ifPresent(appointment::coords);
+			extractCoords(results.getString(COORDS)).optional().ifPresent(appointment::coords);
 		} catch (SQLException e) {
 			LOG.log(WARNING, "Failed to read coordinates from database!");
 		}
@@ -301,10 +306,10 @@ public class MariaDB implements Database {
 	@Override
 	public Result<Long> removeAppointment(long id) {
 		try {
-			Query.delete().from(APPOINTMENTS).where(AID, equal(id)).execute(connection);
-			Query.delete().from(APPOINTMENT_TAGS).where(AID, equal(id)).execute(connection);
-			Query.delete().from(APPOINTMENT_ATTACHMENTS).where(AID, equal(id)).execute(connection);
-			Query.delete().from(APPOINTMENT_URLS).where(AID, equal(id)).execute(connection);
+			delete().from(APPOINTMENTS).where(AID, equal(id)).execute(connection);
+			delete().from(APPOINTMENT_TAGS).where(AID, equal(id)).execute(connection);
+			delete().from(APPOINTMENT_ATTACHMENTS).where(AID, equal(id)).execute(connection);
+			delete().from(APPOINTMENT_URLS).where(AID, equal(id)).execute(connection);
 			return Payload.of(id);
 		} catch (SQLException e) {
 			return SqlError.of(e, "Failed to delete event %s", id);
@@ -318,15 +323,20 @@ public class MariaDB implements Database {
 		var coords = event.coords().map(Object::toString).orElse(null);
 		var location = event.location().orElse(null);
 		try {
-			Query
-			    .update(APPOINTMENTS)  //
+			long id = event.id();
+			Query.update(APPOINTMENTS)
 			    .set(TITLE, DESCRIPTION, START, END, LOCATION, COORDS)
-			    .where(AID, equal(event.id()))
+			    .where(AID, equal(id))
 			    .prepare(connection)
 			    .apply(event.title(), event.description(), start, end, location, coords);
 
-			// TODO: update links, attachments, tags
-			LOG.log(WARNING,"updating of tags, links and attachments not implemented!");
+			delete().from(APPOINTMENT_TAGS).where(AID, equal(id)).execute(connection);
+			addTags(event);
+			delete().from(APPOINTMENT_ATTACHMENTS).where(AID, equal(id)).execute(connection);
+			addAttachments(event);
+			delete().from(APPOINTMENT_URLS).where(AID, equal(id)).execute(connection);
+			addLinks(event);
+
 			return Payload.of(event);
 		} catch (SQLException sqle) {
 			return error(sqle, "Failed to update database entry");