Index: shale-apps/shale-usecases/src/main/java/org/apache/shale/usecases/remoting/Business.java
===================================================================
--- shale-apps/shale-usecases/src/main/java/org/apache/shale/usecases/remoting/Business.java	(revision 442856)
+++ shale-apps/shale-usecases/src/main/java/org/apache/shale/usecases/remoting/Business.java	(working copy)
@@ -96,7 +96,7 @@
     protected void selectItems(FacesContext context, SelectItem items[]) throws IOException {
 
         ResponseWriter writer =
-                (new ResponseFactory()).getResponseWriter(context, "text/xml");
+                (new ResponseFactory()).getResponseWriter(context, "text/xml; charset=UTF-8");
 
         // Generate the response content
         writer.startDocument();
Index: shale-remoting/src/main/java/org/apache/shale/remoting/faces/ResponseFactory.java
===================================================================
--- shale-remoting/src/main/java/org/apache/shale/remoting/faces/ResponseFactory.java	(revision 442856)
+++ shale-remoting/src/main/java/org/apache/shale/remoting/faces/ResponseFactory.java	(working copy)
@@ -189,11 +189,26 @@
             throw new FacesException(e);
         }
 
+        // From JSF 1.2, can use ExternalContext#getResponseCharacterEncoding()
+        String encoding = null;
+        try {
+            String methodName = "getCharacterEncoding";
+            Method method =
+              response.getClass().getMethod(methodName, new Class[] { });
+            encoding = (String) method.invoke(response, new Object[] { });
+        } catch (IllegalAccessException e) {
+            throw new FacesException(e);
+        } catch (InvocationTargetException e) {
+            throw new FacesException(e);
+        } catch (NoSuchMethodException e) {
+            throw new FacesException(e);
+        }
+
         // Construct a ResponseWriter that wraps this stream
-        if ("text/html".equals(contentType)) {
-            return renderKit(context).createResponseWriter(writer, contentType, null);
+        if (contentType != null && contentType.startsWith("text/html")) {
+            return renderKit(context).createResponseWriter(writer, contentType, encoding);
         } else {
-            return new BasicResponseWriter(writer, contentType, null);
+            return new BasicResponseWriter(writer, contentType, encoding);
         }
 
 
Index: shale-remoting/src/main/java/org/apache/shale/remoting/faces/BasicResponseWriter.java
===================================================================
--- shale-remoting/src/main/java/org/apache/shale/remoting/faces/BasicResponseWriter.java	(revision 442856)
+++ shale-remoting/src/main/java/org/apache/shale/remoting/faces/BasicResponseWriter.java	(working copy)
@@ -308,7 +308,7 @@
     private void numeric(Writer writer, char ch) throws IOException {
 
         writer.write("&#");
-        writer.write(String.valueOf(ch));
+        writer.write(String.valueOf((int)ch));
         writer.write(";");
 
     }
