diff --git a/src/main/java/info/textgrid/services/aggregator/html/HTML.java b/src/main/java/info/textgrid/services/aggregator/html/HTML.java
index 80258158d233ea4306c9fe335d9b4bf05ba96426..6bda0f0a472df6f5dc92f30e343c48c359fc2c0d 100644
--- a/src/main/java/info/textgrid/services/aggregator/html/HTML.java
+++ b/src/main/java/info/textgrid/services/aggregator/html/HTML.java
@@ -213,15 +213,16 @@ public Response get(
 			@Description("If true, pass the information the stylesheet that its result will be embedded into some website") @QueryParam("embedded") final boolean embedded,
 			@Description("URL of the CSS that should be referenced in the HTML that is created")
 			@QueryParam("css") final URI css,
+			@Description("The requested content type. E.g., text/html or text/xml") @QueryParam("mediatype") final String mediaType,
 			@Context final Request request) throws ObjectNotFoundFault,
 			MetadataParseFault, IoFault, AuthFault,
 			ProtocolNotImplementedFault, WebApplicationException, IOException,
 			SaxonApiException, ExecutionException {
-		logger.fine("HTML called for root object: " + uri);
 
+		logger.fine("HTML called for root object: " + uri);
 
 		final HTMLWriter writer = new HTMLWriter(this, uri, xsluri,
-				refreshStylesheet, pi, embedded, css, sid, request);
+				refreshStylesheet, pi, embedded, css, sid, mediaType, request);
 		return writer.createResponse().build();
 	}
 
diff --git a/src/main/java/info/textgrid/services/aggregator/html/HTMLWriter.java b/src/main/java/info/textgrid/services/aggregator/html/HTMLWriter.java
index ea63cd990e2140e69033e52b1172dfa54143d6a1..e34a9c1cc68bd13a81b7e2b20d8448e4b2ff1bb2 100644
--- a/src/main/java/info/textgrid/services/aggregator/html/HTMLWriter.java
+++ b/src/main/java/info/textgrid/services/aggregator/html/HTMLWriter.java
@@ -18,17 +18,18 @@
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.text.MessageFormat;
+import java.util.Properties;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.CacheControl;
-import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Request;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.ResponseBuilder;
 import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.core.StreamingOutput;
+import javax.xml.transform.OutputKeys;
 import javax.xml.transform.Source;
 import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.TransformerFactory;
@@ -37,6 +38,7 @@
 
 import net.sf.saxon.s9api.QName;
 import net.sf.saxon.s9api.SaxonApiException;
+import net.sf.saxon.s9api.Serializer;
 import net.sf.saxon.s9api.XdmAtomicValue;
 import net.sf.saxon.s9api.XsltExecutable;
 import net.sf.saxon.s9api.XsltTransformer;
@@ -121,6 +123,8 @@ private enum SourceType {
 
 	private Request request;
 
+	private Optional<String> requestedMediaType;
+
 	// Constructor and configuration
 
 	public HTMLWriter(final HTML service, final URI rootURI) {
@@ -135,7 +139,8 @@ public HTMLWriter(final HTML service, final URI rootURI) {
 	public HTMLWriter(final HTML service, final URI rootURI,
 			final URI stylesheetURI, final boolean refreshStylesheet,
 			final boolean readStylesheetPI, final boolean embedded,
-			final URI css, final String sid, final Request request) {
+			final URI css, final String sid, final String mediaType,
+			final Request request) {
 
 		this(service, rootURI);
 
@@ -145,6 +150,7 @@ public HTMLWriter(final HTML service, final URI rootURI,
 		this.embedded = embedded;
 		this.css = Optional.fromNullable(css);
 		this.sid(sid);
+		this.requestedMediaType = Optional.fromNullable(mediaType);
 		this.request = request;
 	}
 
@@ -289,6 +295,12 @@ protected HTMLWriter loadStylesheet() throws SaxonApiException,
 				embedded));
 
 		transformer.setSource(source);
+
+		if (requestedMediaType.isPresent()) {
+			transformer.getUnderlyingController().setOutputProperty(
+					OutputKeys.MEDIA_TYPE, requestedMediaType.get());
+		}
+
 		this.transformer = transformer;
 		logger.log(Level.INFO, MessageFormat.format("Prepared XSLT stylesheet {1} for {0} after {2}", rootURI, actualStylesheet, stopwatch.toString()));
 		return this;
@@ -305,8 +317,10 @@ public void write(final OutputStream out) throws IOException,
 				loadStylesheet();
 			}
 			logger.log(Level.INFO, MessageFormat.format("Ready for transformation of {0} after {1}", rootURI, stopwatch.toString()));
+			final Serializer serializer = service.xsltProcessor
+					.newSerializer(out);
 			transformer
-					.setDestination(service.xsltProcessor.newSerializer(out));
+.setDestination(serializer);
 			transformer.transform();
 
 		} catch (final Exception e) {
@@ -334,7 +348,15 @@ public ResponseBuilder createResponse() throws ObjectNotFoundFault, MetadataPars
 		loadStylesheet();
 
 		final ResponseBuilder builder = Response.ok();
-		builder.type(MediaType.TEXT_XML_TYPE);
+		if (requestedMediaType.isPresent()) {
+			builder.type(requestedMediaType.get());
+		} else {
+			final Properties outputProperties = transformer
+					.getUnderlyingController().getOutputProperties();
+			builder.type(outputProperties.getProperty(OutputKeys.MEDIA_TYPE,
+					"text/html"));
+		}
+
 		builder.lastModified(getContent().getMetadata().getGeneric().getGenerated().getLastModified().toGregorianCalendar().getTime());
 		final CacheControl cacheControl = new CacheControl();
 		cacheControl.setPrivate(sid.isPresent());
diff --git a/src/test/java/info/textgrid/services/aggregator/html/HtmlAT.java b/src/test/java/info/textgrid/services/aggregator/html/HtmlAT.java
index 0ccec0e180d4d35411e0f1f8a57db173418af36d..7e93f9cf37473d8f6f19f0c116a2483cb38c3981 100644
--- a/src/test/java/info/textgrid/services/aggregator/html/HtmlAT.java
+++ b/src/test/java/info/textgrid/services/aggregator/html/HtmlAT.java
@@ -17,7 +17,7 @@ public void testSimpleGet() throws MalformedURLException, IOException {
 				+ System.getProperty("sid"));
 		connection.connect();
 		Assert.assertEquals(200, connection.getResponseCode());
-		Assert.assertEquals("text/xml", connection.getContentType());
+		Assert.assertEquals("text/html", connection.getContentType());
 		Assert.assertTrue("Content length > 0", readContents(connection) > 0);
 	}
 }
diff --git a/src/test/java/info/textgrid/services/aggregator/html/HtmlIT.java b/src/test/java/info/textgrid/services/aggregator/html/HtmlIT.java
index 94bacb3dd1cbf0c8bba6427fbc646b1946b6f0b8..ee003d9479bd11ca2317671d962881ff3fb142f4 100644
--- a/src/test/java/info/textgrid/services/aggregator/html/HtmlIT.java
+++ b/src/test/java/info/textgrid/services/aggregator/html/HtmlIT.java
@@ -16,7 +16,7 @@ public void testGet() throws IOException {
 		final HttpURLConnection connection = createRequest("/html/textgrid:jfst.0");
 		connection.connect();
 		Assert.assertEquals(200, connection.getResponseCode());
-		Assert.assertEquals("text/xml", connection.getContentType());
+		Assert.assertEquals("text/html", connection.getContentType());
 		Assert.assertTrue("Content length > 0", readContents(connection) > 0);
 	}