diff --git a/src/main/java/bdv/server/BigDataServer.java b/src/main/java/bdv/server/BigDataServer.java
index e9cb2ef91982cc0f673a3e0ba07356f10a59cae9..10c8e51595fc3e78e153d50e433095b1230337f2 100644
--- a/src/main/java/bdv/server/BigDataServer.java
+++ b/src/main/java/bdv/server/BigDataServer.java
@@ -10,6 +10,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.imglib2.img.basictypeaccess.volatiles.array.VolatileShortArray;
+import net.imglib2.realtransform.AffineTransform3D;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
@@ -21,12 +22,13 @@ import bdv.img.cache.LoadingStrategy;
import bdv.img.cache.VolatileCell;
import bdv.img.cache.VolatileGlobalCellCache;
import bdv.img.hdf5.Hdf5ImageLoader;
+import bdv.img.remote.AffineTransform3DJsonSerializer;
import bdv.img.remote.RemoteImageLoaderMetaData;
import bdv.spimdata.SequenceDescriptionMinimal;
import bdv.spimdata.SpimDataMinimal;
import bdv.spimdata.XmlIoSpimDataMinimal;
-import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
public class BigDataServer
{
@@ -57,7 +59,11 @@ public class BigDataServer
final Hdf5ImageLoader imgLoader = ( Hdf5ImageLoader ) seq.getImgLoader();
cache = imgLoader.getCache();
metadata = new RemoteImageLoaderMetaData( imgLoader, seq );
- metadataJson = new Gson().toJson( metadata );
+
+ final GsonBuilder gsonBuilder = new GsonBuilder();
+ gsonBuilder.registerTypeAdapter( AffineTransform3D.class, new AffineTransform3DJsonSerializer() );
+ gsonBuilder.enableComplexMapKeySerialization();
+ metadataJson = gsonBuilder.create().toJson( metadata );
cacheHints = new CacheHints( LoadingStrategy.BLOCKING, 0, false );
}