diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/debug/model/RemoteAntDebugBuildListener.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/debug/model/RemoteAntDebugBuildListener.java
index 6ccb556..7137d46 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/debug/model/RemoteAntDebugBuildListener.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/debug/model/RemoteAntDebugBuildListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,8 +69,14 @@
 		}
 	}	
 	
-	public RemoteAntDebugBuildListener(ILaunch launch) {
-		super(launch);
+	/**
+	 * Constructor
+	 * 
+	 * @param launch the backing launch to listen to
+	 * @param encoding the encoding to use for communications
+	 */
+	public RemoteAntDebugBuildListener(ILaunch launch, String encoding) {
+		super(launch, encoding);
 		//fDebug= true;
 	}
 	
@@ -130,7 +136,7 @@
     		try {
     			fRequestSocket = new Socket("localhost", fRequestPort); //$NON-NLS-1$
     			fRequestWriter = new PrintWriter(fRequestSocket.getOutputStream(), true);
-    			fResponseReader = new BufferedReader(new InputStreamReader(fRequestSocket.getInputStream()));
+    			fResponseReader = new BufferedReader(new InputStreamReader(fRequestSocket.getInputStream(), getEncoding()));
     			
     			fReaderThread= new ReaderThread();
     			fReaderThread.start();
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchDelegate.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchDelegate.java
index 03b38ad..5b6b802 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchDelegate.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchDelegate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -526,14 +526,15 @@
 	
 	private void runInSeparateVM(ILaunchConfiguration configuration, ILaunch launch, IProgressMonitor monitor, String idStamp, String antHome, int port, int requestPort, StringBuffer commandLine, boolean captureOutput, boolean setInputHandler) throws CoreException {
         boolean debug= fMode.equals(ILaunchManager.DEBUG_MODE);
+        String encoding = DebugPlugin.getDefault().getLaunchManager().getEncoding(configuration);
 		if (captureOutput) {
 			if (debug) {
-				RemoteAntDebugBuildListener listener= new RemoteAntDebugBuildListener(launch);
+				RemoteAntDebugBuildListener listener= new RemoteAntDebugBuildListener(launch, encoding);
 				if (requestPort != -1) {
 					listener.startListening(port, requestPort);
 				}
 			} else if (!fUserSpecifiedLogger) {
-				RemoteAntBuildListener client= new RemoteAntBuildListener(launch);
+				RemoteAntBuildListener client= new RemoteAntBuildListener(launch, encoding);
 				if (port != -1) {
 					client.startListening(port);
 				}
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/RemoteAntBuildListener.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/RemoteAntBuildListener.java
index 4379104..22475e8 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/RemoteAntBuildListener.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/RemoteAntBuildListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -72,6 +72,11 @@
     private String fLastFileName= null;
     private String fLastTaskName= null;
     private boolean fBuildFailed= false;
+    /**
+	 * The encoding to use
+	 * @since 3.4.2+
+	 */
+    private String fEncoding;
     
     /**
      * Reads the message stream from the RemoteAntBuildLogger
@@ -93,7 +98,7 @@
                 int socketTimeout= prefs.getInt(IAntUIPreferenceConstants.ANT_COMMUNICATION_TIMEOUT);
                 fServerSocket.setSoTimeout(socketTimeout);
                 fSocket= fServerSocket.accept();
-                fBufferedReader= new BufferedReader(new InputStreamReader(fSocket.getInputStream()));
+                fBufferedReader= new BufferedReader(new InputStreamReader(fSocket.getInputStream(), fEncoding));
                 String message;
                 while(fBufferedReader != null && (message= fBufferedReader.readLine()) != null) {
                     receiveMessage(message);
@@ -112,12 +117,29 @@
         }
     }
     
-    public RemoteAntBuildListener(ILaunch launch) {
-        super();
-        fLaunch= launch;
-        DebugPlugin.getDefault().getLaunchManager().addLaunchListener(this);
+    /**
+	 * Constructor
+	 * 
+	 * @param launch the backing launch to listen to
+	 * @param encoding the encoding to use for communications
+     */
+	public RemoteAntBuildListener(ILaunch launch, String encoding) {
+	    super();
+	    fLaunch= launch;
+	    fEncoding = encoding;
+	    DebugPlugin.getDefault().getLaunchManager().addLaunchListener(this);
     }
 
+	/**
+	 * Returns the encoding set on the listener
+	 * 
+	 * @return the encoding set on the listener
+	 * @since 3.4.2+
+	 */
+	protected String getEncoding() {
+		return fEncoding;
+	}
+	
     /**
      * Start listening to an Ant build. Start a server connection that
      * the RemoteAntBuildLogger can connect to.
