Fix encoding problems.
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));
 	}
 }