diff --git a/server-webapp/src/main/java/org/taverna/server/master/interaction/EntryHandler.java b/server-webapp/src/main/java/org/taverna/server/master/interaction/EntryHandler.java
index a04fb87..090982c 100644
--- a/server-webapp/src/main/java/org/taverna/server/master/interaction/EntryHandler.java
+++ b/server-webapp/src/main/java/org/taverna/server/master/interaction/EntryHandler.java
@@ -5,9 +5,14 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.io.OutputStream;
+import java.io.OutputStreamWriter;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
+import java.nio.charset.Charset;
+import java.nio.charset.IllegalCharsetNameException;
+import java.nio.charset.UnsupportedCharsetException;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.Produces;
@@ -30,9 +35,13 @@
 @Provider
 @Produces({ "application/atom+xml", "application/atom+xml;type=entry" })
 @Consumes({ "application/atom+xml", "application/atom+xml;type=entry" })
-public class EntryHandler implements MessageBodyWriter<Entry>, MessageBodyReader<Entry> {
+public class EntryHandler implements MessageBodyWriter<Entry>,
+		MessageBodyReader<Entry> {
+	private static final String ENC = "UTF-8";
 	private static final MediaType ENTRY = new MediaType("application",
 			"atom+xml", singletonMap("type", "entry"));
+	private static final Variant VARIANT = new Variant(ENTRY, null, ENC);
+	private static final Charset UTF8 = Charset.forName(ENC);
 
 	@Required
 	public void setAbdera(Abdera abdera) {
@@ -51,8 +60,8 @@
 		if (!ENTRY.isCompatible(mediaType))
 			return false;
 		if (mediaType.getParameters().containsKey("type"))
-			return "entry".equalsIgnoreCase(mediaType.getParameters()
-					.get("type"));
+			return "entry".equalsIgnoreCase(mediaType.getParameters().get(
+					"type"));
 		return true;
 	}
 
@@ -61,13 +70,35 @@
 			Annotation[] annotations, MediaType mediaType,
 			MultivaluedMap<String, String> httpHeaders, InputStream entityStream)
 			throws IOException, WebApplicationException {
-		Document<Entry> doc = parser.parse(entityStream);
-		if (!Entry.class.isAssignableFrom(doc.getRoot().getClass())) {
+		Charset cs = UTF8;
+		try {
+			String charset = mediaType.getParameters().get("charset");
+			if (charset != null)
+				cs = Charset.forName(charset);
+		} catch (IllegalCharsetNameException e) {
 			throw new WebApplicationException(Response
-					.notAcceptable(asList(new Variant(ENTRY, null, null)))
-					.entity("not really a feed entry").build());
+					.notAcceptable(asList(VARIANT)).entity("bad charset name")
+					.build());
+		} catch (UnsupportedCharsetException e) {
+			throw new WebApplicationException(Response
+					.notAcceptable(asList(VARIANT))
+					.entity("unsupportd charset name").build());
 		}
-		return doc.getRoot();
+		try {
+			Document<Entry> doc = parser.parse(new InputStreamReader(
+					entityStream, cs));
+			if (!Entry.class.isAssignableFrom(doc.getRoot().getClass())) {
+				throw new WebApplicationException(Response
+						.notAcceptable(asList(VARIANT))
+						.entity("not really a feed entry").build());
+			}
+			return doc.getRoot();
+		} catch (ClassCastException e) {
+			throw new WebApplicationException(Response
+					.notAcceptable(asList(VARIANT))
+					.entity("not really a feed entry").build());
+
+		}
 	}
 
 	@Override
@@ -78,8 +109,8 @@
 		if (!ENTRY.isCompatible(mediaType))
 			return false;
 		if (mediaType.getParameters().containsKey("type"))
-			return "entry".equalsIgnoreCase(mediaType.getParameters()
-					.get("type"));
+			return "entry".equalsIgnoreCase(mediaType.getParameters().get(
+					"type"));
 		return true;
 	}
 
@@ -95,7 +126,8 @@
 			MultivaluedMap<String, Object> httpHeaders,
 			OutputStream entityStream) throws IOException,
 			WebApplicationException {
-		httpHeaders.putSingle("Content-Type", ENTRY.toString());
-		writer.writeTo(t, entityStream);
+		httpHeaders.putSingle("Content-Type", ENTRY.toString() + ";charset="
+				+ ENC);
+		writer.writeTo(t, new OutputStreamWriter(entityStream, UTF8));
 	}
 }
diff --git a/server-webapp/src/main/java/org/taverna/server/master/interaction/FeedHandler.java b/server-webapp/src/main/java/org/taverna/server/master/interaction/FeedHandler.java
index 57442f1..d495c4e 100644
--- a/server-webapp/src/main/java/org/taverna/server/master/interaction/FeedHandler.java
+++ b/server-webapp/src/main/java/org/taverna/server/master/interaction/FeedHandler.java
@@ -4,6 +4,7 @@
 
 import java.io.IOException;
 import java.io.OutputStream;
+import java.io.OutputStreamWriter;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 
@@ -24,6 +25,7 @@
 public class FeedHandler implements MessageBodyWriter<Feed> {
 	private static final MediaType FEED = new MediaType("application",
 			"atom+xml", singletonMap("type", "feed"));
+	private static final String ENC = "UTF-8";
 
 	@Required
 	public void setAbdera(Abdera abdera) {
@@ -57,7 +59,8 @@
 			MultivaluedMap<String, Object> httpHeaders,
 			OutputStream entityStream) throws IOException,
 			WebApplicationException {
-		httpHeaders.putSingle("Content-Type", FEED.toString());
-		writer.writeTo(t, entityStream);
+		httpHeaders.putSingle("Content-Type", FEED.toString() + ";charset="
+				+ ENC);
+		writer.writeTo(t, new OutputStreamWriter(entityStream, ENC));
 	}
 }
