diff --git a/pom.xml b/pom.xml
index fa418bef06330979427f19cb0950cd927d7d29fe..f96a8fc7c287851c11d065e3072b12e62c1433ea 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
         <dependency>
             <groupId>com.sparkjava</groupId>
             <artifactId>spark-core</artifactId>
-            <version>2.8.0</version>
+            <version>2.9.3</version>
         </dependency>
 
         <dependency>
@@ -33,7 +33,7 @@
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
-            <version>27.0-jre</version>
+            <version>30.1-jre</version>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
@@ -43,7 +43,7 @@
         <dependency>
             <groupId>com.googlecode.libphonenumber</groupId>
             <artifactId>libphonenumber</artifactId>
-            <version>8.10.14</version>
+            <version>8.12.16</version>
         </dependency>
         <dependency>
             <groupId>com.github.zafarkhaja</groupId>
@@ -54,18 +54,12 @@
         <dependency>
             <groupId>rocks.xmpp</groupId>
             <artifactId>xmpp-core-client</artifactId>
-            <version>0.8.1</version>
+            <version>0.8.2</version>
         </dependency>
         <dependency>
             <groupId>rocks.xmpp</groupId>
             <artifactId>xmpp-extensions-client</artifactId>
-            <version>0.8.1</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.github.inputmice</groupId>
-            <artifactId>xmpp-addr-adapter</artifactId>
-            <version>0.2.1</version>
+            <version>0.8.2</version>
         </dependency>
 
         <dependency>
@@ -77,7 +71,7 @@
         <dependency>
             <groupId>com.google.code.gson</groupId>
             <artifactId>gson</artifactId>
-            <version>2.8.5</version>
+            <version>2.8.6</version>
         </dependency>
 
         <dependency>
@@ -89,7 +83,7 @@
         <dependency>
             <groupId>org.mariadb.jdbc</groupId>
             <artifactId>mariadb-java-client</artifactId>
-            <version>2.4.2</version>
+            <version>2.7.1</version>
         </dependency>
 
         <dependency>
@@ -123,7 +117,7 @@
 
     <groupId>QuicksyServer</groupId>
     <artifactId>im.quicksy.server</artifactId>
-    <version>0.1</version>
+    <version>0.2</version>
     <build>
         <plugins>
 
diff --git a/src/main/java/de/gultsch/xmpp/addr/adapter/Adapter.java b/src/main/java/de/gultsch/xmpp/addr/adapter/Adapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..52a52eb600a9b330037a2f7a79b95911bc9b8c9f
--- /dev/null
+++ b/src/main/java/de/gultsch/xmpp/addr/adapter/Adapter.java
@@ -0,0 +1,34 @@
+package de.gultsch.xmpp.addr.adapter;
+
+import com.google.gson.GsonBuilder;
+import de.gultsch.xmpp.addr.adapter.gson.JidDeserializer;
+import de.gultsch.xmpp.addr.adapter.gson.JidSerializer;
+import de.gultsch.xmpp.addr.adapter.sql2o.IllegalJidStrategy;
+import de.gultsch.xmpp.addr.adapter.sql2o.JidConverter;
+import org.sql2o.converters.Converter;
+import rocks.xmpp.addr.Jid;
+
+import java.util.Map;
+
+public class Adapter {
+
+    public static void register(GsonBuilder gsonBuilder) {
+        gsonBuilder.registerTypeAdapter(Jid.class, new JidDeserializer());
+        gsonBuilder.registerTypeAdapter(Jid.class, new JidSerializer());
+    }
+
+    public static void register(Map<Class, Converter> converters) {
+        register(converters, IllegalJidStrategy.THROW);
+    }
+
+    public static void register(Map<Class, Converter> converters, IllegalJidStrategy illegalJidStrategy) {
+        final JidConverter jidConverter = new JidConverter(illegalJidStrategy);
+        converters.put(Jid.class, jidConverter);
+        try {
+            converters.put(Class.forName("rocks.xmpp.addr.FullJid"), jidConverter);
+        } catch (ClassNotFoundException e) {
+            throw new AssertionError(e);
+        }
+    }
+
+}
diff --git a/src/main/java/de/gultsch/xmpp/addr/adapter/gson/JidDeserializer.java b/src/main/java/de/gultsch/xmpp/addr/adapter/gson/JidDeserializer.java
new file mode 100644
index 0000000000000000000000000000000000000000..e49e22a29f7072aaa1e94bb7d3f7c43506f70fb1
--- /dev/null
+++ b/src/main/java/de/gultsch/xmpp/addr/adapter/gson/JidDeserializer.java
@@ -0,0 +1,17 @@
+package de.gultsch.xmpp.addr.adapter.gson;
+
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParseException;
+import rocks.xmpp.addr.Jid;
+
+import java.lang.reflect.Type;
+
+public class JidDeserializer implements JsonDeserializer<Jid> {
+
+    public Jid deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
+        String jid = jsonElement.getAsString();
+        return Jid.ofEscaped(jid);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/de/gultsch/xmpp/addr/adapter/gson/JidSerializer.java b/src/main/java/de/gultsch/xmpp/addr/adapter/gson/JidSerializer.java
new file mode 100644
index 0000000000000000000000000000000000000000..9827484f01348e4439d86ec63c7c8c5de4b1c9b6
--- /dev/null
+++ b/src/main/java/de/gultsch/xmpp/addr/adapter/gson/JidSerializer.java
@@ -0,0 +1,13 @@
+package de.gultsch.xmpp.addr.adapter.gson;
+
+import com.google.gson.*;
+import rocks.xmpp.addr.Jid;
+
+import java.lang.reflect.Type;
+
+public class JidSerializer implements JsonSerializer<Jid> {
+
+    public JsonElement serialize(Jid jid, Type type, JsonSerializationContext jsonSerializationContext) {
+        return new JsonPrimitive(jid.toEscapedString());
+    }
+}
diff --git a/src/main/java/de/gultsch/xmpp/addr/adapter/sql2o/JidConverter.java b/src/main/java/de/gultsch/xmpp/addr/adapter/sql2o/JidConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..e10cc81d7b3ff5dee46ba18a5aec15b43dafb1e2
--- /dev/null
+++ b/src/main/java/de/gultsch/xmpp/addr/adapter/sql2o/JidConverter.java
@@ -0,0 +1,28 @@
+package de.gultsch.xmpp.addr.adapter.sql2o;
+
+import org.sql2o.converters.Converter;
+import org.sql2o.converters.ConverterException;
+import rocks.xmpp.addr.Jid;
+
+public class JidConverter implements Converter<Jid> {
+
+    @Override
+    public Jid convert(Object o) throws ConverterException {
+        if (o == null) {
+            return null;
+        } else if (o instanceof String) {
+            try {
+                return Jid.of((String) o);
+            } catch (IllegalArgumentException e) {
+                throw new ConverterException("Unable to convert " + o.toString(), e);
+            }
+        } else {
+            throw new ConverterException("can not convert object of type " + o.getClass().getName() + " to Jid");
+        }
+    }
+
+    @Override
+    public Object toDatabaseParam(Jid jid) {
+        return jid.asBareJid().toString();
+    }
+}
\ No newline at end of file