Fazendo um servidor proxy em Java

Eu estou tentando fazer um SERVIDOR proxy em Java, mas por nenhum motivo mesmo. Quero fazer na verdade um tipo de AdBlock pro IE e pro Chrome e outros browsers que ainda não tem AdBlock.

Eu já fiz o proxy, mas o que acontece é que muitos sites não funcionam.
As imagens ficam todas corrompidas. Acentos não aparecem.
Outros sites nem funcionam, ou demoram vários minutos para carregar.
Há algum jeito de fazer funcionar corretamente?
E como é um proxy rodando na minha própria máquina, quero que fique rápido, há alguma dica pra não ficar lento?

[code]import java.net.;
import java.io.
;
import java.util.;
import org.apache.commons.io.
;

public class FibDraw {
public static void main(String[] args) throws Exception {
ServerSocket s = new ServerSocket(123);

	while (true) {    		
		Socket ac = s.accept();
		System.out.println("Recebendo requerimento browser com proxy...");    		
		BufferedReader rrad = new BufferedReader(new InputStreamReader(ac.getInputStream()));
		OutputStreamWriter rsnd = new OutputStreamWriter(ac.getOutputStream());
		StringBuilder prxreq2 = new StringBuilder();
		String temp;
		String host = "";  
			  		
		while (!(temp = rrad.readLine()).equals("")) {    			
			if (temp.indexOf("Accept-Encoding") == -1) prxreq2.append(temp); prxreq2.append("\r\n");
			if (temp.indexOf("Host:") > -1) host = temp.split(": ")[1]; 			
		}
		
    	prxreq2.append("\r\n");
		String prxreq = new String(prxreq2);
		System.out.println(prxreq);
		
		System.out.println("Re-enviando para o servidor...");
		Socket cl = new Socket(host,80);
	
		OutputStreamWriter d = new OutputStreamWriter(cl.getOutputStream());
		d.write(prxreq);
		d.flush();
		
		System.out.println("Esperando resposta do servidor...");    	
		String resp = IOUtils.toString(cl.getInputStream());
		System.out.println(resp);   
		
		d.close();    	 	
		cl.close();
		
		System.out.println("Enviando resposta do servidor para o browser...");
		
		rsnd.write(resp);
		rsnd.flush();
		
		rsnd.close();
		ac.close();    		
	}    	
}

}[/code]

Eu creio que é alguma coisa haver com o BufferedReader, mas o problema é que se eu faço “!= null” não dá certo. tem que ser linha.equals(""), como vou fazer isso?

E além disso ignorem que a classe se chama FibDraw, porque eu estava fazendo uns testes lá.