diff --git a/src/org/apache/commons/codec/BinaryDecoder.java b/src/org/apache/commons/codec/BinaryDecoder.java
index 7aebabf..46494ac 100644
--- a/src/org/apache/commons/codec/BinaryDecoder.java
+++ b/src/org/apache/commons/codec/BinaryDecoder.java
@@ -21,7 +21,12 @@
  *
  * @author Apache Software Foundation
  * @version $Id: BinaryDecoder.java,v 1.10 2004/06/15 18:14:15 ggregory Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface BinaryDecoder extends Decoder {
 
     /**
diff --git a/src/org/apache/commons/codec/BinaryEncoder.java b/src/org/apache/commons/codec/BinaryEncoder.java
index 52859ed..3ecd63a 100644
--- a/src/org/apache/commons/codec/BinaryEncoder.java
+++ b/src/org/apache/commons/codec/BinaryEncoder.java
@@ -21,7 +21,12 @@
  * 
  * @author Apache Software Foundation
  * @version $Id: BinaryEncoder.java,v 1.10 2004/02/29 04:08:31 tobrien Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface BinaryEncoder extends Encoder {
     
     /**
diff --git a/src/org/apache/commons/codec/Decoder.java b/src/org/apache/commons/codec/Decoder.java
index 184920c..152ae53 100644
--- a/src/org/apache/commons/codec/Decoder.java
+++ b/src/org/apache/commons/codec/Decoder.java
@@ -28,7 +28,12 @@
  * 
  * @author Apache Software Foundation
  * @version $Id: Decoder.java,v 1.9 2004/02/29 04:08:31 tobrien Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface Decoder {
 
     /**
diff --git a/src/org/apache/commons/codec/DecoderException.java b/src/org/apache/commons/codec/DecoderException.java
index f35c016..4691f0b 100644
--- a/src/org/apache/commons/codec/DecoderException.java
+++ b/src/org/apache/commons/codec/DecoderException.java
@@ -21,7 +21,12 @@
  * 
  * @author Apache Software Foundation
  * @version $Id: DecoderException.java,v 1.9 2004/02/29 04:08:31 tobrien Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DecoderException extends Exception {
 
     /**
diff --git a/src/org/apache/commons/codec/Encoder.java b/src/org/apache/commons/codec/Encoder.java
index fa339ee..a906173 100644
--- a/src/org/apache/commons/codec/Encoder.java
+++ b/src/org/apache/commons/codec/Encoder.java
@@ -24,7 +24,12 @@
  *
  * @author Apache Software Foundation
  * @version $Id: Encoder.java,v 1.10 2004/02/29 04:08:31 tobrien Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface Encoder {
     
     /**
diff --git a/src/org/apache/commons/codec/EncoderException.java b/src/org/apache/commons/codec/EncoderException.java
index 0e202c1..95af173 100644
--- a/src/org/apache/commons/codec/EncoderException.java
+++ b/src/org/apache/commons/codec/EncoderException.java
@@ -24,7 +24,12 @@
  * 
  * @author Apache Software Foundation
  * @version $Id: EncoderException.java,v 1.10 2004/02/29 04:08:31 tobrien Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class EncoderException extends Exception {
 
     /**
diff --git a/src/org/apache/commons/codec/StringDecoder.java b/src/org/apache/commons/codec/StringDecoder.java
index 9b1a0cd..f6a5b26 100644
--- a/src/org/apache/commons/codec/StringDecoder.java
+++ b/src/org/apache/commons/codec/StringDecoder.java
@@ -21,7 +21,12 @@
  *
  * @author Apache Software Foundation
  * @version $Id: StringDecoder.java,v 1.9 2004/02/29 04:08:31 tobrien Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface StringDecoder extends Decoder {
     
     /**
diff --git a/src/org/apache/commons/codec/StringEncoder.java b/src/org/apache/commons/codec/StringEncoder.java
index 46f5404..4aafc20 100644
--- a/src/org/apache/commons/codec/StringEncoder.java
+++ b/src/org/apache/commons/codec/StringEncoder.java
@@ -21,7 +21,12 @@
  *
  * @author Apache Software Foundation
  * @version $Id: StringEncoder.java,v 1.9 2004/02/29 04:08:31 tobrien Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface StringEncoder extends Encoder {
     
     /**
diff --git a/src/org/apache/commons/codec/StringEncoderComparator.java b/src/org/apache/commons/codec/StringEncoderComparator.java
index 6d29af2..ad85a7e 100644
--- a/src/org/apache/commons/codec/StringEncoderComparator.java
+++ b/src/org/apache/commons/codec/StringEncoderComparator.java
@@ -29,7 +29,12 @@
  *
  * @author Apache Software Foundation
  * @version $Id: StringEncoderComparator.java,v 1.14 2004/06/21 23:24:17 ggregory Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class StringEncoderComparator implements Comparator {
 
     /**
diff --git a/src/org/apache/commons/codec/binary/Base64.java b/src/org/apache/commons/codec/binary/Base64.java
index ea479e9..3e1c5fb 100644
--- a/src/org/apache/commons/codec/binary/Base64.java
+++ b/src/org/apache/commons/codec/binary/Base64.java
@@ -32,7 +32,12 @@
  * @author Apache Software Foundation
  * @since 1.0-dev
  * @version $Id: Base64.java,v 1.20 2004/05/24 00:21:24 ggregory Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class Base64 implements BinaryEncoder, BinaryDecoder {
 
     /**
diff --git a/src/org/apache/commons/codec/binary/BinaryCodec.java b/src/org/apache/commons/codec/binary/BinaryCodec.java
index 98c6409..356fc16 100644
--- a/src/org/apache/commons/codec/binary/BinaryCodec.java
+++ b/src/org/apache/commons/codec/binary/BinaryCodec.java
@@ -31,7 +31,12 @@
  * @author Apache Software Foundation
  * @since 1.3
  * @version $Id $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BinaryCodec implements BinaryDecoder, BinaryEncoder {
     /*
      * tried to avoid using ArrayUtils to minimize dependencies while using these empty arrays - dep is just not worth
diff --git a/src/org/apache/commons/codec/binary/Hex.java b/src/org/apache/commons/codec/binary/Hex.java
index 78f5510..306f130 100644
--- a/src/org/apache/commons/codec/binary/Hex.java
+++ b/src/org/apache/commons/codec/binary/Hex.java
@@ -27,7 +27,12 @@
  * @since 1.1
  * @author Apache Software Foundation
  * @version $Id: Hex.java,v 1.13 2004/04/18 18:22:33 ggregory Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class Hex implements BinaryEncoder, BinaryDecoder {
 
     /** 
diff --git a/src/org/apache/commons/codec/language/DoubleMetaphone.java b/src/org/apache/commons/codec/language/DoubleMetaphone.java
index 1cad991..cc9f35c 100644
--- a/src/org/apache/commons/codec/language/DoubleMetaphone.java
+++ b/src/org/apache/commons/codec/language/DoubleMetaphone.java
@@ -32,7 +32,12 @@
  * 
  * @author Apache Software Foundation
  * @version $Id: DoubleMetaphone.java,v 1.24 2004/06/05 18:32:04 ggregory Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DoubleMetaphone implements StringEncoder {
 
     /**
diff --git a/src/org/apache/commons/codec/language/Metaphone.java b/src/org/apache/commons/codec/language/Metaphone.java
index dce2c72..846bcf5 100644
--- a/src/org/apache/commons/codec/language/Metaphone.java
+++ b/src/org/apache/commons/codec/language/Metaphone.java
@@ -32,7 +32,12 @@
  * 
  * @author Apache Software Foundation
  * @version $Id: Metaphone.java,v 1.20 2004/06/05 18:32:04 ggregory Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class Metaphone implements StringEncoder {
 
     /**
diff --git a/src/org/apache/commons/codec/language/RefinedSoundex.java b/src/org/apache/commons/codec/language/RefinedSoundex.java
index dbf60fe..273cba2 100644
--- a/src/org/apache/commons/codec/language/RefinedSoundex.java
+++ b/src/org/apache/commons/codec/language/RefinedSoundex.java
@@ -26,7 +26,12 @@
  * 
  * @author Apache Software Foundation
  * @version $Id: RefinedSoundex.java,v 1.21 2004/06/05 18:32:04 ggregory Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RefinedSoundex implements StringEncoder {
 
     /**
diff --git a/src/org/apache/commons/codec/language/Soundex.java b/src/org/apache/commons/codec/language/Soundex.java
index 61ce440..b80693f 100644
--- a/src/org/apache/commons/codec/language/Soundex.java
+++ b/src/org/apache/commons/codec/language/Soundex.java
@@ -25,7 +25,12 @@
  * 
  * @author Apache Software Foundation
  * @version $Id: Soundex.java,v 1.26 2004/07/07 23:15:24 ggregory Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class Soundex implements StringEncoder {
 
     /**
diff --git a/src/org/apache/commons/codec/language/SoundexUtils.java b/src/org/apache/commons/codec/language/SoundexUtils.java
index 48f2d87..4c35d43 100644
--- a/src/org/apache/commons/codec/language/SoundexUtils.java
+++ b/src/org/apache/commons/codec/language/SoundexUtils.java
@@ -25,7 +25,12 @@
  * @author Apache Software Foundation
  * @version $Id: SoundexUtils.java,v 1.5 2004/03/17 18:31:35 ggregory Exp $
  * @since 1.3
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 final class SoundexUtils {
 
     /**
diff --git a/src/org/apache/commons/codec/net/BCodec.java b/src/org/apache/commons/codec/net/BCodec.java
index b164100..8066007 100644
--- a/src/org/apache/commons/codec/net/BCodec.java
+++ b/src/org/apache/commons/codec/net/BCodec.java
@@ -41,7 +41,12 @@
  * @author Apache Software Foundation
  * @since 1.3
  * @version $Id: BCodec.java,v 1.5 2004/04/13 22:46:37 ggregory Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BCodec extends RFC1522Codec implements StringEncoder, StringDecoder {
     /**
      * The default charset used for string decoding and encoding.
diff --git a/src/org/apache/commons/codec/net/QCodec.java b/src/org/apache/commons/codec/net/QCodec.java
index 5736080..51b8bb5 100644
--- a/src/org/apache/commons/codec/net/QCodec.java
+++ b/src/org/apache/commons/codec/net/QCodec.java
@@ -43,7 +43,12 @@
  * @author Apache Software Foundation
  * @since 1.3
  * @version $Id: QCodec.java,v 1.6 2004/05/24 00:24:32 ggregory Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class QCodec extends RFC1522Codec implements StringEncoder, StringDecoder {
     /**
      * The default charset used for string decoding and encoding.
diff --git a/src/org/apache/commons/codec/net/QuotedPrintableCodec.java b/src/org/apache/commons/codec/net/QuotedPrintableCodec.java
index c2fcd27..2a6742d 100644
--- a/src/org/apache/commons/codec/net/QuotedPrintableCodec.java
+++ b/src/org/apache/commons/codec/net/QuotedPrintableCodec.java
@@ -55,7 +55,12 @@
  * @author Apache Software Foundation
  * @since 1.3
  * @version $Id: QuotedPrintableCodec.java,v 1.7 2004/04/09 22:21:07 ggregory Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class QuotedPrintableCodec implements BinaryEncoder, BinaryDecoder, StringEncoder, StringDecoder {
     /**
      * The default charset used for string decoding and encoding.
diff --git a/src/org/apache/commons/codec/net/RFC1522Codec.java b/src/org/apache/commons/codec/net/RFC1522Codec.java
index 0acf921..d61a278 100644
--- a/src/org/apache/commons/codec/net/RFC1522Codec.java
+++ b/src/org/apache/commons/codec/net/RFC1522Codec.java
@@ -41,7 +41,12 @@
  * @author Apache Software Foundation
  * @since 1.3
  * @version $Id: RFC1522Codec.java,v 1.2 2004/04/09 22:21:43 ggregory Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 abstract class RFC1522Codec {
     
     /**
diff --git a/src/org/apache/commons/codec/net/StringEncodings.java b/src/org/apache/commons/codec/net/StringEncodings.java
index e7f6bb8..ff2caa6 100644
--- a/src/org/apache/commons/codec/net/StringEncodings.java
+++ b/src/org/apache/commons/codec/net/StringEncodings.java
@@ -22,7 +22,12 @@
  * @author Apache Software Foundation
  * @since 1.3
  * @version $Id: StringEncodings.java,v 1.2 2004/04/09 22:21:07 ggregory Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 interface StringEncodings {
     /**
      * <p>
diff --git a/src/org/apache/commons/codec/net/URLCodec.java b/src/org/apache/commons/codec/net/URLCodec.java
index 1bc3507..cb43996 100644
--- a/src/org/apache/commons/codec/net/URLCodec.java
+++ b/src/org/apache/commons/codec/net/URLCodec.java
@@ -46,7 +46,12 @@
  * @author Apache Software Foundation
  * @since 1.2
  * @version $Id: URLCodec.java,v 1.19 2004/03/29 07:59:00 ggregory Exp $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class URLCodec implements BinaryEncoder, BinaryDecoder, StringEncoder, StringDecoder {
     
     /**
diff --git a/src/org/apache/commons/logging/Log.java b/src/org/apache/commons/logging/Log.java
index 9203f3f..2d27ef3 100644
--- a/src/org/apache/commons/logging/Log.java
+++ b/src/org/apache/commons/logging/Log.java
@@ -58,7 +58,12 @@
  * @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
  * @author Rod Waldhoff
  * @version $Id: Log.java 381838 2006-02-28 23:57:11Z skitching $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface Log {
 
 
diff --git a/src/org/apache/commons/logging/LogConfigurationException.java b/src/org/apache/commons/logging/LogConfigurationException.java
index b34387b..2308899 100644
--- a/src/org/apache/commons/logging/LogConfigurationException.java
+++ b/src/org/apache/commons/logging/LogConfigurationException.java
@@ -24,8 +24,13 @@
  *
  * @author Craig R. McClanahan
  * @version $Revision: 155426 $ $Date: 2005-02-26 13:10:49 +0000 (Sat, 26 Feb 2005) $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
 
+@Deprecated
 public class LogConfigurationException extends RuntimeException {
 
 
diff --git a/src/org/apache/commons/logging/LogFactory.java b/src/org/apache/commons/logging/LogFactory.java
index 107d0f7..10fb709 100644
--- a/src/org/apache/commons/logging/LogFactory.java
+++ b/src/org/apache/commons/logging/LogFactory.java
@@ -46,8 +46,13 @@
  * @author Costin Manolache
  * @author Richard A. Sitze
  * @version $Revision: 399431 $ $Date: 2006-05-03 21:58:34 +0100 (Wed, 03 May 2006) $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
 
+@Deprecated
 public abstract class LogFactory {
 
 
diff --git a/src/org/apache/commons/logging/LogSource.java b/src/org/apache/commons/logging/LogSource.java
index e3c0603..5a09fb8 100644
--- a/src/org/apache/commons/logging/LogSource.java
+++ b/src/org/apache/commons/logging/LogSource.java
@@ -53,7 +53,12 @@
  *
  * @author Rod Waldhoff
  * @version $Id: LogSource.java 155426 2005-02-26 13:10:49Z dirkv $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class LogSource {
 
     // ------------------------------------------------------- Class Attributes
diff --git a/src/org/apache/commons/logging/impl/Jdk14Logger.java b/src/org/apache/commons/logging/impl/Jdk14Logger.java
index d4f840c..79f0399 100644
--- a/src/org/apache/commons/logging/impl/Jdk14Logger.java
+++ b/src/org/apache/commons/logging/impl/Jdk14Logger.java
@@ -34,8 +34,13 @@
  * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
  * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
  * @version $Revision: 370652 $ $Date: 2006-01-19 22:23:48 +0000 (Thu, 19 Jan 2006) $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
 
+@Deprecated
 public class Jdk14Logger implements Log, Serializable {
 
     /**
diff --git a/src/org/apache/commons/logging/impl/LogFactoryImpl.java b/src/org/apache/commons/logging/impl/LogFactoryImpl.java
index 8937b2f..95ec5d8 100644
--- a/src/org/apache/commons/logging/impl/LogFactoryImpl.java
+++ b/src/org/apache/commons/logging/impl/LogFactoryImpl.java
@@ -63,8 +63,13 @@
  * @author Richard A. Sitze
  * @author Brian Stansberry
  * @version $Revision: 399224 $ $Date: 2006-05-03 10:25:54 +0100 (Wed, 03 May 2006) $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
 
+@Deprecated
 public class LogFactoryImpl extends LogFactory {
 
 
diff --git a/src/org/apache/commons/logging/impl/NoOpLog.java b/src/org/apache/commons/logging/impl/NoOpLog.java
index b698813..a53bf37 100644
--- a/src/org/apache/commons/logging/impl/NoOpLog.java
+++ b/src/org/apache/commons/logging/impl/NoOpLog.java
@@ -29,7 +29,12 @@
  * @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
  * @author Rod Waldhoff
  * @version $Id: NoOpLog.java 155426 2005-02-26 13:10:49Z dirkv $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class NoOpLog implements Log, Serializable {
 
     /** Convenience constructor */
diff --git a/src/org/apache/commons/logging/impl/SimpleLog.java b/src/org/apache/commons/logging/impl/SimpleLog.java
index 6b643d3..8a81042 100644
--- a/src/org/apache/commons/logging/impl/SimpleLog.java
+++ b/src/org/apache/commons/logging/impl/SimpleLog.java
@@ -71,7 +71,12 @@
  * @author Robert Burrell Donkin
  *
  * @version $Id: SimpleLog.java 399221 2006-05-03 09:20:24Z dennisl $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class SimpleLog implements Log, Serializable {
 
 
diff --git a/src/org/apache/commons/logging/impl/WeakHashtable.java b/src/org/apache/commons/logging/impl/WeakHashtable.java
index e4749b6..a9f283f 100644
--- a/src/org/apache/commons/logging/impl/WeakHashtable.java
+++ b/src/org/apache/commons/logging/impl/WeakHashtable.java
@@ -106,7 +106,12 @@
  * @author Brian Stansberry
  * 
  * @since 1.1
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class WeakHashtable extends Hashtable {
 
     /** 
diff --git a/src/org/apache/http/ConnectionClosedException.java b/src/org/apache/http/ConnectionClosedException.java
index fa0e2db..4879d78 100644
--- a/src/org/apache/http/ConnectionClosedException.java
+++ b/src/org/apache/http/ConnectionClosedException.java
@@ -41,7 +41,12 @@
  * @version $Revision: 618017 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ConnectionClosedException extends IOException {
 
     private static final long serialVersionUID = 617550366255636674L;
diff --git a/src/org/apache/http/ConnectionReuseStrategy.java b/src/org/apache/http/ConnectionReuseStrategy.java
index 635cc5c..d5b2e27 100644
--- a/src/org/apache/http/ConnectionReuseStrategy.java
+++ b/src/org/apache/http/ConnectionReuseStrategy.java
@@ -43,7 +43,12 @@
  * @version $Revision: 496070 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ConnectionReuseStrategy {
 
     /**
diff --git a/src/org/apache/http/FormattedHeader.java b/src/org/apache/http/FormattedHeader.java
index 04ea279..351034b 100644
--- a/src/org/apache/http/FormattedHeader.java
+++ b/src/org/apache/http/FormattedHeader.java
@@ -41,7 +41,12 @@
  *
  *
  * @version $Revision: 569781 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface FormattedHeader extends Header {
 
 
diff --git a/src/org/apache/http/Header.java b/src/org/apache/http/Header.java
index 4e04bec..8b8f71d 100644
--- a/src/org/apache/http/Header.java
+++ b/src/org/apache/http/Header.java
@@ -52,7 +52,12 @@
  * @author <a href="mailto:remm@apache.org">Remy Maucherat</a>
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * @version $Revision: 569636 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface Header {
 
     String getName();
diff --git a/src/org/apache/http/HeaderElement.java b/src/org/apache/http/HeaderElement.java
index ddc4a9e..fac7795 100644
--- a/src/org/apache/http/HeaderElement.java
+++ b/src/org/apache/http/HeaderElement.java
@@ -41,7 +41,12 @@
  * @version $Revision: 569828 $ $Date: 2007-08-26 08:49:38 -0700 (Sun, 26 Aug 2007) $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HeaderElement {
 
     String getName();
diff --git a/src/org/apache/http/HeaderElementIterator.java b/src/org/apache/http/HeaderElementIterator.java
index 14137f0..13a40eb 100644
--- a/src/org/apache/http/HeaderElementIterator.java
+++ b/src/org/apache/http/HeaderElementIterator.java
@@ -37,7 +37,12 @@
  * A type-safe iterator for {@link HeaderElement HeaderElement} objects.
  * 
  * @version $Revision: 584542 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HeaderElementIterator extends Iterator {
     
     /**
diff --git a/src/org/apache/http/HeaderIterator.java b/src/org/apache/http/HeaderIterator.java
index 688b611..7ec4be3 100644
--- a/src/org/apache/http/HeaderIterator.java
+++ b/src/org/apache/http/HeaderIterator.java
@@ -39,7 +39,12 @@
  * A type-safe iterator for {@link Header Header} objects.
  * 
  * @version $Revision: 581981 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HeaderIterator extends Iterator {
 
     /**
diff --git a/src/org/apache/http/HttpClientConnection.java b/src/org/apache/http/HttpClientConnection.java
index a38c8f3..3edf535 100644
--- a/src/org/apache/http/HttpClientConnection.java
+++ b/src/org/apache/http/HttpClientConnection.java
@@ -44,7 +44,12 @@
  * @version $Revision: 542199 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpClientConnection extends HttpConnection {
 
     /**
diff --git a/src/org/apache/http/HttpConnection.java b/src/org/apache/http/HttpConnection.java
index a3311f8..f0fdde0 100644
--- a/src/org/apache/http/HttpConnection.java
+++ b/src/org/apache/http/HttpConnection.java
@@ -41,7 +41,12 @@
  * @version $Revision: 548031 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpConnection {
 
     /**
diff --git a/src/org/apache/http/HttpConnectionMetrics.java b/src/org/apache/http/HttpConnectionMetrics.java
index 289dd46..fbb49e2 100644
--- a/src/org/apache/http/HttpConnectionMetrics.java
+++ b/src/org/apache/http/HttpConnectionMetrics.java
@@ -33,7 +33,12 @@
 
 /**
  * The point of access to the statistics of an {@link HttpConnection}.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpConnectionMetrics {
 
     /**
diff --git a/src/org/apache/http/HttpEntity.java b/src/org/apache/http/HttpEntity.java
index 51ddafc..8546285 100644
--- a/src/org/apache/http/HttpEntity.java
+++ b/src/org/apache/http/HttpEntity.java
@@ -69,7 +69,12 @@
  * @version $Revision: 645824 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpEntity {
 
     /**
diff --git a/src/org/apache/http/HttpEntityEnclosingRequest.java b/src/org/apache/http/HttpEntityEnclosingRequest.java
index c47c32b..01737fd 100644
--- a/src/org/apache/http/HttpEntityEnclosingRequest.java
+++ b/src/org/apache/http/HttpEntityEnclosingRequest.java
@@ -39,7 +39,12 @@
  * @version $Revision: 618017 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpEntityEnclosingRequest extends HttpRequest {
 
     /**
diff --git a/src/org/apache/http/HttpException.java b/src/org/apache/http/HttpException.java
index 77aacb1..ec23e3d 100644
--- a/src/org/apache/http/HttpException.java
+++ b/src/org/apache/http/HttpException.java
@@ -39,7 +39,12 @@
  * @author Laura Werner
  * 
  * @version $Revision: 618017 $ $Date: 2008-02-03 08:42:22 -0800 (Sun, 03 Feb 2008) $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpException extends Exception {
 
     private static final long serialVersionUID = -5437299376222011036L;
diff --git a/src/org/apache/http/HttpHost.java b/src/org/apache/http/HttpHost.java
index 869f5af..445fced 100644
--- a/src/org/apache/http/HttpHost.java
+++ b/src/org/apache/http/HttpHost.java
@@ -46,7 +46,12 @@
  * @author Laura Werner
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class HttpHost implements Cloneable {
 
     /** The default scheme is "http". */
diff --git a/src/org/apache/http/HttpInetConnection.java b/src/org/apache/http/HttpInetConnection.java
index 32ac04a..832a907 100644
--- a/src/org/apache/http/HttpInetConnection.java
+++ b/src/org/apache/http/HttpInetConnection.java
@@ -41,7 +41,12 @@
  * @version $Revision: 613298 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpInetConnection extends HttpConnection {
 
     InetAddress getLocalAddress();
diff --git a/src/org/apache/http/HttpMessage.java b/src/org/apache/http/HttpMessage.java
index d24f0b4..3b865c7 100644
--- a/src/org/apache/http/HttpMessage.java
+++ b/src/org/apache/http/HttpMessage.java
@@ -42,7 +42,12 @@
  * @version $Revision: 610823 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpMessage {
     
     /**
diff --git a/src/org/apache/http/HttpRequest.java b/src/org/apache/http/HttpRequest.java
index 8558a97..70512cf 100644
--- a/src/org/apache/http/HttpRequest.java
+++ b/src/org/apache/http/HttpRequest.java
@@ -39,7 +39,12 @@
  * @version $Revision: 528428 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpRequest extends HttpMessage {
 
     /**
diff --git a/src/org/apache/http/HttpRequestFactory.java b/src/org/apache/http/HttpRequestFactory.java
index d385127..8b6bcad 100644
--- a/src/org/apache/http/HttpRequestFactory.java
+++ b/src/org/apache/http/HttpRequestFactory.java
@@ -39,7 +39,12 @@
  * @version $Revision: 618017 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpRequestFactory {
     
     HttpRequest newHttpRequest(RequestLine requestline) 
diff --git a/src/org/apache/http/HttpRequestInterceptor.java b/src/org/apache/http/HttpRequestInterceptor.java
index db2194f..567f9ba 100644
--- a/src/org/apache/http/HttpRequestInterceptor.java
+++ b/src/org/apache/http/HttpRequestInterceptor.java
@@ -48,7 +48,12 @@
  * @version $Revision: 618367 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpRequestInterceptor {
 
     /**
diff --git a/src/org/apache/http/HttpResponse.java b/src/org/apache/http/HttpResponse.java
index f232f86..84a994f 100644
--- a/src/org/apache/http/HttpResponse.java
+++ b/src/org/apache/http/HttpResponse.java
@@ -43,7 +43,12 @@
  * @version $Revision: 652956 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpResponse extends HttpMessage {
 
     /**
diff --git a/src/org/apache/http/HttpResponseFactory.java b/src/org/apache/http/HttpResponseFactory.java
index 3ed06ff..d99c340 100644
--- a/src/org/apache/http/HttpResponseFactory.java
+++ b/src/org/apache/http/HttpResponseFactory.java
@@ -42,7 +42,12 @@
  * @version $Revision: 573864 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpResponseFactory {
 
     /**
diff --git a/src/org/apache/http/HttpResponseInterceptor.java b/src/org/apache/http/HttpResponseInterceptor.java
index cae1526..93559ef 100644
--- a/src/org/apache/http/HttpResponseInterceptor.java
+++ b/src/org/apache/http/HttpResponseInterceptor.java
@@ -47,7 +47,12 @@
  * @version $Revision: 618367 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpResponseInterceptor {
 
     /**
diff --git a/src/org/apache/http/HttpServerConnection.java b/src/org/apache/http/HttpServerConnection.java
index 8cea544..9c71949 100644
--- a/src/org/apache/http/HttpServerConnection.java
+++ b/src/org/apache/http/HttpServerConnection.java
@@ -42,7 +42,12 @@
  * @version $Revision: 542199 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpServerConnection extends HttpConnection {
 
     /**
diff --git a/src/org/apache/http/HttpStatus.java b/src/org/apache/http/HttpStatus.java
index f8f7f5d..a300f0b 100644
--- a/src/org/apache/http/HttpStatus.java
+++ b/src/org/apache/http/HttpStatus.java
@@ -42,7 +42,12 @@
  * @author <a href="mailto:jsdever@apache.org">Jeff Dever</a>
  * 
  * @version $Revision: 503381 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpStatus {
 
     // --- 1xx Informational ---
diff --git a/src/org/apache/http/HttpVersion.java b/src/org/apache/http/HttpVersion.java
index 243f199..a0f1fa5 100644
--- a/src/org/apache/http/HttpVersion.java
+++ b/src/org/apache/http/HttpVersion.java
@@ -39,7 +39,12 @@
  * @author <a href="mailto:oleg@ural.ru">Oleg Kalnichevski</a>
  * 
  * @version $Revision: 609106 $ $Date: 2008-01-05 01:15:42 -0800 (Sat, 05 Jan 2008) $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class HttpVersion extends ProtocolVersion
     implements Serializable {
 
diff --git a/src/org/apache/http/MalformedChunkCodingException.java b/src/org/apache/http/MalformedChunkCodingException.java
index 2267a2e..a7648e3 100644
--- a/src/org/apache/http/MalformedChunkCodingException.java
+++ b/src/org/apache/http/MalformedChunkCodingException.java
@@ -35,7 +35,12 @@
 
 /**
  * Signals a malformed chunked stream.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class MalformedChunkCodingException extends IOException {
 
     private static final long serialVersionUID = 2158560246948994524L;
diff --git a/src/org/apache/http/MethodNotSupportedException.java b/src/org/apache/http/MethodNotSupportedException.java
index 3ccf72d..f7156a1 100644
--- a/src/org/apache/http/MethodNotSupportedException.java
+++ b/src/org/apache/http/MethodNotSupportedException.java
@@ -40,7 +40,12 @@
  * @version $Revision: 618017 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class MethodNotSupportedException extends HttpException {
 
     private static final long serialVersionUID = 3365359036840171201L;
diff --git a/src/org/apache/http/NameValuePair.java b/src/org/apache/http/NameValuePair.java
index 1ab861a..d809526 100644
--- a/src/org/apache/http/NameValuePair.java
+++ b/src/org/apache/http/NameValuePair.java
@@ -98,7 +98,12 @@
  * 
  * @author <a href="mailto:oleg at ural.com">Oleg Kalnichevski</a>
  * 
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface NameValuePair {
 
     String getName();
diff --git a/src/org/apache/http/NoHttpResponseException.java b/src/org/apache/http/NoHttpResponseException.java
index a02ef5a..950588a 100644
--- a/src/org/apache/http/NoHttpResponseException.java
+++ b/src/org/apache/http/NoHttpResponseException.java
@@ -41,7 +41,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @version $Revision: 618017 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class NoHttpResponseException extends IOException {
 
     private static final long serialVersionUID = -7658940387386078766L;
diff --git a/src/org/apache/http/ParseException.java b/src/org/apache/http/ParseException.java
index 97083b2..0997004 100644
--- a/src/org/apache/http/ParseException.java
+++ b/src/org/apache/http/ParseException.java
@@ -41,7 +41,12 @@
  * known to be parseable.
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ParseException extends RuntimeException {
 
     private static final long serialVersionUID = -7288819855864183578L;
diff --git a/src/org/apache/http/ProtocolException.java b/src/org/apache/http/ProtocolException.java
index b4c34ee..1398143 100644
--- a/src/org/apache/http/ProtocolException.java
+++ b/src/org/apache/http/ProtocolException.java
@@ -38,7 +38,12 @@
  * @author <a href="mailto:laura@lwerner.org">Laura Werner</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ProtocolException extends HttpException {
 
     private static final long serialVersionUID = -2143571074341228994L;
diff --git a/src/org/apache/http/ProtocolVersion.java b/src/org/apache/http/ProtocolVersion.java
index ced76a5..7bf9a0f 100644
--- a/src/org/apache/http/ProtocolVersion.java
+++ b/src/org/apache/http/ProtocolVersion.java
@@ -52,7 +52,12 @@
  * @author <a href="mailto:rolandw at apache.org">Roland Weber</a>
  * 
  * @version $Revision: 609106 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ProtocolVersion implements Serializable, Cloneable {
 
     private static final long serialVersionUID = 8950662842175091068L;
diff --git a/src/org/apache/http/ReasonPhraseCatalog.java b/src/org/apache/http/ReasonPhraseCatalog.java
index 12ad6d9..75e9410 100644
--- a/src/org/apache/http/ReasonPhraseCatalog.java
+++ b/src/org/apache/http/ReasonPhraseCatalog.java
@@ -44,7 +44,12 @@
  * @version $Revision: 505744 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ReasonPhraseCatalog {
 
     /**
diff --git a/src/org/apache/http/RequestLine.java b/src/org/apache/http/RequestLine.java
index e865929..638c4da 100644
--- a/src/org/apache/http/RequestLine.java
+++ b/src/org/apache/http/RequestLine.java
@@ -41,7 +41,12 @@
  * @version $Revision: 573864 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface RequestLine {
 
     String getMethod();
diff --git a/src/org/apache/http/StatusLine.java b/src/org/apache/http/StatusLine.java
index aa8a3bc..b74cd9e 100644
--- a/src/org/apache/http/StatusLine.java
+++ b/src/org/apache/http/StatusLine.java
@@ -43,7 +43,12 @@
  * @version $Id: StatusLine.java 573864 2007-09-08 15:53:25Z rolandw $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface StatusLine {
 
     ProtocolVersion getProtocolVersion();
diff --git a/src/org/apache/http/TokenIterator.java b/src/org/apache/http/TokenIterator.java
index bfe3473..cbc6ba4 100644
--- a/src/org/apache/http/TokenIterator.java
+++ b/src/org/apache/http/TokenIterator.java
@@ -42,7 +42,12 @@
  * are plain strings rather than full header elements.
  * 
  * @version $Revision: 601000 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface TokenIterator extends Iterator {
 
     /**
diff --git a/src/org/apache/http/UnsupportedHttpVersionException.java b/src/org/apache/http/UnsupportedHttpVersionException.java
index 716d7a5..0632394 100644
--- a/src/org/apache/http/UnsupportedHttpVersionException.java
+++ b/src/org/apache/http/UnsupportedHttpVersionException.java
@@ -39,7 +39,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @version $Revision:379772 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class UnsupportedHttpVersionException extends ProtocolException {
 
     private static final long serialVersionUID = -1348448090193107031L;
diff --git a/src/org/apache/http/auth/AUTH.java b/src/org/apache/http/auth/AUTH.java
index 8ab6dc2..d578d96 100644
--- a/src/org/apache/http/auth/AUTH.java
+++ b/src/org/apache/http/auth/AUTH.java
@@ -37,7 +37,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class AUTH {
 
     /**
diff --git a/src/org/apache/http/auth/AuthScheme.java b/src/org/apache/http/auth/AuthScheme.java
index bdaebdb..009c44f 100644
--- a/src/org/apache/http/auth/AuthScheme.java
+++ b/src/org/apache/http/auth/AuthScheme.java
@@ -66,8 +66,13 @@
  * @author <a href="mailto:adrian@ephox.com">Adrian Sutton</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
 
+@Deprecated
 public interface AuthScheme {
 
     /**
diff --git a/src/org/apache/http/auth/AuthSchemeFactory.java b/src/org/apache/http/auth/AuthSchemeFactory.java
index 8f985b0..d27e156 100644
--- a/src/org/apache/http/auth/AuthSchemeFactory.java
+++ b/src/org/apache/http/auth/AuthSchemeFactory.java
@@ -38,7 +38,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface AuthSchemeFactory {    
 
     AuthScheme newInstance(HttpParams params);
diff --git a/src/org/apache/http/auth/AuthSchemeRegistry.java b/src/org/apache/http/auth/AuthSchemeRegistry.java
index 62a5d4d..1b181cd 100644
--- a/src/org/apache/http/auth/AuthSchemeRegistry.java
+++ b/src/org/apache/http/auth/AuthSchemeRegistry.java
@@ -47,7 +47,12 @@
  *
  * @version $Revision: 652950 $
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class AuthSchemeRegistry {
 
     private final Map<String,AuthSchemeFactory> registeredSchemes;
diff --git a/src/org/apache/http/auth/AuthScope.java b/src/org/apache/http/auth/AuthScope.java
index c9d7f56..77f6851 100644
--- a/src/org/apache/http/auth/AuthScope.java
+++ b/src/org/apache/http/auth/AuthScope.java
@@ -43,7 +43,12 @@
  * @author <a href="mailto:adrian@intencha.com">Adrian Sutton</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class AuthScope {
     
     /** 
diff --git a/src/org/apache/http/auth/AuthState.java b/src/org/apache/http/auth/AuthState.java
index f55bf86..587c9ee 100644
--- a/src/org/apache/http/auth/AuthState.java
+++ b/src/org/apache/http/auth/AuthState.java
@@ -38,7 +38,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class AuthState {
 
     /** Actual authentication scheme */
diff --git a/src/org/apache/http/auth/AuthenticationException.java b/src/org/apache/http/auth/AuthenticationException.java
index 8b307be..7c8514b 100644
--- a/src/org/apache/http/auth/AuthenticationException.java
+++ b/src/org/apache/http/auth/AuthenticationException.java
@@ -38,7 +38,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class AuthenticationException extends ProtocolException {
 
     private static final long serialVersionUID = -6794031905674764776L;
diff --git a/src/org/apache/http/auth/BasicUserPrincipal.java b/src/org/apache/http/auth/BasicUserPrincipal.java
index 2485011..56f4712 100644
--- a/src/org/apache/http/auth/BasicUserPrincipal.java
+++ b/src/org/apache/http/auth/BasicUserPrincipal.java
@@ -40,7 +40,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class BasicUserPrincipal implements Principal {
 
     private final String username;
diff --git a/src/org/apache/http/auth/Credentials.java b/src/org/apache/http/auth/Credentials.java
index 846a23b..ef9d85b 100644
--- a/src/org/apache/http/auth/Credentials.java
+++ b/src/org/apache/http/auth/Credentials.java
@@ -39,7 +39,12 @@
  * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
  * 
  * @version $Revision: 658430 $ $Date: 2008-05-20 14:04:27 -0700 (Tue, 20 May 2008) $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface Credentials {
 
     Principal getUserPrincipal();
diff --git a/src/org/apache/http/auth/InvalidCredentialsException.java b/src/org/apache/http/auth/InvalidCredentialsException.java
index 50155ec..9934f9d 100644
--- a/src/org/apache/http/auth/InvalidCredentialsException.java
+++ b/src/org/apache/http/auth/InvalidCredentialsException.java
@@ -37,7 +37,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class InvalidCredentialsException extends AuthenticationException {
 
     private static final long serialVersionUID = -4834003835215460648L;
diff --git a/src/org/apache/http/auth/MalformedChallengeException.java b/src/org/apache/http/auth/MalformedChallengeException.java
index 8c7e373..96c2f5b 100644
--- a/src/org/apache/http/auth/MalformedChallengeException.java
+++ b/src/org/apache/http/auth/MalformedChallengeException.java
@@ -39,7 +39,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class MalformedChallengeException extends ProtocolException {
 
     private static final long serialVersionUID = 814586927989932284L;
diff --git a/src/org/apache/http/auth/NTCredentials.java b/src/org/apache/http/auth/NTCredentials.java
index 6800c42..e4c8902 100644
--- a/src/org/apache/http/auth/NTCredentials.java
+++ b/src/org/apache/http/auth/NTCredentials.java
@@ -42,7 +42,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 2.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class NTCredentials implements Credentials {
 
     /** The user principal  */
diff --git a/src/org/apache/http/auth/NTUserPrincipal.java b/src/org/apache/http/auth/NTUserPrincipal.java
index ac91bb8..c3b0d7a 100644
--- a/src/org/apache/http/auth/NTUserPrincipal.java
+++ b/src/org/apache/http/auth/NTUserPrincipal.java
@@ -40,7 +40,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class NTUserPrincipal implements Principal {
 
     private final String username;
diff --git a/src/org/apache/http/auth/UsernamePasswordCredentials.java b/src/org/apache/http/auth/UsernamePasswordCredentials.java
index f82608c..189fd77 100644
--- a/src/org/apache/http/auth/UsernamePasswordCredentials.java
+++ b/src/org/apache/http/auth/UsernamePasswordCredentials.java
@@ -44,7 +44,12 @@
  * 
  * @version $Revision: 658430 $ $Date: 2008-05-20 14:04:27 -0700 (Tue, 20 May 2008) $
  * 
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class UsernamePasswordCredentials implements Credentials {
 
     private final BasicUserPrincipal principal;
diff --git a/src/org/apache/http/auth/params/AuthPNames.java b/src/org/apache/http/auth/params/AuthPNames.java
index a053435..5d9730a 100644
--- a/src/org/apache/http/auth/params/AuthPNames.java
+++ b/src/org/apache/http/auth/params/AuthPNames.java
@@ -37,7 +37,12 @@
  * @version $Revision: 578403 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface AuthPNames {
 
     /**
diff --git a/src/org/apache/http/auth/params/AuthParamBean.java b/src/org/apache/http/auth/params/AuthParamBean.java
index 5b27328..5be768d 100644
--- a/src/org/apache/http/auth/params/AuthParamBean.java
+++ b/src/org/apache/http/auth/params/AuthParamBean.java
@@ -33,7 +33,13 @@
 
 import org.apache.http.params.HttpAbstractParamBean;
 import org.apache.http.params.HttpParams;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class AuthParamBean extends HttpAbstractParamBean {
 
     public AuthParamBean (final HttpParams params) {
diff --git a/src/org/apache/http/auth/params/AuthParams.java b/src/org/apache/http/auth/params/AuthParams.java
index a724a8c..8bf9702 100644
--- a/src/org/apache/http/auth/params/AuthParams.java
+++ b/src/org/apache/http/auth/params/AuthParams.java
@@ -45,7 +45,12 @@
  * @since 4.0
  *
  * @see AuthPNames
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class AuthParams {
 
     private AuthParams() {
diff --git a/src/org/apache/http/client/AuthenticationHandler.java b/src/org/apache/http/client/AuthenticationHandler.java
index dacc1b8..b84d5eb 100644
--- a/src/org/apache/http/client/AuthenticationHandler.java
+++ b/src/org/apache/http/client/AuthenticationHandler.java
@@ -42,7 +42,12 @@
 
 /**
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface AuthenticationHandler {
 
     boolean isAuthenticationRequested(
diff --git a/src/org/apache/http/client/CircularRedirectException.java b/src/org/apache/http/client/CircularRedirectException.java
index 08dca63..c1074c5 100644
--- a/src/org/apache/http/client/CircularRedirectException.java
+++ b/src/org/apache/http/client/CircularRedirectException.java
@@ -36,7 +36,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class CircularRedirectException extends RedirectException {
 
     private static final long serialVersionUID = 6830063487001091803L;
diff --git a/src/org/apache/http/client/ClientProtocolException.java b/src/org/apache/http/client/ClientProtocolException.java
index b5a991a..fe00e07 100644
--- a/src/org/apache/http/client/ClientProtocolException.java
+++ b/src/org/apache/http/client/ClientProtocolException.java
@@ -34,7 +34,12 @@
 
 /**
  * Signals an error in the HTTP protocol.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ClientProtocolException extends IOException {
     
     private static final long serialVersionUID = -5596590843227115865L;
diff --git a/src/org/apache/http/client/CookieStore.java b/src/org/apache/http/client/CookieStore.java
index bc239ac..4781c73 100644
--- a/src/org/apache/http/client/CookieStore.java
+++ b/src/org/apache/http/client/CookieStore.java
@@ -41,7 +41,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface CookieStore {
 
     /**
diff --git a/src/org/apache/http/client/CredentialsProvider.java b/src/org/apache/http/client/CredentialsProvider.java
index 8396d84..bf4665b 100644
--- a/src/org/apache/http/client/CredentialsProvider.java
+++ b/src/org/apache/http/client/CredentialsProvider.java
@@ -39,7 +39,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface CredentialsProvider {
 
     /** 
diff --git a/src/org/apache/http/client/HttpClient.java b/src/org/apache/http/client/HttpClient.java
index aaa09e0..3713eb9 100644
--- a/src/org/apache/http/client/HttpClient.java
+++ b/src/org/apache/http/client/HttpClient.java
@@ -56,7 +56,12 @@
  * @version   $Revision: 676020 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpClient {
 
 
diff --git a/src/org/apache/http/client/HttpRequestRetryHandler.java b/src/org/apache/http/client/HttpRequestRetryHandler.java
index 9ef8ef9..fbfb97b 100644
--- a/src/org/apache/http/client/HttpRequestRetryHandler.java
+++ b/src/org/apache/http/client/HttpRequestRetryHandler.java
@@ -46,7 +46,12 @@
  * 
  * @author Michael Becke
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpRequestRetryHandler {
 
     /**
diff --git a/src/org/apache/http/client/HttpResponseException.java b/src/org/apache/http/client/HttpResponseException.java
index 4d8de91..5639703 100644
--- a/src/org/apache/http/client/HttpResponseException.java
+++ b/src/org/apache/http/client/HttpResponseException.java
@@ -32,7 +32,12 @@
 
 /**
  * Signals a non 2xx HTTP response.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpResponseException extends ClientProtocolException {
     
     private static final long serialVersionUID = -7186627969477257933L;
diff --git a/src/org/apache/http/client/NonRepeatableRequestException.java b/src/org/apache/http/client/NonRepeatableRequestException.java
index 13ff4d1..5552811 100644
--- a/src/org/apache/http/client/NonRepeatableRequestException.java
+++ b/src/org/apache/http/client/NonRepeatableRequestException.java
@@ -39,7 +39,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class NonRepeatableRequestException extends ProtocolException {
 
     private static final long serialVersionUID = 82685265288806048L;
diff --git a/src/org/apache/http/client/RedirectException.java b/src/org/apache/http/client/RedirectException.java
index 82ea9ea..d6c4352 100644
--- a/src/org/apache/http/client/RedirectException.java
+++ b/src/org/apache/http/client/RedirectException.java
@@ -38,7 +38,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RedirectException extends ProtocolException {
 
     private static final long serialVersionUID = 4418824536372559326L;
diff --git a/src/org/apache/http/client/RedirectHandler.java b/src/org/apache/http/client/RedirectHandler.java
index a98b4ae..38bc2dc 100644
--- a/src/org/apache/http/client/RedirectHandler.java
+++ b/src/org/apache/http/client/RedirectHandler.java
@@ -48,7 +48,12 @@
  * </p>
  * 
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface RedirectHandler {
 
     /**
diff --git a/src/org/apache/http/client/RequestDirector.java b/src/org/apache/http/client/RequestDirector.java
index 924c312..402969b 100644
--- a/src/org/apache/http/client/RequestDirector.java
+++ b/src/org/apache/http/client/RequestDirector.java
@@ -59,7 +59,12 @@
  * @version $Revision: 676020 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface RequestDirector {
 
 
diff --git a/src/org/apache/http/client/ResponseHandler.java b/src/org/apache/http/client/ResponseHandler.java
index 33a3391..23ebcf8 100644
--- a/src/org/apache/http/client/ResponseHandler.java
+++ b/src/org/apache/http/client/ResponseHandler.java
@@ -41,7 +41,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ResponseHandler<T> {
 
     /**
diff --git a/src/org/apache/http/client/UserTokenHandler.java b/src/org/apache/http/client/UserTokenHandler.java
index f8e55d8..4f9e5cf 100644
--- a/src/org/apache/http/client/UserTokenHandler.java
+++ b/src/org/apache/http/client/UserTokenHandler.java
@@ -46,7 +46,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface UserTokenHandler {
 
     /**
diff --git a/src/org/apache/http/client/entity/UrlEncodedFormEntity.java b/src/org/apache/http/client/entity/UrlEncodedFormEntity.java
index 89b9c45..1a97e84 100644
--- a/src/org/apache/http/client/entity/UrlEncodedFormEntity.java
+++ b/src/org/apache/http/client/entity/UrlEncodedFormEntity.java
@@ -40,7 +40,12 @@
 /**
  * An entity composed of a list of url-encoded pairs.
  * This is typically useful while sending an HTTP POST request.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class UrlEncodedFormEntity extends StringEntity {
   
     /**
diff --git a/src/org/apache/http/client/methods/AbortableHttpRequest.java b/src/org/apache/http/client/methods/AbortableHttpRequest.java
index c402609..cf213d3 100644
--- a/src/org/apache/http/client/methods/AbortableHttpRequest.java
+++ b/src/org/apache/http/client/methods/AbortableHttpRequest.java
@@ -50,7 +50,12 @@
  * @version   $Revision: 639600 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface AbortableHttpRequest {
 
     /**
diff --git a/src/org/apache/http/client/methods/HttpDelete.java b/src/org/apache/http/client/methods/HttpDelete.java
index 4a0fb77..4661b49 100644
--- a/src/org/apache/http/client/methods/HttpDelete.java
+++ b/src/org/apache/http/client/methods/HttpDelete.java
@@ -45,7 +45,12 @@
  * status code returned from the origin server indicates that the action
  * has been completed successfully.
  * </blockquote>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpDelete extends HttpRequestBase {
 
     public final static String METHOD_NAME = "DELETE";
diff --git a/src/org/apache/http/client/methods/HttpEntityEnclosingRequestBase.java b/src/org/apache/http/client/methods/HttpEntityEnclosingRequestBase.java
index 8ac6f01..466c3cc 100644
--- a/src/org/apache/http/client/methods/HttpEntityEnclosingRequestBase.java
+++ b/src/org/apache/http/client/methods/HttpEntityEnclosingRequestBase.java
@@ -45,7 +45,12 @@
  * @version $Revision: 674186 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class HttpEntityEnclosingRequestBase 
     extends HttpRequestBase implements HttpEntityEnclosingRequest {
     
diff --git a/src/org/apache/http/client/methods/HttpGet.java b/src/org/apache/http/client/methods/HttpGet.java
index 2908f1d..73e9580 100644
--- a/src/org/apache/http/client/methods/HttpGet.java
+++ b/src/org/apache/http/client/methods/HttpGet.java
@@ -53,7 +53,12 @@
  * @version $Revision: 664505 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpGet extends HttpRequestBase {
 
     public final static String METHOD_NAME = "GET";
diff --git a/src/org/apache/http/client/methods/HttpHead.java b/src/org/apache/http/client/methods/HttpHead.java
index 29e58a3..0feb05d 100644
--- a/src/org/apache/http/client/methods/HttpHead.java
+++ b/src/org/apache/http/client/methods/HttpHead.java
@@ -53,7 +53,12 @@
  * @version $Revision: 664505 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpHead extends HttpRequestBase {
 
     public final static String METHOD_NAME = "HEAD";
diff --git a/src/org/apache/http/client/methods/HttpOptions.java b/src/org/apache/http/client/methods/HttpOptions.java
index 3758360..53f054b 100644
--- a/src/org/apache/http/client/methods/HttpOptions.java
+++ b/src/org/apache/http/client/methods/HttpOptions.java
@@ -58,7 +58,12 @@
  * @version $Revision: 664505 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpOptions extends HttpRequestBase {
 
     public final static String METHOD_NAME = "OPTIONS";
diff --git a/src/org/apache/http/client/methods/HttpPost.java b/src/org/apache/http/client/methods/HttpPost.java
index bc58803..0adacab 100644
--- a/src/org/apache/http/client/methods/HttpPost.java
+++ b/src/org/apache/http/client/methods/HttpPost.java
@@ -57,7 +57,12 @@
  * @version $Revision: 664505 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpPost extends HttpEntityEnclosingRequestBase {
 
     public final static String METHOD_NAME = "POST";
diff --git a/src/org/apache/http/client/methods/HttpPut.java b/src/org/apache/http/client/methods/HttpPut.java
index 5b50135..912b38c 100644
--- a/src/org/apache/http/client/methods/HttpPut.java
+++ b/src/org/apache/http/client/methods/HttpPut.java
@@ -49,7 +49,12 @@
  * @version $Revision: 664505 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpPut extends HttpEntityEnclosingRequestBase {
 
     public final static String METHOD_NAME = "PUT";
diff --git a/src/org/apache/http/client/methods/HttpRequestBase.java b/src/org/apache/http/client/methods/HttpRequestBase.java
index 8938ea0..304fd91 100644
--- a/src/org/apache/http/client/methods/HttpRequestBase.java
+++ b/src/org/apache/http/client/methods/HttpRequestBase.java
@@ -55,7 +55,12 @@
  * @version $Revision: 674186 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class HttpRequestBase extends AbstractHttpMessage 
     implements HttpUriRequest, AbortableHttpRequest, Cloneable {
 
diff --git a/src/org/apache/http/client/methods/HttpTrace.java b/src/org/apache/http/client/methods/HttpTrace.java
index 94f18ff..10109a3 100644
--- a/src/org/apache/http/client/methods/HttpTrace.java
+++ b/src/org/apache/http/client/methods/HttpTrace.java
@@ -52,7 +52,12 @@
  * @version $Revision: 664505 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpTrace extends HttpRequestBase {
 
     public final static String METHOD_NAME = "TRACE";
diff --git a/src/org/apache/http/client/methods/HttpUriRequest.java b/src/org/apache/http/client/methods/HttpUriRequest.java
index 56d064a..7c2b910 100644
--- a/src/org/apache/http/client/methods/HttpUriRequest.java
+++ b/src/org/apache/http/client/methods/HttpUriRequest.java
@@ -46,7 +46,12 @@
  * @version   $Revision: 659191 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpUriRequest extends HttpRequest {
     
     /**
diff --git a/src/org/apache/http/client/params/AllClientPNames.java b/src/org/apache/http/client/params/AllClientPNames.java
index e55bca7..fd0bf8d 100644
--- a/src/org/apache/http/client/params/AllClientPNames.java
+++ b/src/org/apache/http/client/params/AllClientPNames.java
@@ -54,7 +54,12 @@
  * @version $Revision: 576078 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface AllClientPNames extends
     CoreConnectionPNames, CoreProtocolPNames,
     ClientPNames, AuthPNames, CookieSpecPNames,
diff --git a/src/org/apache/http/client/params/AuthPolicy.java b/src/org/apache/http/client/params/AuthPolicy.java
index 5bcdd38..5f6e055 100644
--- a/src/org/apache/http/client/params/AuthPolicy.java
+++ b/src/org/apache/http/client/params/AuthPolicy.java
@@ -30,7 +30,13 @@
  */
 
 package org.apache.http.client.params;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public final class AuthPolicy {
 
     private AuthPolicy() {
diff --git a/src/org/apache/http/client/params/ClientPNames.java b/src/org/apache/http/client/params/ClientPNames.java
index f98eeb7..e6609ff 100644
--- a/src/org/apache/http/client/params/ClientPNames.java
+++ b/src/org/apache/http/client/params/ClientPNames.java
@@ -39,7 +39,12 @@
  * @version $Revision: 659595 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ClientPNames {
 
     /**
diff --git a/src/org/apache/http/client/params/ClientParamBean.java b/src/org/apache/http/client/params/ClientParamBean.java
index 76431a7..4065705 100644
--- a/src/org/apache/http/client/params/ClientParamBean.java
+++ b/src/org/apache/http/client/params/ClientParamBean.java
@@ -38,7 +38,13 @@
 import org.apache.http.conn.ClientConnectionManagerFactory;
 import org.apache.http.params.HttpAbstractParamBean;
 import org.apache.http.params.HttpParams;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class ClientParamBean extends HttpAbstractParamBean {
 
     public ClientParamBean (final HttpParams params) {
diff --git a/src/org/apache/http/client/params/CookiePolicy.java b/src/org/apache/http/client/params/CookiePolicy.java
index 04a131d..2d2a8b4 100644
--- a/src/org/apache/http/client/params/CookiePolicy.java
+++ b/src/org/apache/http/client/params/CookiePolicy.java
@@ -30,7 +30,13 @@
  */
 
 package org.apache.http.client.params;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public final class CookiePolicy {
 
     /**
diff --git a/src/org/apache/http/client/params/HttpClientParams.java b/src/org/apache/http/client/params/HttpClientParams.java
index c21e2b0..bfdb629 100644
--- a/src/org/apache/http/client/params/HttpClientParams.java
+++ b/src/org/apache/http/client/params/HttpClientParams.java
@@ -40,7 +40,12 @@
  * @version $Revision: 659595 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpClientParams {
 
     private HttpClientParams() {
diff --git a/src/org/apache/http/client/protocol/ClientContext.java b/src/org/apache/http/client/protocol/ClientContext.java
index 1859f9e..9686d46 100644
--- a/src/org/apache/http/client/protocol/ClientContext.java
+++ b/src/org/apache/http/client/protocol/ClientContext.java
@@ -35,7 +35,12 @@
 /**
  * {@link org.apache.http.protocol.HttpContext Context}
  * attribute names for client.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ClientContext {
     
     public static final String COOKIESPEC_REGISTRY   = "http.cookiespec-registry"; 
diff --git a/src/org/apache/http/client/protocol/ClientContextConfigurer.java b/src/org/apache/http/client/protocol/ClientContextConfigurer.java
index f2ced63..f17b067 100644
--- a/src/org/apache/http/client/protocol/ClientContextConfigurer.java
+++ b/src/org/apache/http/client/protocol/ClientContextConfigurer.java
@@ -38,7 +38,13 @@
 import org.apache.http.client.CredentialsProvider;
 import org.apache.http.cookie.CookieSpecRegistry;
 import org.apache.http.protocol.HttpContext;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class ClientContextConfigurer implements ClientContext {
     
     private final HttpContext context;
diff --git a/src/org/apache/http/client/protocol/RequestAddCookies.java b/src/org/apache/http/client/protocol/RequestAddCookies.java
index 0de8c40..dc38245 100644
--- a/src/org/apache/http/client/protocol/RequestAddCookies.java
+++ b/src/org/apache/http/client/protocol/RequestAddCookies.java
@@ -66,7 +66,12 @@
  * @version $Revision: 673450 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RequestAddCookies implements HttpRequestInterceptor {
 
     private final Log log = LogFactory.getLog(getClass());
diff --git a/src/org/apache/http/client/protocol/RequestDefaultHeaders.java b/src/org/apache/http/client/protocol/RequestDefaultHeaders.java
index 27d5cc7..b38340c 100644
--- a/src/org/apache/http/client/protocol/RequestDefaultHeaders.java
+++ b/src/org/apache/http/client/protocol/RequestDefaultHeaders.java
@@ -49,7 +49,12 @@
  * @version $Revision: 653041 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RequestDefaultHeaders implements HttpRequestInterceptor {
 
     public RequestDefaultHeaders() {
diff --git a/src/org/apache/http/client/protocol/RequestProxyAuthentication.java b/src/org/apache/http/client/protocol/RequestProxyAuthentication.java
index b4dfe76..8246d83 100644
--- a/src/org/apache/http/client/protocol/RequestProxyAuthentication.java
+++ b/src/org/apache/http/client/protocol/RequestProxyAuthentication.java
@@ -51,7 +51,12 @@
  * @version $Revision: 673450 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RequestProxyAuthentication implements HttpRequestInterceptor {
 
     private final Log log = LogFactory.getLog(getClass());
diff --git a/src/org/apache/http/client/protocol/RequestTargetAuthentication.java b/src/org/apache/http/client/protocol/RequestTargetAuthentication.java
index c140183..b462556 100644
--- a/src/org/apache/http/client/protocol/RequestTargetAuthentication.java
+++ b/src/org/apache/http/client/protocol/RequestTargetAuthentication.java
@@ -51,7 +51,12 @@
  * @version $Revision: 673450 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RequestTargetAuthentication implements HttpRequestInterceptor {
 
     private final Log log = LogFactory.getLog(getClass());
diff --git a/src/org/apache/http/client/protocol/ResponseProcessCookies.java b/src/org/apache/http/client/protocol/ResponseProcessCookies.java
index 5b76550..5261f32 100644
--- a/src/org/apache/http/client/protocol/ResponseProcessCookies.java
+++ b/src/org/apache/http/client/protocol/ResponseProcessCookies.java
@@ -58,7 +58,12 @@
  * @version $Revision: 673450 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ResponseProcessCookies implements HttpResponseInterceptor {
 
     private final Log log = LogFactory.getLog(getClass());
diff --git a/src/org/apache/http/client/utils/CloneUtils.java b/src/org/apache/http/client/utils/CloneUtils.java
index fec534b..19d7af9 100644
--- a/src/org/apache/http/client/utils/CloneUtils.java
+++ b/src/org/apache/http/client/utils/CloneUtils.java
@@ -34,7 +34,12 @@
 
 /**
  * A collection of utilities to workaround limitations of Java clone framework.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class CloneUtils {
 
     public static Object clone(final Object obj) throws CloneNotSupportedException {
diff --git a/src/org/apache/http/client/utils/URIUtils.java b/src/org/apache/http/client/utils/URIUtils.java
index 1cbb9af..a0b580b 100644
--- a/src/org/apache/http/client/utils/URIUtils.java
+++ b/src/org/apache/http/client/utils/URIUtils.java
@@ -37,7 +37,12 @@
 /**
  * A collection of utilities for {@link URI URIs}, to workaround
  * bugs within the class or for ease-of-use features.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class URIUtils {
 
      /**
diff --git a/src/org/apache/http/client/utils/URLEncodedUtils.java b/src/org/apache/http/client/utils/URLEncodedUtils.java
index 8b08f90..67061ac 100644
--- a/src/org/apache/http/client/utils/URLEncodedUtils.java
+++ b/src/org/apache/http/client/utils/URLEncodedUtils.java
@@ -48,7 +48,12 @@
 
 /**
  * A collection of utilities for encoding URLs.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class URLEncodedUtils {
 
     public static final String CONTENT_TYPE = "application/x-www-form-urlencoded";
diff --git a/src/org/apache/http/conn/BasicEofSensorWatcher.java b/src/org/apache/http/conn/BasicEofSensorWatcher.java
index 9a9f3c5..38f9737 100644
--- a/src/org/apache/http/conn/BasicEofSensorWatcher.java
+++ b/src/org/apache/http/conn/BasicEofSensorWatcher.java
@@ -45,7 +45,12 @@
  * @version $Revision: 672367 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicEofSensorWatcher implements EofSensorWatcher {
 
 
diff --git a/src/org/apache/http/conn/BasicManagedEntity.java b/src/org/apache/http/conn/BasicManagedEntity.java
index 9719e1a..8b145b3 100644
--- a/src/org/apache/http/conn/BasicManagedEntity.java
+++ b/src/org/apache/http/conn/BasicManagedEntity.java
@@ -51,7 +51,12 @@
  * @version $Revision: 672367 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicManagedEntity extends HttpEntityWrapper
     implements ConnectionReleaseTrigger, EofSensorWatcher {
 
diff --git a/src/org/apache/http/conn/ClientConnectionManager.java b/src/org/apache/http/conn/ClientConnectionManager.java
index e3375e1..e554197 100644
--- a/src/org/apache/http/conn/ClientConnectionManager.java
+++ b/src/org/apache/http/conn/ClientConnectionManager.java
@@ -50,7 +50,12 @@
  * @version   $Revision: 671717 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ClientConnectionManager {
 
     /**
diff --git a/src/org/apache/http/conn/ClientConnectionManagerFactory.java b/src/org/apache/http/conn/ClientConnectionManagerFactory.java
index 4bedc4e..a2a66a2 100644
--- a/src/org/apache/http/conn/ClientConnectionManagerFactory.java
+++ b/src/org/apache/http/conn/ClientConnectionManagerFactory.java
@@ -40,7 +40,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ClientConnectionManagerFactory {    
 
     ClientConnectionManager newInstance(
diff --git a/src/org/apache/http/conn/ClientConnectionOperator.java b/src/org/apache/http/conn/ClientConnectionOperator.java
index 980b867..ce8c879 100644
--- a/src/org/apache/http/conn/ClientConnectionOperator.java
+++ b/src/org/apache/http/conn/ClientConnectionOperator.java
@@ -59,7 +59,12 @@
  * @version   $Revision: 645850 $ $Date: 2008-04-08 04:08:52 -0700 (Tue, 08 Apr 2008) $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ClientConnectionOperator {
 
 
diff --git a/src/org/apache/http/conn/ClientConnectionRequest.java b/src/org/apache/http/conn/ClientConnectionRequest.java
index 6ba02d0..e0774b1 100644
--- a/src/org/apache/http/conn/ClientConnectionRequest.java
+++ b/src/org/apache/http/conn/ClientConnectionRequest.java
@@ -35,7 +35,12 @@
 
 /**
  * Encapsulates a request for a {@link ManagedClientConnection}.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ClientConnectionRequest {
     
     /**
diff --git a/src/org/apache/http/conn/ConnectTimeoutException.java b/src/org/apache/http/conn/ConnectTimeoutException.java
index 83a731a..6cc6922 100644
--- a/src/org/apache/http/conn/ConnectTimeoutException.java
+++ b/src/org/apache/http/conn/ConnectTimeoutException.java
@@ -40,7 +40,12 @@
  * @author <a href="mailto:laura@lwerner.org">Laura Werner</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ConnectTimeoutException extends InterruptedIOException {
 
     private static final long serialVersionUID = -4816682903149535989L;
diff --git a/src/org/apache/http/conn/ConnectionKeepAliveStrategy.java b/src/org/apache/http/conn/ConnectionKeepAliveStrategy.java
index 27d56cb..92872fc 100644
--- a/src/org/apache/http/conn/ConnectionKeepAliveStrategy.java
+++ b/src/org/apache/http/conn/ConnectionKeepAliveStrategy.java
@@ -44,7 +44,12 @@
  * @version $Revision: $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ConnectionKeepAliveStrategy {
     
     /**
diff --git a/src/org/apache/http/conn/ConnectionPoolTimeoutException.java b/src/org/apache/http/conn/ConnectionPoolTimeoutException.java
index 7d4985e..fb40e8c 100644
--- a/src/org/apache/http/conn/ConnectionPoolTimeoutException.java
+++ b/src/org/apache/http/conn/ConnectionPoolTimeoutException.java
@@ -38,7 +38,12 @@
  * @author <a href="mailto:laura@lwerner.org">Laura Werner</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ConnectionPoolTimeoutException extends ConnectTimeoutException {
 
     private static final long serialVersionUID = -7898874842020245128L;
diff --git a/src/org/apache/http/conn/ConnectionReleaseTrigger.java b/src/org/apache/http/conn/ConnectionReleaseTrigger.java
index a9ac12e..12d2afd 100644
--- a/src/org/apache/http/conn/ConnectionReleaseTrigger.java
+++ b/src/org/apache/http/conn/ConnectionReleaseTrigger.java
@@ -52,7 +52,12 @@
  * @version $Revision: 672367 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ConnectionReleaseTrigger {
 
     /**
diff --git a/src/org/apache/http/conn/EofSensorInputStream.java b/src/org/apache/http/conn/EofSensorInputStream.java
index 0e1b90e..8cc5825 100644
--- a/src/org/apache/http/conn/EofSensorInputStream.java
+++ b/src/org/apache/http/conn/EofSensorInputStream.java
@@ -59,7 +59,12 @@
  * @version $Revision: 672367 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 // don't use FilterInputStream as the base class, we'd have to
 // override markSupported(), mark(), and reset() to disable them
 public class EofSensorInputStream extends InputStream
diff --git a/src/org/apache/http/conn/EofSensorWatcher.java b/src/org/apache/http/conn/EofSensorWatcher.java
index 837f8d9..83a60ad 100644
--- a/src/org/apache/http/conn/EofSensorWatcher.java
+++ b/src/org/apache/http/conn/EofSensorWatcher.java
@@ -45,7 +45,12 @@
  * @version $Revision: 552264 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface EofSensorWatcher {
 
     /**
diff --git a/src/org/apache/http/conn/HttpHostConnectException.java b/src/org/apache/http/conn/HttpHostConnectException.java
index 743ca77..ea64170 100644
--- a/src/org/apache/http/conn/HttpHostConnectException.java
+++ b/src/org/apache/http/conn/HttpHostConnectException.java
@@ -37,7 +37,12 @@
 /**
  * A {@link ConnectException} that specifies the {@link HttpHost} that was
  * being connected to.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpHostConnectException extends ConnectException {
 
     private static final long serialVersionUID = -3194482710275220224L;
diff --git a/src/org/apache/http/conn/ManagedClientConnection.java b/src/org/apache/http/conn/ManagedClientConnection.java
index f642cb9..1b00a43 100644
--- a/src/org/apache/http/conn/ManagedClientConnection.java
+++ b/src/org/apache/http/conn/ManagedClientConnection.java
@@ -57,7 +57,12 @@
  * @version   $Revision: 672969 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ManagedClientConnection extends
     HttpClientConnection, HttpInetConnection, ConnectionReleaseTrigger {
 
diff --git a/src/org/apache/http/conn/MultihomePlainSocketFactory.java b/src/org/apache/http/conn/MultihomePlainSocketFactory.java
index e9549ab..ee7c047 100644
--- a/src/org/apache/http/conn/MultihomePlainSocketFactory.java
+++ b/src/org/apache/http/conn/MultihomePlainSocketFactory.java
@@ -52,7 +52,12 @@
  * the {@link #connectSocket(Socket, String, int, InetAddress, int, HttpParams)}
  * method cannot be reliably interrupted by closing the socket returned by the
  * {@link #createSocket()} method.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class MultihomePlainSocketFactory implements SocketFactory {
 
     /**
diff --git a/src/org/apache/http/conn/OperatedClientConnection.java b/src/org/apache/http/conn/OperatedClientConnection.java
index 2eda8e9..32f6601 100644
--- a/src/org/apache/http/conn/OperatedClientConnection.java
+++ b/src/org/apache/http/conn/OperatedClientConnection.java
@@ -53,7 +53,12 @@
  * @version   $Revision: 646087 $ $Date: 2008-04-08 14:36:46 -0700 (Tue, 08 Apr 2008) $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface OperatedClientConnection
     extends HttpClientConnection, HttpInetConnection {
 
diff --git a/src/org/apache/http/conn/params/ConnConnectionPNames.java b/src/org/apache/http/conn/params/ConnConnectionPNames.java
index ff1a090..d5edc86 100644
--- a/src/org/apache/http/conn/params/ConnConnectionPNames.java
+++ b/src/org/apache/http/conn/params/ConnConnectionPNames.java
@@ -37,7 +37,12 @@
  * @version $Revision: 576068 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ConnConnectionPNames {
 
 
diff --git a/src/org/apache/http/conn/params/ConnConnectionParamBean.java b/src/org/apache/http/conn/params/ConnConnectionParamBean.java
index 094b152..c982454 100644
--- a/src/org/apache/http/conn/params/ConnConnectionParamBean.java
+++ b/src/org/apache/http/conn/params/ConnConnectionParamBean.java
@@ -38,7 +38,12 @@
  * Allows for setting parameters relating to connections on
  * {@link HttpParams}.  This class ensures that the values set on the params
  * are type-safe. 
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ConnConnectionParamBean extends HttpAbstractParamBean {
     
     public ConnConnectionParamBean (final HttpParams params) {
diff --git a/src/org/apache/http/conn/params/ConnManagerPNames.java b/src/org/apache/http/conn/params/ConnManagerPNames.java
index 1184b12..89efba0 100644
--- a/src/org/apache/http/conn/params/ConnManagerPNames.java
+++ b/src/org/apache/http/conn/params/ConnManagerPNames.java
@@ -37,7 +37,12 @@
  * @version $Revision: 658781 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ConnManagerPNames {
 
     /**
diff --git a/src/org/apache/http/conn/params/ConnManagerParamBean.java b/src/org/apache/http/conn/params/ConnManagerParamBean.java
index 830b7bf..29ddaa6 100644
--- a/src/org/apache/http/conn/params/ConnManagerParamBean.java
+++ b/src/org/apache/http/conn/params/ConnManagerParamBean.java
@@ -38,7 +38,12 @@
  * Allows for setting parameters relating to connection managers on
  * {@link HttpParams}.  This class ensures that the values set on the params
  * are type-safe. 
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ConnManagerParamBean extends HttpAbstractParamBean {
 
     public ConnManagerParamBean (final HttpParams params) {
diff --git a/src/org/apache/http/conn/params/ConnManagerParams.java b/src/org/apache/http/conn/params/ConnManagerParams.java
index c6e042e..47af4c6 100644
--- a/src/org/apache/http/conn/params/ConnManagerParams.java
+++ b/src/org/apache/http/conn/params/ConnManagerParams.java
@@ -46,7 +46,12 @@
  * @since 4.0
  *
  * @see ConnManagerPNames
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class ConnManagerParams implements ConnManagerPNames {
 
     /** The default maximum number of connections allowed overall */
diff --git a/src/org/apache/http/conn/params/ConnPerRoute.java b/src/org/apache/http/conn/params/ConnPerRoute.java
index abff04e..5ca7796 100644
--- a/src/org/apache/http/conn/params/ConnPerRoute.java
+++ b/src/org/apache/http/conn/params/ConnPerRoute.java
@@ -43,7 +43,12 @@
  * @version $Revision: 651813 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ConnPerRoute {
 
     int getMaxForRoute(HttpRoute route);
diff --git a/src/org/apache/http/conn/params/ConnPerRouteBean.java b/src/org/apache/http/conn/params/ConnPerRouteBean.java
index c6a36e3..f5723a8 100644
--- a/src/org/apache/http/conn/params/ConnPerRouteBean.java
+++ b/src/org/apache/http/conn/params/ConnPerRouteBean.java
@@ -46,7 +46,12 @@
  * @version $Revision: 652947 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class ConnPerRouteBean implements ConnPerRoute {
 
     /** The default maximum number of connections allowed per host */
diff --git a/src/org/apache/http/conn/params/ConnRoutePNames.java b/src/org/apache/http/conn/params/ConnRoutePNames.java
index f9d42db..7cc8ef7 100644
--- a/src/org/apache/http/conn/params/ConnRoutePNames.java
+++ b/src/org/apache/http/conn/params/ConnRoutePNames.java
@@ -36,7 +36,12 @@
  * @version $Revision: 613656 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ConnRoutePNames {
 
     /**
diff --git a/src/org/apache/http/conn/params/ConnRouteParamBean.java b/src/org/apache/http/conn/params/ConnRouteParamBean.java
index 9464c02..8ad13c6 100644
--- a/src/org/apache/http/conn/params/ConnRouteParamBean.java
+++ b/src/org/apache/http/conn/params/ConnRouteParamBean.java
@@ -42,7 +42,12 @@
  * Allows for setting parameters relating to connection routes on
  * {@link HttpParams}.  This class ensures that the values set on the params
  * are type-safe. 
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ConnRouteParamBean extends HttpAbstractParamBean {
     
     public ConnRouteParamBean (final HttpParams params) {
diff --git a/src/org/apache/http/conn/params/ConnRouteParams.java b/src/org/apache/http/conn/params/ConnRouteParams.java
index 2fa1654..3a06921 100644
--- a/src/org/apache/http/conn/params/ConnRouteParams.java
+++ b/src/org/apache/http/conn/params/ConnRouteParams.java
@@ -49,7 +49,12 @@
  * @version $Revision: 658785 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ConnRouteParams implements ConnRoutePNames {
 
     /**
diff --git a/src/org/apache/http/conn/routing/BasicRouteDirector.java b/src/org/apache/http/conn/routing/BasicRouteDirector.java
index a3714ec..12e4507 100644
--- a/src/org/apache/http/conn/routing/BasicRouteDirector.java
+++ b/src/org/apache/http/conn/routing/BasicRouteDirector.java
@@ -44,7 +44,12 @@
  * @version $Revision: 620255 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicRouteDirector implements HttpRouteDirector {
 
     // public default constructor
diff --git a/src/org/apache/http/conn/routing/HttpRoute.java b/src/org/apache/http/conn/routing/HttpRoute.java
index 1e870b8..826c462 100644
--- a/src/org/apache/http/conn/routing/HttpRoute.java
+++ b/src/org/apache/http/conn/routing/HttpRoute.java
@@ -47,7 +47,12 @@
  * @version $Revision: 653041 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class HttpRoute implements RouteInfo, Cloneable {
 
     /** The target host to connect to. */
diff --git a/src/org/apache/http/conn/routing/HttpRouteDirector.java b/src/org/apache/http/conn/routing/HttpRouteDirector.java
index 8cfcf67..f82ffbb 100644
--- a/src/org/apache/http/conn/routing/HttpRouteDirector.java
+++ b/src/org/apache/http/conn/routing/HttpRouteDirector.java
@@ -45,7 +45,12 @@
  * @version $Revision: 620255 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpRouteDirector {
 
     /** Indicates that the route can not be established at all. */
diff --git a/src/org/apache/http/conn/routing/HttpRoutePlanner.java b/src/org/apache/http/conn/routing/HttpRoutePlanner.java
index 489702a..4cc5957 100644
--- a/src/org/apache/http/conn/routing/HttpRoutePlanner.java
+++ b/src/org/apache/http/conn/routing/HttpRoutePlanner.java
@@ -42,7 +42,12 @@
  * Encapsulates logic to compute a {@link HttpRoute} to a target host.
  * Implementations may for example be based on parameters, or on the
  * standard Java system properties.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpRoutePlanner {
     
     /**
diff --git a/src/org/apache/http/conn/routing/RouteInfo.java b/src/org/apache/http/conn/routing/RouteInfo.java
index 3449cb1..af7fc6c 100644
--- a/src/org/apache/http/conn/routing/RouteInfo.java
+++ b/src/org/apache/http/conn/routing/RouteInfo.java
@@ -46,7 +46,12 @@
  * @version $Revision: 652200 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface RouteInfo {
 
     /**
diff --git a/src/org/apache/http/conn/routing/RouteTracker.java b/src/org/apache/http/conn/routing/RouteTracker.java
index ba8213e..c041638 100644
--- a/src/org/apache/http/conn/routing/RouteTracker.java
+++ b/src/org/apache/http/conn/routing/RouteTracker.java
@@ -46,7 +46,12 @@
  * @version $Revision: 620254 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class RouteTracker implements RouteInfo, Cloneable {
 
     /** The target host to connect to. */
diff --git a/src/org/apache/http/conn/scheme/HostNameResolver.java b/src/org/apache/http/conn/scheme/HostNameResolver.java
index ca6615c..d488a4b 100644
--- a/src/org/apache/http/conn/scheme/HostNameResolver.java
+++ b/src/org/apache/http/conn/scheme/HostNameResolver.java
@@ -33,7 +33,13 @@
 
 import java.io.IOException;
 import java.net.InetAddress;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public interface HostNameResolver {
 
     InetAddress resolve (String hostname) throws IOException;
diff --git a/src/org/apache/http/conn/scheme/LayeredSocketFactory.java b/src/org/apache/http/conn/scheme/LayeredSocketFactory.java
index 8dc6c6c..b9f5348 100644
--- a/src/org/apache/http/conn/scheme/LayeredSocketFactory.java
+++ b/src/org/apache/http/conn/scheme/LayeredSocketFactory.java
@@ -42,7 +42,12 @@
  * @author Michael Becke
  * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface LayeredSocketFactory extends SocketFactory {
 
     /**
diff --git a/src/org/apache/http/conn/scheme/PlainSocketFactory.java b/src/org/apache/http/conn/scheme/PlainSocketFactory.java
index b15df44..0c43bfc 100644
--- a/src/org/apache/http/conn/scheme/PlainSocketFactory.java
+++ b/src/org/apache/http/conn/scheme/PlainSocketFactory.java
@@ -46,7 +46,12 @@
  * 
  * @author <a href="mailto:rolandw at apache.org">Roland Weber</a>
  * @author Michael Becke
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class PlainSocketFactory implements SocketFactory {
 
     /**
diff --git a/src/org/apache/http/conn/scheme/Scheme.java b/src/org/apache/http/conn/scheme/Scheme.java
index 590d59d..73b740e 100644
--- a/src/org/apache/http/conn/scheme/Scheme.java
+++ b/src/org/apache/http/conn/scheme/Scheme.java
@@ -53,7 +53,12 @@
  * @author Michael Becke 
  * @author Jeff Dever
  * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class Scheme {
 
     /** The name of this scheme, in lowercase. (e.g. http, https) */
diff --git a/src/org/apache/http/conn/scheme/SchemeRegistry.java b/src/org/apache/http/conn/scheme/SchemeRegistry.java
index 2ee8685..5f37286 100644
--- a/src/org/apache/http/conn/scheme/SchemeRegistry.java
+++ b/src/org/apache/http/conn/scheme/SchemeRegistry.java
@@ -48,7 +48,12 @@
  * @version   $Revision: 648356 $ $Date: 2008-04-15 10:57:53 -0700 (Tue, 15 Apr 2008) $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class SchemeRegistry {
 
     /** The available schemes in this registry. */
diff --git a/src/org/apache/http/conn/scheme/SocketFactory.java b/src/org/apache/http/conn/scheme/SocketFactory.java
index bb553b2..c6bc03c 100644
--- a/src/org/apache/http/conn/scheme/SocketFactory.java
+++ b/src/org/apache/http/conn/scheme/SocketFactory.java
@@ -50,7 +50,12 @@
  * @author <a href="mailto:rolandw at apache.org">Roland Weber</a>
  * @author Michael Becke
  * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface SocketFactory {
 
     /**
diff --git a/src/org/apache/http/conn/ssl/AbstractVerifier.java b/src/org/apache/http/conn/ssl/AbstractVerifier.java
index deda1d0..a56a6d4 100644
--- a/src/org/apache/http/conn/ssl/AbstractVerifier.java
+++ b/src/org/apache/http/conn/ssl/AbstractVerifier.java
@@ -57,7 +57,12 @@
  * implementations.
  * 
  * @author Julius Davies
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class AbstractVerifier implements X509HostnameVerifier {
 
     /**
diff --git a/src/org/apache/http/conn/ssl/AllowAllHostnameVerifier.java b/src/org/apache/http/conn/ssl/AllowAllHostnameVerifier.java
index 05828fb..c2bf4c4 100644
--- a/src/org/apache/http/conn/ssl/AllowAllHostnameVerifier.java
+++ b/src/org/apache/http/conn/ssl/AllowAllHostnameVerifier.java
@@ -36,7 +36,12 @@
  * off. This implementation is a no-op, and never throws the SSLException.
  * 
  * @author Julius Davies
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class AllowAllHostnameVerifier extends AbstractVerifier {
 
     public final void verify(
diff --git a/src/org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.java b/src/org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.java
index f4129d6..48a7bf9 100644
--- a/src/org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.java
+++ b/src/org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.java
@@ -44,7 +44,12 @@
  * including "a.b.foo.com".
  * 
  * @author Julius Davies
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BrowserCompatHostnameVerifier extends AbstractVerifier {
 
     public final void verify(
diff --git a/src/org/apache/http/conn/ssl/SSLSocketFactory.java b/src/org/apache/http/conn/ssl/SSLSocketFactory.java
index 9195b4f..1e46fee 100644
--- a/src/org/apache/http/conn/ssl/SSLSocketFactory.java
+++ b/src/org/apache/http/conn/ssl/SSLSocketFactory.java
@@ -134,8 +134,13 @@
  *   </ul>
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * @author Julius Davies
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
 
+@Deprecated
 public class SSLSocketFactory implements LayeredSocketFactory {
 
     public static final String TLS   = "TLS";
diff --git a/src/org/apache/http/conn/ssl/StrictHostnameVerifier.java b/src/org/apache/http/conn/ssl/StrictHostnameVerifier.java
index 5eb0d96..bd9e70d 100644
--- a/src/org/apache/http/conn/ssl/StrictHostnameVerifier.java
+++ b/src/org/apache/http/conn/ssl/StrictHostnameVerifier.java
@@ -51,7 +51,12 @@
  * such as "a.b.foo.com".
  * 
  * @author Julius Davies
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class StrictHostnameVerifier extends AbstractVerifier {
 
     public final void verify(
diff --git a/src/org/apache/http/conn/ssl/X509HostnameVerifier.java b/src/org/apache/http/conn/ssl/X509HostnameVerifier.java
index 05ad04d..e38db5f 100644
--- a/src/org/apache/http/conn/ssl/X509HostnameVerifier.java
+++ b/src/org/apache/http/conn/ssl/X509HostnameVerifier.java
@@ -56,7 +56,12 @@
  * @author <a href="mailto:hauer@psicode.com">Sebastian Hauer</a>
  *
  * @since 4.0 (8-Dec-2006)
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface X509HostnameVerifier extends HostnameVerifier {
 
     boolean verify(String host, SSLSession session);
diff --git a/src/org/apache/http/conn/util/InetAddressUtils.java b/src/org/apache/http/conn/util/InetAddressUtils.java
index 71f2190..9a3cddb 100644
--- a/src/org/apache/http/conn/util/InetAddressUtils.java
+++ b/src/org/apache/http/conn/util/InetAddressUtils.java
@@ -35,7 +35,12 @@
 
 /**
  * A collection of utilities relating to InetAddresses.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class InetAddressUtils {
 
     private InetAddressUtils() {
diff --git a/src/org/apache/http/cookie/ClientCookie.java b/src/org/apache/http/cookie/ClientCookie.java
index 96edec9..da511d1 100644
--- a/src/org/apache/http/cookie/ClientCookie.java
+++ b/src/org/apache/http/cookie/ClientCookie.java
@@ -43,7 +43,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ClientCookie extends Cookie {
 
     // RFC2109 attributes
diff --git a/src/org/apache/http/cookie/Cookie.java b/src/org/apache/http/cookie/Cookie.java
index 5eae9d5..fd23307 100644
--- a/src/org/apache/http/cookie/Cookie.java
+++ b/src/org/apache/http/cookie/Cookie.java
@@ -41,7 +41,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface Cookie {
 
     /**
diff --git a/src/org/apache/http/cookie/CookieAttributeHandler.java b/src/org/apache/http/cookie/CookieAttributeHandler.java
index a79d115..0e05d2d 100644
--- a/src/org/apache/http/cookie/CookieAttributeHandler.java
+++ b/src/org/apache/http/cookie/CookieAttributeHandler.java
@@ -42,7 +42,12 @@
  * @author jain.samit@gmail.com (Samit Jain)
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface CookieAttributeHandler {
 
   /**
diff --git a/src/org/apache/http/cookie/CookieIdentityComparator.java b/src/org/apache/http/cookie/CookieIdentityComparator.java
index 4fc701c..60346c9 100644
--- a/src/org/apache/http/cookie/CookieIdentityComparator.java
+++ b/src/org/apache/http/cookie/CookieIdentityComparator.java
@@ -43,7 +43,12 @@
  * </p>
  * 
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class CookieIdentityComparator implements Serializable, Comparator<Cookie> {
 
     private static final long serialVersionUID = 4466565437490631532L;
diff --git a/src/org/apache/http/cookie/CookieOrigin.java b/src/org/apache/http/cookie/CookieOrigin.java
index ad0448a..4ecf00b 100644
--- a/src/org/apache/http/cookie/CookieOrigin.java
+++ b/src/org/apache/http/cookie/CookieOrigin.java
@@ -39,7 +39,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class CookieOrigin {
 
     private final String host;
diff --git a/src/org/apache/http/cookie/CookiePathComparator.java b/src/org/apache/http/cookie/CookiePathComparator.java
index f5f0a66..2816916 100644
--- a/src/org/apache/http/cookie/CookiePathComparator.java
+++ b/src/org/apache/http/cookie/CookiePathComparator.java
@@ -47,7 +47,12 @@
  * </p>
  * 
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class CookiePathComparator implements Serializable, Comparator<Cookie> {
 
     private static final long serialVersionUID = 7523645369616405818L;
diff --git a/src/org/apache/http/cookie/CookieSpec.java b/src/org/apache/http/cookie/CookieSpec.java
index 1eb9f26..f6aa7a5 100644
--- a/src/org/apache/http/cookie/CookieSpec.java
+++ b/src/org/apache/http/cookie/CookieSpec.java
@@ -49,7 +49,12 @@
  * @author <a href="mailto:jsdever@apache.org">Jeff Dever</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface CookieSpec {    
 
     /**
diff --git a/src/org/apache/http/cookie/CookieSpecFactory.java b/src/org/apache/http/cookie/CookieSpecFactory.java
index 9d5c21d..1be8afe 100644
--- a/src/org/apache/http/cookie/CookieSpecFactory.java
+++ b/src/org/apache/http/cookie/CookieSpecFactory.java
@@ -38,7 +38,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface CookieSpecFactory {    
 
     CookieSpec newInstance(HttpParams params);
diff --git a/src/org/apache/http/cookie/CookieSpecRegistry.java b/src/org/apache/http/cookie/CookieSpecRegistry.java
index 64b9c8b..4dafb68 100644
--- a/src/org/apache/http/cookie/CookieSpecRegistry.java
+++ b/src/org/apache/http/cookie/CookieSpecRegistry.java
@@ -48,7 +48,12 @@
  * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class CookieSpecRegistry {
 
     private final Map<String,CookieSpecFactory> registeredSpecs;
diff --git a/src/org/apache/http/cookie/MalformedCookieException.java b/src/org/apache/http/cookie/MalformedCookieException.java
index e3f30a9..719b202 100644
--- a/src/org/apache/http/cookie/MalformedCookieException.java
+++ b/src/org/apache/http/cookie/MalformedCookieException.java
@@ -40,7 +40,12 @@
  * @author <a href="mailto:oleg@ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class MalformedCookieException extends ProtocolException {
 
     private static final long serialVersionUID = -6695462944287282185L;
diff --git a/src/org/apache/http/cookie/SM.java b/src/org/apache/http/cookie/SM.java
index a7047d5..1777748 100644
--- a/src/org/apache/http/cookie/SM.java
+++ b/src/org/apache/http/cookie/SM.java
@@ -37,7 +37,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface SM {
 
     public static final String COOKIE            = "Cookie";
diff --git a/src/org/apache/http/cookie/SetCookie.java b/src/org/apache/http/cookie/SetCookie.java
index d207c48..ad1b5f5 100644
--- a/src/org/apache/http/cookie/SetCookie.java
+++ b/src/org/apache/http/cookie/SetCookie.java
@@ -40,7 +40,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface SetCookie extends Cookie {
 
     void setValue(String value);
diff --git a/src/org/apache/http/cookie/SetCookie2.java b/src/org/apache/http/cookie/SetCookie2.java
index cd0420e..b168786 100644
--- a/src/org/apache/http/cookie/SetCookie2.java
+++ b/src/org/apache/http/cookie/SetCookie2.java
@@ -38,7 +38,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface SetCookie2 extends SetCookie {
 
     /**
diff --git a/src/org/apache/http/cookie/params/CookieSpecPNames.java b/src/org/apache/http/cookie/params/CookieSpecPNames.java
index 6a6f6d0..72037d8 100644
--- a/src/org/apache/http/cookie/params/CookieSpecPNames.java
+++ b/src/org/apache/http/cookie/params/CookieSpecPNames.java
@@ -39,7 +39,12 @@
  * @version $Revision: 578403 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface CookieSpecPNames {
 
     /**
diff --git a/src/org/apache/http/cookie/params/CookieSpecParamBean.java b/src/org/apache/http/cookie/params/CookieSpecParamBean.java
index 6016022..a1e221c 100644
--- a/src/org/apache/http/cookie/params/CookieSpecParamBean.java
+++ b/src/org/apache/http/cookie/params/CookieSpecParamBean.java
@@ -35,7 +35,13 @@
 
 import org.apache.http.params.HttpAbstractParamBean;
 import org.apache.http.params.HttpParams;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class CookieSpecParamBean extends HttpAbstractParamBean {
 
     public CookieSpecParamBean (final HttpParams params) {
diff --git a/src/org/apache/http/entity/AbstractHttpEntity.java b/src/org/apache/http/entity/AbstractHttpEntity.java
index 0fce6eb..3ed25a5 100644
--- a/src/org/apache/http/entity/AbstractHttpEntity.java
+++ b/src/org/apache/http/entity/AbstractHttpEntity.java
@@ -48,7 +48,12 @@
  * @version $Revision: 496070 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class AbstractHttpEntity implements HttpEntity {
 
     /**
diff --git a/src/org/apache/http/entity/BasicHttpEntity.java b/src/org/apache/http/entity/BasicHttpEntity.java
index df3c07c..32d6959 100644
--- a/src/org/apache/http/entity/BasicHttpEntity.java
+++ b/src/org/apache/http/entity/BasicHttpEntity.java
@@ -43,7 +43,12 @@
  * @version $Revision: 496070 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicHttpEntity extends AbstractHttpEntity {
 
     private InputStream content;
diff --git a/src/org/apache/http/entity/BufferedHttpEntity.java b/src/org/apache/http/entity/BufferedHttpEntity.java
index 9888797..9bd922f 100644
--- a/src/org/apache/http/entity/BufferedHttpEntity.java
+++ b/src/org/apache/http/entity/BufferedHttpEntity.java
@@ -51,7 +51,12 @@
  * @version $Revision: 496070 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BufferedHttpEntity extends HttpEntityWrapper {
       
     private final byte[] buffer;
diff --git a/src/org/apache/http/entity/ByteArrayEntity.java b/src/org/apache/http/entity/ByteArrayEntity.java
index c7257f7..910a68b 100644
--- a/src/org/apache/http/entity/ByteArrayEntity.java
+++ b/src/org/apache/http/entity/ByteArrayEntity.java
@@ -44,7 +44,12 @@
  * @version $Revision: 604625 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ByteArrayEntity extends AbstractHttpEntity implements Cloneable {
 
     protected final byte[] content;
diff --git a/src/org/apache/http/entity/ContentLengthStrategy.java b/src/org/apache/http/entity/ContentLengthStrategy.java
index cc4ab7d..9a13405 100644
--- a/src/org/apache/http/entity/ContentLengthStrategy.java
+++ b/src/org/apache/http/entity/ContentLengthStrategy.java
@@ -43,7 +43,12 @@
  * @version $Revision: 613298 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ContentLengthStrategy {
 
     public static final int IDENTITY         = -1;
diff --git a/src/org/apache/http/entity/ContentProducer.java b/src/org/apache/http/entity/ContentProducer.java
index 456eae3..9bb01a5 100644
--- a/src/org/apache/http/entity/ContentProducer.java
+++ b/src/org/apache/http/entity/ContentProducer.java
@@ -45,7 +45,12 @@
  * @version $Revision: 496070 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ContentProducer {
 
     void writeTo(OutputStream outstream) throws IOException;
diff --git a/src/org/apache/http/entity/EntityTemplate.java b/src/org/apache/http/entity/EntityTemplate.java
index 0c6002e..cc889de 100644
--- a/src/org/apache/http/entity/EntityTemplate.java
+++ b/src/org/apache/http/entity/EntityTemplate.java
@@ -44,7 +44,12 @@
  * @version $Revision: 496070 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class EntityTemplate extends AbstractHttpEntity {
 
     private final ContentProducer contentproducer;
diff --git a/src/org/apache/http/entity/FileEntity.java b/src/org/apache/http/entity/FileEntity.java
index a991058..77d4b64 100644
--- a/src/org/apache/http/entity/FileEntity.java
+++ b/src/org/apache/http/entity/FileEntity.java
@@ -45,7 +45,12 @@
  * @version $Revision: 604625 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class FileEntity extends AbstractHttpEntity implements Cloneable {
 
     protected final File file; 
diff --git a/src/org/apache/http/entity/HttpEntityWrapper.java b/src/org/apache/http/entity/HttpEntityWrapper.java
index 17a4149..2435389 100644
--- a/src/org/apache/http/entity/HttpEntityWrapper.java
+++ b/src/org/apache/http/entity/HttpEntityWrapper.java
@@ -48,7 +48,12 @@
  * @version $Revision: 496070 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpEntityWrapper implements HttpEntity {
 
     /** The wrapped entity. */
diff --git a/src/org/apache/http/entity/InputStreamEntity.java b/src/org/apache/http/entity/InputStreamEntity.java
index 6d33fe4..83747ef 100644
--- a/src/org/apache/http/entity/InputStreamEntity.java
+++ b/src/org/apache/http/entity/InputStreamEntity.java
@@ -43,7 +43,12 @@
  * @version $Revision: 617591 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class InputStreamEntity extends AbstractHttpEntity {
 
     private final static int BUFFER_SIZE = 2048;
diff --git a/src/org/apache/http/entity/SerializableEntity.java b/src/org/apache/http/entity/SerializableEntity.java
index 171977b..bb9f149 100644
--- a/src/org/apache/http/entity/SerializableEntity.java
+++ b/src/org/apache/http/entity/SerializableEntity.java
@@ -38,7 +38,13 @@
 import java.io.ObjectOutputStream;
 import java.io.OutputStream;
 import java.io.Serializable;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class SerializableEntity extends AbstractHttpEntity {
     
     private byte[] objSer;
diff --git a/src/org/apache/http/entity/StringEntity.java b/src/org/apache/http/entity/StringEntity.java
index cbc382b..5c5216c 100644
--- a/src/org/apache/http/entity/StringEntity.java
+++ b/src/org/apache/http/entity/StringEntity.java
@@ -47,7 +47,12 @@
  * @version $Revision: 618367 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class StringEntity extends AbstractHttpEntity implements Cloneable {
 
     protected final byte[] content;
diff --git a/src/org/apache/http/impl/AbstractHttpClientConnection.java b/src/org/apache/http/impl/AbstractHttpClientConnection.java
index ac3f4d1..3a81050 100644
--- a/src/org/apache/http/impl/AbstractHttpClientConnection.java
+++ b/src/org/apache/http/impl/AbstractHttpClientConnection.java
@@ -63,7 +63,12 @@
  * @version $Revision: 627457 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class AbstractHttpClientConnection implements HttpClientConnection {
 
     private final EntitySerializer entityserializer;
diff --git a/src/org/apache/http/impl/AbstractHttpServerConnection.java b/src/org/apache/http/impl/AbstractHttpServerConnection.java
index ef68ed3..940a347 100644
--- a/src/org/apache/http/impl/AbstractHttpServerConnection.java
+++ b/src/org/apache/http/impl/AbstractHttpServerConnection.java
@@ -62,7 +62,12 @@
  * @version $Revision: 618017 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class AbstractHttpServerConnection implements HttpServerConnection {
 
     private final EntitySerializer entityserializer;
diff --git a/src/org/apache/http/impl/DefaultConnectionReuseStrategy.java b/src/org/apache/http/impl/DefaultConnectionReuseStrategy.java
index da1d5fd..2c7c336 100644
--- a/src/org/apache/http/impl/DefaultConnectionReuseStrategy.java
+++ b/src/org/apache/http/impl/DefaultConnectionReuseStrategy.java
@@ -66,7 +66,12 @@
  * @version $Revision: 602537 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DefaultConnectionReuseStrategy
     implements ConnectionReuseStrategy {
 
diff --git a/src/org/apache/http/impl/DefaultHttpClientConnection.java b/src/org/apache/http/impl/DefaultHttpClientConnection.java
index c0a96f5..7c0e59e 100644
--- a/src/org/apache/http/impl/DefaultHttpClientConnection.java
+++ b/src/org/apache/http/impl/DefaultHttpClientConnection.java
@@ -45,7 +45,12 @@
  * @version $Revision: 561083 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DefaultHttpClientConnection extends SocketHttpClientConnection {
 
     public DefaultHttpClientConnection() {
diff --git a/src/org/apache/http/impl/DefaultHttpRequestFactory.java b/src/org/apache/http/impl/DefaultHttpRequestFactory.java
index dee36c9..a68437b 100644
--- a/src/org/apache/http/impl/DefaultHttpRequestFactory.java
+++ b/src/org/apache/http/impl/DefaultHttpRequestFactory.java
@@ -46,7 +46,12 @@
  * @version $Revision: 618367 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DefaultHttpRequestFactory implements HttpRequestFactory {
     
     private static final String[] RFC2616_COMMON_METHODS = {
diff --git a/src/org/apache/http/impl/DefaultHttpResponseFactory.java b/src/org/apache/http/impl/DefaultHttpResponseFactory.java
index 40a2c9a..b245d3a 100644
--- a/src/org/apache/http/impl/DefaultHttpResponseFactory.java
+++ b/src/org/apache/http/impl/DefaultHttpResponseFactory.java
@@ -51,7 +51,12 @@
  * @version $Revision: 618367 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DefaultHttpResponseFactory implements HttpResponseFactory {
 
     /** The catalog for looking up reason phrases. */
diff --git a/src/org/apache/http/impl/DefaultHttpServerConnection.java b/src/org/apache/http/impl/DefaultHttpServerConnection.java
index d296fc8..eb8faaa 100644
--- a/src/org/apache/http/impl/DefaultHttpServerConnection.java
+++ b/src/org/apache/http/impl/DefaultHttpServerConnection.java
@@ -45,7 +45,12 @@
  * @version $Revision: 561083 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DefaultHttpServerConnection extends SocketHttpServerConnection {
 
     public DefaultHttpServerConnection() {
diff --git a/src/org/apache/http/impl/EnglishReasonPhraseCatalog.java b/src/org/apache/http/impl/EnglishReasonPhraseCatalog.java
index f1aeee1..657b997 100644
--- a/src/org/apache/http/impl/EnglishReasonPhraseCatalog.java
+++ b/src/org/apache/http/impl/EnglishReasonPhraseCatalog.java
@@ -47,7 +47,12 @@
  * @author <a href="mailto:jsdever@apache.org">Jeff Dever</a>
  * 
  * @version $Revision: 505744 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class EnglishReasonPhraseCatalog
     implements ReasonPhraseCatalog {
 
diff --git a/src/org/apache/http/impl/HttpConnectionMetricsImpl.java b/src/org/apache/http/impl/HttpConnectionMetricsImpl.java
index 4f4eacf..f851d36 100644
--- a/src/org/apache/http/impl/HttpConnectionMetricsImpl.java
+++ b/src/org/apache/http/impl/HttpConnectionMetricsImpl.java
@@ -37,7 +37,12 @@
 
 /**
  * Implementation of the metrics interface.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpConnectionMetricsImpl implements HttpConnectionMetrics {
     
     public static final String REQUEST_COUNT = "http.request-count";
diff --git a/src/org/apache/http/impl/NoConnectionReuseStrategy.java b/src/org/apache/http/impl/NoConnectionReuseStrategy.java
index c7a5f73..717ca3e 100644
--- a/src/org/apache/http/impl/NoConnectionReuseStrategy.java
+++ b/src/org/apache/http/impl/NoConnectionReuseStrategy.java
@@ -44,7 +44,12 @@
  * @version $Revision: 502684 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class NoConnectionReuseStrategy implements ConnectionReuseStrategy {
 
     // default constructor
diff --git a/src/org/apache/http/impl/SocketHttpClientConnection.java b/src/org/apache/http/impl/SocketHttpClientConnection.java
index 1e551e0..97716b4 100644
--- a/src/org/apache/http/impl/SocketHttpClientConnection.java
+++ b/src/org/apache/http/impl/SocketHttpClientConnection.java
@@ -53,7 +53,12 @@
  * @version $Revision: 561083 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class SocketHttpClientConnection 
         extends AbstractHttpClientConnection implements HttpInetConnection {
 
diff --git a/src/org/apache/http/impl/SocketHttpServerConnection.java b/src/org/apache/http/impl/SocketHttpServerConnection.java
index cfa2bf9..4d95f74 100644
--- a/src/org/apache/http/impl/SocketHttpServerConnection.java
+++ b/src/org/apache/http/impl/SocketHttpServerConnection.java
@@ -53,7 +53,12 @@
  * @version $Revision: 561083 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class SocketHttpServerConnection extends 
         AbstractHttpServerConnection implements HttpInetConnection {
 
diff --git a/src/org/apache/http/impl/auth/AuthSchemeBase.java b/src/org/apache/http/impl/auth/AuthSchemeBase.java
index 689ce5d..ae33825 100644
--- a/src/org/apache/http/impl/auth/AuthSchemeBase.java
+++ b/src/org/apache/http/impl/auth/AuthSchemeBase.java
@@ -46,7 +46,12 @@
  * nor does it impose any specific way of responding to that challenge.
  *
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
 */
+@Deprecated
 public abstract class AuthSchemeBase implements AuthScheme {
 
     /**
diff --git a/src/org/apache/http/impl/auth/BasicScheme.java b/src/org/apache/http/impl/auth/BasicScheme.java
index 88ea110..0490d88 100644
--- a/src/org/apache/http/impl/auth/BasicScheme.java
+++ b/src/org/apache/http/impl/auth/BasicScheme.java
@@ -57,8 +57,13 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
 
+@Deprecated
 public class BasicScheme extends RFC2617Scheme {
     
     /** Whether the basic authentication process is complete */
diff --git a/src/org/apache/http/impl/auth/BasicSchemeFactory.java b/src/org/apache/http/impl/auth/BasicSchemeFactory.java
index c5d28b0..3a7ef83 100644
--- a/src/org/apache/http/impl/auth/BasicSchemeFactory.java
+++ b/src/org/apache/http/impl/auth/BasicSchemeFactory.java
@@ -40,7 +40,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicSchemeFactory implements AuthSchemeFactory {    
 
     public AuthScheme newInstance(final HttpParams params) {
diff --git a/src/org/apache/http/impl/auth/DigestScheme.java b/src/org/apache/http/impl/auth/DigestScheme.java
index cae05ee..63f1aaf 100644
--- a/src/org/apache/http/impl/auth/DigestScheme.java
+++ b/src/org/apache/http/impl/auth/DigestScheme.java
@@ -77,8 +77,13 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
 
+@Deprecated
 public class DigestScheme extends RFC2617Scheme {
     
     /**
diff --git a/src/org/apache/http/impl/auth/DigestSchemeFactory.java b/src/org/apache/http/impl/auth/DigestSchemeFactory.java
index 38f2e12..9bb4fa3 100644
--- a/src/org/apache/http/impl/auth/DigestSchemeFactory.java
+++ b/src/org/apache/http/impl/auth/DigestSchemeFactory.java
@@ -40,7 +40,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DigestSchemeFactory implements AuthSchemeFactory {    
 
     public AuthScheme newInstance(final HttpParams params) {
diff --git a/src/org/apache/http/impl/auth/NTLMEngine.java b/src/org/apache/http/impl/auth/NTLMEngine.java
index 7b6bf42..a7b072b 100644
--- a/src/org/apache/http/impl/auth/NTLMEngine.java
+++ b/src/org/apache/http/impl/auth/NTLMEngine.java
@@ -38,7 +38,12 @@
  * For details see <a href="http://davenport.sourceforge.net/ntlm.html">this resource</a>
  * 
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
 */
+@Deprecated
 public interface NTLMEngine {
 
     /**
diff --git a/src/org/apache/http/impl/auth/NTLMEngineException.java b/src/org/apache/http/impl/auth/NTLMEngineException.java
index 73baabc..5f66eae 100644
--- a/src/org/apache/http/impl/auth/NTLMEngineException.java
+++ b/src/org/apache/http/impl/auth/NTLMEngineException.java
@@ -38,7 +38,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class NTLMEngineException extends AuthenticationException {
 
     private static final long serialVersionUID = 6027981323731768824L;
diff --git a/src/org/apache/http/impl/auth/NTLMScheme.java b/src/org/apache/http/impl/auth/NTLMScheme.java
index 8dfdbba..5e91ca7 100644
--- a/src/org/apache/http/impl/auth/NTLMScheme.java
+++ b/src/org/apache/http/impl/auth/NTLMScheme.java
@@ -41,7 +41,13 @@
 import org.apache.http.impl.auth.AuthSchemeBase;
 import org.apache.http.message.BufferedHeader;
 import org.apache.http.util.CharArrayBuffer;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class NTLMScheme extends AuthSchemeBase {
 
     enum State {
diff --git a/src/org/apache/http/impl/auth/RFC2617Scheme.java b/src/org/apache/http/impl/auth/RFC2617Scheme.java
index 0ed0a28..5899322 100644
--- a/src/org/apache/http/impl/auth/RFC2617Scheme.java
+++ b/src/org/apache/http/impl/auth/RFC2617Scheme.java
@@ -47,7 +47,12 @@
  * to all authentication schemes defined in RFC 2617.
  *
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
 */
+@Deprecated
 public abstract class RFC2617Scheme extends AuthSchemeBase {
 
     /**
diff --git a/src/org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.java b/src/org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.java
index abd0a66..5d06288 100644
--- a/src/org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.java
+++ b/src/org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.java
@@ -37,7 +37,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class UnsupportedDigestAlgorithmException extends RuntimeException {
 
     private static final long serialVersionUID = 319558534317118022L;
diff --git a/src/org/apache/http/impl/client/AbstractAuthenticationHandler.java b/src/org/apache/http/impl/client/AbstractAuthenticationHandler.java
index 57699d5..887e870 100644
--- a/src/org/apache/http/impl/client/AbstractAuthenticationHandler.java
+++ b/src/org/apache/http/impl/client/AbstractAuthenticationHandler.java
@@ -54,7 +54,12 @@
 
 /**
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class AbstractAuthenticationHandler implements AuthenticationHandler {
 
     private final Log log = LogFactory.getLog(getClass());
diff --git a/src/org/apache/http/impl/client/AbstractHttpClient.java b/src/org/apache/http/impl/client/AbstractHttpClient.java
index 3a1b838..20ec875 100644
--- a/src/org/apache/http/impl/client/AbstractHttpClient.java
+++ b/src/org/apache/http/impl/client/AbstractHttpClient.java
@@ -78,7 +78,12 @@
  * @version   $Revision: 677250 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class AbstractHttpClient implements HttpClient {
 
     private final Log log = LogFactory.getLog(getClass());
diff --git a/src/org/apache/http/impl/client/BasicCookieStore.java b/src/org/apache/http/impl/client/BasicCookieStore.java
index 9970961..a47ea33 100644
--- a/src/org/apache/http/impl/client/BasicCookieStore.java
+++ b/src/org/apache/http/impl/client/BasicCookieStore.java
@@ -54,7 +54,12 @@
  * @author <a href="mailto:adrian@intencha.com">Adrian Sutton</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicCookieStore implements CookieStore {
 
     private final ArrayList<Cookie> cookies;
diff --git a/src/org/apache/http/impl/client/BasicCredentialsProvider.java b/src/org/apache/http/impl/client/BasicCredentialsProvider.java
index 02427ea..5f59f6d 100644
--- a/src/org/apache/http/impl/client/BasicCredentialsProvider.java
+++ b/src/org/apache/http/impl/client/BasicCredentialsProvider.java
@@ -49,7 +49,12 @@
  * @author <a href="mailto:adrian@intencha.com">Adrian Sutton</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicCredentialsProvider implements CredentialsProvider {
 
     private final HashMap<AuthScope, Credentials> credMap;
diff --git a/src/org/apache/http/impl/client/BasicResponseHandler.java b/src/org/apache/http/impl/client/BasicResponseHandler.java
index f17d30d..e13eede 100644
--- a/src/org/apache/http/impl/client/BasicResponseHandler.java
+++ b/src/org/apache/http/impl/client/BasicResponseHandler.java
@@ -55,7 +55,12 @@
  * @version $Revision: 677240 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicResponseHandler implements ResponseHandler<String> {
 
     /**
diff --git a/src/org/apache/http/impl/client/ClientParamsStack.java b/src/org/apache/http/impl/client/ClientParamsStack.java
index a017e5d..e70d8b7 100644
--- a/src/org/apache/http/impl/client/ClientParamsStack.java
+++ b/src/org/apache/http/impl/client/ClientParamsStack.java
@@ -74,7 +74,12 @@
  *
  *
  * @version $Revision: 673450 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ClientParamsStack extends AbstractHttpParams {
 
     private final Log log = LogFactory.getLog(getClass());
diff --git a/src/org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.java b/src/org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.java
index c7641d2..93448e3 100644
--- a/src/org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.java
+++ b/src/org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.java
@@ -50,7 +50,12 @@
  * @version $Revision: $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DefaultConnectionKeepAliveStrategy implements ConnectionKeepAliveStrategy {
     
     public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
diff --git a/src/org/apache/http/impl/client/DefaultHttpClient.java b/src/org/apache/http/impl/client/DefaultHttpClient.java
index 31cda56..3380bef 100644
--- a/src/org/apache/http/impl/client/DefaultHttpClient.java
+++ b/src/org/apache/http/impl/client/DefaultHttpClient.java
@@ -107,7 +107,12 @@
  * @version   $Revision: 677250 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DefaultHttpClient extends AbstractHttpClient {
 
 
diff --git a/src/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.java b/src/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.java
index 7f66990..50c9b99 100644
--- a/src/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.java
+++ b/src/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.java
@@ -47,7 +47,12 @@
  * 
  * @author Michael Becke
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DefaultHttpRequestRetryHandler implements HttpRequestRetryHandler {
 
     /** the number of times a method will be retried */
diff --git a/src/org/apache/http/impl/client/DefaultProxyAuthenticationHandler.java b/src/org/apache/http/impl/client/DefaultProxyAuthenticationHandler.java
index c188da8..bea3ae3 100644
--- a/src/org/apache/http/impl/client/DefaultProxyAuthenticationHandler.java
+++ b/src/org/apache/http/impl/client/DefaultProxyAuthenticationHandler.java
@@ -42,7 +42,12 @@
 
 /**
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DefaultProxyAuthenticationHandler extends AbstractAuthenticationHandler {
 
     public DefaultProxyAuthenticationHandler() {
diff --git a/src/org/apache/http/impl/client/DefaultRedirectHandler.java b/src/org/apache/http/impl/client/DefaultRedirectHandler.java
index 0811b28..ad53134 100644
--- a/src/org/apache/http/impl/client/DefaultRedirectHandler.java
+++ b/src/org/apache/http/impl/client/DefaultRedirectHandler.java
@@ -61,7 +61,12 @@
  * @version $Revision: 673450 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DefaultRedirectHandler implements RedirectHandler {
 
     private final Log log = LogFactory.getLog(getClass());
diff --git a/src/org/apache/http/impl/client/DefaultRequestDirector.java b/src/org/apache/http/impl/client/DefaultRequestDirector.java
index 9f6d832..9aafa85 100644
--- a/src/org/apache/http/impl/client/DefaultRequestDirector.java
+++ b/src/org/apache/http/impl/client/DefaultRequestDirector.java
@@ -106,7 +106,12 @@
  * @version $Revision: 676023 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DefaultRequestDirector implements RequestDirector {
 
     private final Log log = LogFactory.getLog(getClass());
diff --git a/src/org/apache/http/impl/client/DefaultTargetAuthenticationHandler.java b/src/org/apache/http/impl/client/DefaultTargetAuthenticationHandler.java
index 5794549..770e95f 100644
--- a/src/org/apache/http/impl/client/DefaultTargetAuthenticationHandler.java
+++ b/src/org/apache/http/impl/client/DefaultTargetAuthenticationHandler.java
@@ -42,7 +42,12 @@
 
 /**
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DefaultTargetAuthenticationHandler extends AbstractAuthenticationHandler {
 
     public DefaultTargetAuthenticationHandler() {
diff --git a/src/org/apache/http/impl/client/DefaultUserTokenHandler.java b/src/org/apache/http/impl/client/DefaultUserTokenHandler.java
index c8a409f..f8332f6 100644
--- a/src/org/apache/http/impl/client/DefaultUserTokenHandler.java
+++ b/src/org/apache/http/impl/client/DefaultUserTokenHandler.java
@@ -42,7 +42,13 @@
 import org.apache.http.conn.ManagedClientConnection;
 import org.apache.http.protocol.ExecutionContext;
 import org.apache.http.protocol.HttpContext;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class DefaultUserTokenHandler implements UserTokenHandler {
 
     public Object getUserToken(final HttpContext context) {
diff --git a/src/org/apache/http/impl/client/EntityEnclosingRequestWrapper.java b/src/org/apache/http/impl/client/EntityEnclosingRequestWrapper.java
index 05098cf..40be485 100644
--- a/src/org/apache/http/impl/client/EntityEnclosingRequestWrapper.java
+++ b/src/org/apache/http/impl/client/EntityEnclosingRequestWrapper.java
@@ -50,7 +50,12 @@
  * @version $Revision: 674186 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class EntityEnclosingRequestWrapper extends RequestWrapper 
     implements HttpEntityEnclosingRequest {
     
diff --git a/src/org/apache/http/impl/client/RedirectLocations.java b/src/org/apache/http/impl/client/RedirectLocations.java
index d5c47e7..a3a5412 100644
--- a/src/org/apache/http/impl/client/RedirectLocations.java
+++ b/src/org/apache/http/impl/client/RedirectLocations.java
@@ -37,7 +37,12 @@
 
 /**
  * A collection of URIs that were used as redirects.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RedirectLocations {
 
     private final Set<URI> uris;
diff --git a/src/org/apache/http/impl/client/RequestWrapper.java b/src/org/apache/http/impl/client/RequestWrapper.java
index 04a641d..218a9e5 100644
--- a/src/org/apache/http/impl/client/RequestWrapper.java
+++ b/src/org/apache/http/impl/client/RequestWrapper.java
@@ -56,7 +56,12 @@
  * @version $Revision: 674186 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RequestWrapper extends AbstractHttpMessage implements HttpUriRequest {
     
     private final HttpRequest original;
diff --git a/src/org/apache/http/impl/client/RoutedRequest.java b/src/org/apache/http/impl/client/RoutedRequest.java
index 954ebe5..102a782 100644
--- a/src/org/apache/http/impl/client/RoutedRequest.java
+++ b/src/org/apache/http/impl/client/RoutedRequest.java
@@ -44,7 +44,12 @@
  * @version $Revision: 645846 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RoutedRequest {
 
     protected final RequestWrapper request;
diff --git a/src/org/apache/http/impl/client/TunnelRefusedException.java b/src/org/apache/http/impl/client/TunnelRefusedException.java
index 601626f..485d221 100644
--- a/src/org/apache/http/impl/client/TunnelRefusedException.java
+++ b/src/org/apache/http/impl/client/TunnelRefusedException.java
@@ -33,7 +33,13 @@
 
 import org.apache.http.HttpException;
 import org.apache.http.HttpResponse;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class TunnelRefusedException extends HttpException {
 
     private static final long serialVersionUID = -8646722842745617323L;
diff --git a/src/org/apache/http/impl/conn/AbstractClientConnAdapter.java b/src/org/apache/http/impl/conn/AbstractClientConnAdapter.java
index 5cbe010..e449f94 100644
--- a/src/org/apache/http/impl/conn/AbstractClientConnAdapter.java
+++ b/src/org/apache/http/impl/conn/AbstractClientConnAdapter.java
@@ -76,7 +76,12 @@
  * @version   $Revision: 672969 $ $Date: 2008-06-30 18:09:50 -0700 (Mon, 30 Jun 2008) $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class AbstractClientConnAdapter
     implements ManagedClientConnection {
 
diff --git a/src/org/apache/http/impl/conn/AbstractPoolEntry.java b/src/org/apache/http/impl/conn/AbstractPoolEntry.java
index 0e7d95f..2925f58 100644
--- a/src/org/apache/http/impl/conn/AbstractPoolEntry.java
+++ b/src/org/apache/http/impl/conn/AbstractPoolEntry.java
@@ -65,7 +65,12 @@
  * @version   $Revision: 658775 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class AbstractPoolEntry {
 
     /** The connection operator. */
diff --git a/src/org/apache/http/impl/conn/AbstractPooledConnAdapter.java b/src/org/apache/http/impl/conn/AbstractPooledConnAdapter.java
index 2c5fd30..a8f2589 100644
--- a/src/org/apache/http/impl/conn/AbstractPooledConnAdapter.java
+++ b/src/org/apache/http/impl/conn/AbstractPooledConnAdapter.java
@@ -59,7 +59,12 @@
  * @version   $Revision: 658775 $ $Date: 2008-05-21 10:30:45 -0700 (Wed, 21 May 2008) $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class AbstractPooledConnAdapter extends AbstractClientConnAdapter {
 
     /** The wrapped pool entry. */
diff --git a/src/org/apache/http/impl/conn/DefaultClientConnection.java b/src/org/apache/http/impl/conn/DefaultClientConnection.java
index a41f57a..12f6304 100644
--- a/src/org/apache/http/impl/conn/DefaultClientConnection.java
+++ b/src/org/apache/http/impl/conn/DefaultClientConnection.java
@@ -62,7 +62,12 @@
  * @version   $Revision: 673450 $ $Date: 2008-07-02 10:35:05 -0700 (Wed, 02 Jul 2008) $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DefaultClientConnection extends SocketHttpClientConnection
     implements OperatedClientConnection {
 
diff --git a/src/org/apache/http/impl/conn/DefaultClientConnectionOperator.java b/src/org/apache/http/impl/conn/DefaultClientConnectionOperator.java
index d208853..9567eb1 100644
--- a/src/org/apache/http/impl/conn/DefaultClientConnectionOperator.java
+++ b/src/org/apache/http/impl/conn/DefaultClientConnectionOperator.java
@@ -66,7 +66,12 @@
  * @version   $Revision: 652193 $ $Date: 2008-04-29 17:10:36 -0700 (Tue, 29 Apr 2008) $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DefaultClientConnectionOperator
     implements ClientConnectionOperator {
 
diff --git a/src/org/apache/http/impl/conn/DefaultHttpRoutePlanner.java b/src/org/apache/http/impl/conn/DefaultHttpRoutePlanner.java
index 90fd55f..c5e7c06 100644
--- a/src/org/apache/http/impl/conn/DefaultHttpRoutePlanner.java
+++ b/src/org/apache/http/impl/conn/DefaultHttpRoutePlanner.java
@@ -53,7 +53,12 @@
  * {@link org.apache.http.conn.params.ConnRoutePNames parameters}.
  * It will not make use of any Java system properties,
  * nor of system or browser proxy settings.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DefaultHttpRoutePlanner implements HttpRoutePlanner {
 
     /** The scheme registry. */
diff --git a/src/org/apache/http/impl/conn/DefaultResponseParser.java b/src/org/apache/http/impl/conn/DefaultResponseParser.java
index f817a10..8e31c86 100644
--- a/src/org/apache/http/impl/conn/DefaultResponseParser.java
+++ b/src/org/apache/http/impl/conn/DefaultResponseParser.java
@@ -46,7 +46,13 @@
 import org.apache.http.message.ParserCursor;
 import org.apache.http.params.HttpParams;
 import org.apache.http.util.CharArrayBuffer;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class DefaultResponseParser extends AbstractMessageParser {
     
     private final HttpResponseFactory responseFactory;
diff --git a/src/org/apache/http/impl/conn/IdleConnectionHandler.java b/src/org/apache/http/impl/conn/IdleConnectionHandler.java
index 2cacda3..4399bbc 100644
--- a/src/org/apache/http/impl/conn/IdleConnectionHandler.java
+++ b/src/org/apache/http/impl/conn/IdleConnectionHandler.java
@@ -48,7 +48,12 @@
  * @see org.apache.http.conn.ClientConnectionManager#closeIdleConnections
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class IdleConnectionHandler {
 
     private final Log log = LogFactory.getLog(getClass());
diff --git a/src/org/apache/http/impl/conn/LoggingSessionInputBuffer.java b/src/org/apache/http/impl/conn/LoggingSessionInputBuffer.java
index 4f6477e..20a99d6 100644
--- a/src/org/apache/http/impl/conn/LoggingSessionInputBuffer.java
+++ b/src/org/apache/http/impl/conn/LoggingSessionInputBuffer.java
@@ -44,7 +44,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class LoggingSessionInputBuffer implements SessionInputBuffer {
      
     /** Original session input buffer. */
diff --git a/src/org/apache/http/impl/conn/LoggingSessionOutputBuffer.java b/src/org/apache/http/impl/conn/LoggingSessionOutputBuffer.java
index 1afab7d..cd2036c 100644
--- a/src/org/apache/http/impl/conn/LoggingSessionOutputBuffer.java
+++ b/src/org/apache/http/impl/conn/LoggingSessionOutputBuffer.java
@@ -42,7 +42,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class LoggingSessionOutputBuffer implements SessionOutputBuffer {
 
     /** Original data transmitter. */
diff --git a/src/org/apache/http/impl/conn/ProxySelectorRoutePlanner.java b/src/org/apache/http/impl/conn/ProxySelectorRoutePlanner.java
index daa7227..c8d7390 100644
--- a/src/org/apache/http/impl/conn/ProxySelectorRoutePlanner.java
+++ b/src/org/apache/http/impl/conn/ProxySelectorRoutePlanner.java
@@ -63,7 +63,12 @@
  * {@link org.apache.http.conn.params.ConnRoutePNames parameters},
  * though not the {@link
  * org.apache.http.conn.params.ConnRoutePNames#DEFAULT_PROXY DEFAULT_PROXY}.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ProxySelectorRoutePlanner implements HttpRoutePlanner {
     
     /** The scheme registry. */
diff --git a/src/org/apache/http/impl/conn/SingleClientConnManager.java b/src/org/apache/http/impl/conn/SingleClientConnManager.java
index a15cf86..55e9757 100644
--- a/src/org/apache/http/impl/conn/SingleClientConnManager.java
+++ b/src/org/apache/http/impl/conn/SingleClientConnManager.java
@@ -68,7 +68,12 @@
  * @version   $Revision: 673450 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class SingleClientConnManager implements ClientConnectionManager {
 
     private final Log log = LogFactory.getLog(getClass());
diff --git a/src/org/apache/http/impl/conn/Wire.java b/src/org/apache/http/impl/conn/Wire.java
index 147b7f5..bc019eb 100644
--- a/src/org/apache/http/impl/conn/Wire.java
+++ b/src/org/apache/http/impl/conn/Wire.java
@@ -41,7 +41,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class Wire {
 
     private final Log log;
diff --git a/src/org/apache/http/impl/conn/tsccm/AbstractConnPool.java b/src/org/apache/http/impl/conn/tsccm/AbstractConnPool.java
index 2b37d72..25ed0da 100644
--- a/src/org/apache/http/impl/conn/tsccm/AbstractConnPool.java
+++ b/src/org/apache/http/impl/conn/tsccm/AbstractConnPool.java
@@ -54,7 +54,12 @@
  * The abstract pool includes a {@link #poolLock}, which is used to
  * synchronize access to the internal pool datastructures.
  * Don't use <code>synchronized</code> for that purpose!
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class AbstractConnPool implements RefQueueHandler {
 
     private final Log log = LogFactory.getLog(getClass());
diff --git a/src/org/apache/http/impl/conn/tsccm/BasicPoolEntry.java b/src/org/apache/http/impl/conn/tsccm/BasicPoolEntry.java
index dded360..750eade 100644
--- a/src/org/apache/http/impl/conn/tsccm/BasicPoolEntry.java
+++ b/src/org/apache/http/impl/conn/tsccm/BasicPoolEntry.java
@@ -42,7 +42,12 @@
 
 /**
  * Basic implementation of a connection pool entry.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicPoolEntry extends AbstractPoolEntry {
 
     /**
diff --git a/src/org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.java b/src/org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.java
index 32df8a5..f509e74 100644
--- a/src/org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.java
+++ b/src/org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.java
@@ -42,7 +42,12 @@
  * A weak reference to a {@link BasicPoolEntry BasicPoolEntry}.
  * This reference explicitly keeps the planned route, so the connection
  * can be reclaimed if it is lost to garbage collection.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicPoolEntryRef extends WeakReference<BasicPoolEntry> {
 
     /** The planned route of the entry. */
diff --git a/src/org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.java b/src/org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.java
index 29455d0..dbd2db4 100644
--- a/src/org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.java
+++ b/src/org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.java
@@ -41,7 +41,12 @@
  * A connection wrapper and callback handler.
  * All connections given out by the manager are wrappers which
  * can be {@link #detach detach}ed to prevent further use on release.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicPooledConnAdapter extends AbstractPooledConnAdapter {
 
     /**
diff --git a/src/org/apache/http/impl/conn/tsccm/ConnPoolByRoute.java b/src/org/apache/http/impl/conn/tsccm/ConnPoolByRoute.java
index cf59129..16f972d 100644
--- a/src/org/apache/http/impl/conn/tsccm/ConnPoolByRoute.java
+++ b/src/org/apache/http/impl/conn/tsccm/ConnPoolByRoute.java
@@ -65,7 +65,12 @@
  * @author <a href="mailto:rolandw at apache.org">Roland Weber</a>
  * @author <a href="mailto:becke@u.washington.edu">Michael Becke</a>
  * @author and others
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ConnPoolByRoute extends AbstractConnPool {
         
     private final Log log = LogFactory.getLog(getClass());
diff --git a/src/org/apache/http/impl/conn/tsccm/PoolEntryRequest.java b/src/org/apache/http/impl/conn/tsccm/PoolEntryRequest.java
index faf5e3b..eeebbe7 100644
--- a/src/org/apache/http/impl/conn/tsccm/PoolEntryRequest.java
+++ b/src/org/apache/http/impl/conn/tsccm/PoolEntryRequest.java
@@ -36,7 +36,12 @@
 
 /**
  * Encapsulates a request for a {@link BasicPoolEntry}.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface PoolEntryRequest {
 
     /**
diff --git a/src/org/apache/http/impl/conn/tsccm/RefQueueHandler.java b/src/org/apache/http/impl/conn/tsccm/RefQueueHandler.java
index 3af28cc..95e4eaf 100644
--- a/src/org/apache/http/impl/conn/tsccm/RefQueueHandler.java
+++ b/src/org/apache/http/impl/conn/tsccm/RefQueueHandler.java
@@ -35,7 +35,12 @@
 
 /**
  * Callback handler for {@link RefQueueWorker RefQueueWorker}.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface RefQueueHandler {
 
     /**
diff --git a/src/org/apache/http/impl/conn/tsccm/RefQueueWorker.java b/src/org/apache/http/impl/conn/tsccm/RefQueueWorker.java
index 9ad5c77..4e0ffe6 100644
--- a/src/org/apache/http/impl/conn/tsccm/RefQueueWorker.java
+++ b/src/org/apache/http/impl/conn/tsccm/RefQueueWorker.java
@@ -46,7 +46,12 @@
  * If that feature is used, a daemon thread should be executing
  * this worker. It will pick up the queued references and pass them
  * on to a handler for appropriate processing.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RefQueueWorker implements Runnable {
 
     private final Log log = LogFactory.getLog(getClass());
diff --git a/src/org/apache/http/impl/conn/tsccm/RouteSpecificPool.java b/src/org/apache/http/impl/conn/tsccm/RouteSpecificPool.java
index 5c63933..3c50b4f 100644
--- a/src/org/apache/http/impl/conn/tsccm/RouteSpecificPool.java
+++ b/src/org/apache/http/impl/conn/tsccm/RouteSpecificPool.java
@@ -46,7 +46,12 @@
  * A connection sub-pool for a specific route, used by {@link ConnPoolByRoute}.
  * The methods in this class are unsynchronized. It is expected that the
  * containing pool takes care of synchronization.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RouteSpecificPool {
 
     private final Log log = LogFactory.getLog(getClass());
diff --git a/src/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.java b/src/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.java
index b6d907d..e9c11b0 100644
--- a/src/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.java
+++ b/src/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.java
@@ -65,7 +65,12 @@
  * @version $Revision: 673450 $ $Date: 2008-07-02 10:35:05 -0700 (Wed, 02 Jul 2008) $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ThreadSafeClientConnManager implements ClientConnectionManager {
 
     private final Log log = LogFactory.getLog(getClass());
diff --git a/src/org/apache/http/impl/conn/tsccm/WaitingThread.java b/src/org/apache/http/impl/conn/tsccm/WaitingThread.java
index a50e11f..90a757b 100644
--- a/src/org/apache/http/impl/conn/tsccm/WaitingThread.java
+++ b/src/org/apache/http/impl/conn/tsccm/WaitingThread.java
@@ -46,7 +46,12 @@
  * Instances of this class do <i>not</i> synchronize access!
  *
  * @author <a href="mailto:rolandw at apache.org">Roland Weber</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class WaitingThread {
 
     /** The condition on which the thread is waiting. */
diff --git a/src/org/apache/http/impl/conn/tsccm/WaitingThreadAborter.java b/src/org/apache/http/impl/conn/tsccm/WaitingThreadAborter.java
index 1844457..60f923d 100644
--- a/src/org/apache/http/impl/conn/tsccm/WaitingThreadAborter.java
+++ b/src/org/apache/http/impl/conn/tsccm/WaitingThreadAborter.java
@@ -29,7 +29,13 @@
  */
 
 package org.apache.http.impl.conn.tsccm;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 /** A simple class that can interrupt a {@link WaitingThread}. */
 public class WaitingThreadAborter {
     
diff --git a/src/org/apache/http/impl/cookie/AbstractCookieAttributeHandler.java b/src/org/apache/http/impl/cookie/AbstractCookieAttributeHandler.java
index 1aa4d2c..5547862 100644
--- a/src/org/apache/http/impl/cookie/AbstractCookieAttributeHandler.java
+++ b/src/org/apache/http/impl/cookie/AbstractCookieAttributeHandler.java
@@ -34,7 +34,13 @@
 import org.apache.http.cookie.CookieAttributeHandler;
 import org.apache.http.cookie.CookieOrigin;
 import org.apache.http.cookie.MalformedCookieException;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public abstract class AbstractCookieAttributeHandler implements CookieAttributeHandler {
 
     public void validate(final Cookie cookie, final CookieOrigin origin) 
diff --git a/src/org/apache/http/impl/cookie/AbstractCookieSpec.java b/src/org/apache/http/impl/cookie/AbstractCookieSpec.java
index 3e47a4d..5083222 100644
--- a/src/org/apache/http/impl/cookie/AbstractCookieSpec.java
+++ b/src/org/apache/http/impl/cookie/AbstractCookieSpec.java
@@ -46,7 +46,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0 
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class AbstractCookieSpec implements CookieSpec {
     
     /**
diff --git a/src/org/apache/http/impl/cookie/BasicClientCookie.java b/src/org/apache/http/impl/cookie/BasicClientCookie.java
index 6ec6c2b..c6d2ef3 100644
--- a/src/org/apache/http/impl/cookie/BasicClientCookie.java
+++ b/src/org/apache/http/impl/cookie/BasicClientCookie.java
@@ -56,7 +56,12 @@
  * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
  * 
  * @version $Revision: 659191 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicClientCookie implements SetCookie, ClientCookie, Cloneable {
 
     /**
diff --git a/src/org/apache/http/impl/cookie/BasicClientCookie2.java b/src/org/apache/http/impl/cookie/BasicClientCookie2.java
index 86ec60d..e882de8 100644
--- a/src/org/apache/http/impl/cookie/BasicClientCookie2.java
+++ b/src/org/apache/http/impl/cookie/BasicClientCookie2.java
@@ -41,7 +41,12 @@
  * a session as specified by RFC2965.
  * 
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicClientCookie2 extends BasicClientCookie implements SetCookie2 {
 
     private String commentURL;
diff --git a/src/org/apache/http/impl/cookie/BasicCommentHandler.java b/src/org/apache/http/impl/cookie/BasicCommentHandler.java
index ce8baea..b1b5b06 100644
--- a/src/org/apache/http/impl/cookie/BasicCommentHandler.java
+++ b/src/org/apache/http/impl/cookie/BasicCommentHandler.java
@@ -32,7 +32,13 @@
 
 import org.apache.http.cookie.MalformedCookieException;
 import org.apache.http.cookie.SetCookie;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class BasicCommentHandler extends AbstractCookieAttributeHandler {
 
     public BasicCommentHandler() {
diff --git a/src/org/apache/http/impl/cookie/BasicDomainHandler.java b/src/org/apache/http/impl/cookie/BasicDomainHandler.java
index 267faf8..25b7918 100644
--- a/src/org/apache/http/impl/cookie/BasicDomainHandler.java
+++ b/src/org/apache/http/impl/cookie/BasicDomainHandler.java
@@ -35,7 +35,13 @@
 import org.apache.http.cookie.CookieOrigin;
 import org.apache.http.cookie.MalformedCookieException;
 import org.apache.http.cookie.SetCookie;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class BasicDomainHandler implements CookieAttributeHandler {
 
     public BasicDomainHandler() {
diff --git a/src/org/apache/http/impl/cookie/BasicExpiresHandler.java b/src/org/apache/http/impl/cookie/BasicExpiresHandler.java
index a53519e..55c0121 100644
--- a/src/org/apache/http/impl/cookie/BasicExpiresHandler.java
+++ b/src/org/apache/http/impl/cookie/BasicExpiresHandler.java
@@ -33,7 +33,13 @@
 import org.apache.http.cookie.MalformedCookieException;
 import org.apache.http.cookie.SetCookie;
 
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class BasicExpiresHandler extends AbstractCookieAttributeHandler {
 
     /** Valid date patterns */
diff --git a/src/org/apache/http/impl/cookie/BasicMaxAgeHandler.java b/src/org/apache/http/impl/cookie/BasicMaxAgeHandler.java
index 92a5c7d..ba462bc 100644
--- a/src/org/apache/http/impl/cookie/BasicMaxAgeHandler.java
+++ b/src/org/apache/http/impl/cookie/BasicMaxAgeHandler.java
@@ -34,7 +34,13 @@
 
 import org.apache.http.cookie.MalformedCookieException;
 import org.apache.http.cookie.SetCookie;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class BasicMaxAgeHandler extends AbstractCookieAttributeHandler {
 
     public BasicMaxAgeHandler() {
diff --git a/src/org/apache/http/impl/cookie/BasicPathHandler.java b/src/org/apache/http/impl/cookie/BasicPathHandler.java
index 43a12c8..9245669 100644
--- a/src/org/apache/http/impl/cookie/BasicPathHandler.java
+++ b/src/org/apache/http/impl/cookie/BasicPathHandler.java
@@ -35,7 +35,13 @@
 import org.apache.http.cookie.CookieOrigin;
 import org.apache.http.cookie.MalformedCookieException;
 import org.apache.http.cookie.SetCookie;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class BasicPathHandler implements CookieAttributeHandler {
 
     public BasicPathHandler() {
diff --git a/src/org/apache/http/impl/cookie/BasicSecureHandler.java b/src/org/apache/http/impl/cookie/BasicSecureHandler.java
index 9100b9c..3555d19 100644
--- a/src/org/apache/http/impl/cookie/BasicSecureHandler.java
+++ b/src/org/apache/http/impl/cookie/BasicSecureHandler.java
@@ -34,7 +34,13 @@
 import org.apache.http.cookie.CookieOrigin;
 import org.apache.http.cookie.MalformedCookieException;
 import org.apache.http.cookie.SetCookie;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class BasicSecureHandler extends AbstractCookieAttributeHandler {
 
     public BasicSecureHandler() {
diff --git a/src/org/apache/http/impl/cookie/BestMatchSpec.java b/src/org/apache/http/impl/cookie/BestMatchSpec.java
index e33fec3..5d15ca1 100644
--- a/src/org/apache/http/impl/cookie/BestMatchSpec.java
+++ b/src/org/apache/http/impl/cookie/BestMatchSpec.java
@@ -47,7 +47,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BestMatchSpec implements CookieSpec {
 
     private final String[] datepatterns;
diff --git a/src/org/apache/http/impl/cookie/BestMatchSpecFactory.java b/src/org/apache/http/impl/cookie/BestMatchSpecFactory.java
index cb632bb..c08a73f 100644
--- a/src/org/apache/http/impl/cookie/BestMatchSpecFactory.java
+++ b/src/org/apache/http/impl/cookie/BestMatchSpecFactory.java
@@ -41,7 +41,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BestMatchSpecFactory implements CookieSpecFactory {    
 
     public CookieSpec newInstance(final HttpParams params) {
diff --git a/src/org/apache/http/impl/cookie/BrowserCompatSpec.java b/src/org/apache/http/impl/cookie/BrowserCompatSpec.java
index d7bc0da..657c36d 100644
--- a/src/org/apache/http/impl/cookie/BrowserCompatSpec.java
+++ b/src/org/apache/http/impl/cookie/BrowserCompatSpec.java
@@ -55,7 +55,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0 
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BrowserCompatSpec extends CookieSpecBase {
     
     /** Valid date patterns used per default */
diff --git a/src/org/apache/http/impl/cookie/BrowserCompatSpecFactory.java b/src/org/apache/http/impl/cookie/BrowserCompatSpecFactory.java
index 71c0c05..e482969 100644
--- a/src/org/apache/http/impl/cookie/BrowserCompatSpecFactory.java
+++ b/src/org/apache/http/impl/cookie/BrowserCompatSpecFactory.java
@@ -41,7 +41,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BrowserCompatSpecFactory implements CookieSpecFactory {    
 
     public CookieSpec newInstance(final HttpParams params) {
diff --git a/src/org/apache/http/impl/cookie/CookieSpecBase.java b/src/org/apache/http/impl/cookie/CookieSpecBase.java
index 8e70bb1..af6ed6d 100644
--- a/src/org/apache/http/impl/cookie/CookieSpecBase.java
+++ b/src/org/apache/http/impl/cookie/CookieSpecBase.java
@@ -48,7 +48,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0 
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class CookieSpecBase extends AbstractCookieSpec {
     
     protected static String getDefaultPath(final CookieOrigin origin) {
diff --git a/src/org/apache/http/impl/cookie/DateParseException.java b/src/org/apache/http/impl/cookie/DateParseException.java
index c80b669..7c3d19e 100644
--- a/src/org/apache/http/impl/cookie/DateParseException.java
+++ b/src/org/apache/http/impl/cookie/DateParseException.java
@@ -38,7 +38,12 @@
  * @see DateUtils
  * 
  * @author Michael Becke
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class DateParseException extends Exception {
 
     private static final long serialVersionUID = 4417696455000643370L;
diff --git a/src/org/apache/http/impl/cookie/DateUtils.java b/src/org/apache/http/impl/cookie/DateUtils.java
index a0a056c..db6d98a 100644
--- a/src/org/apache/http/impl/cookie/DateUtils.java
+++ b/src/org/apache/http/impl/cookie/DateUtils.java
@@ -48,7 +48,12 @@
  * 
  * @author Christopher Brown
  * @author Michael Becke
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class DateUtils {
 
     /**
diff --git a/src/org/apache/http/impl/cookie/NetscapeDomainHandler.java b/src/org/apache/http/impl/cookie/NetscapeDomainHandler.java
index 8b785ae..6b83c77 100644
--- a/src/org/apache/http/impl/cookie/NetscapeDomainHandler.java
+++ b/src/org/apache/http/impl/cookie/NetscapeDomainHandler.java
@@ -36,7 +36,13 @@
 import org.apache.http.cookie.Cookie;
 import org.apache.http.cookie.CookieOrigin;
 import org.apache.http.cookie.MalformedCookieException;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class NetscapeDomainHandler extends BasicDomainHandler {
 
     public NetscapeDomainHandler() {
diff --git a/src/org/apache/http/impl/cookie/NetscapeDraftHeaderParser.java b/src/org/apache/http/impl/cookie/NetscapeDraftHeaderParser.java
index ca6b7fa..af9615d 100644
--- a/src/org/apache/http/impl/cookie/NetscapeDraftHeaderParser.java
+++ b/src/org/apache/http/impl/cookie/NetscapeDraftHeaderParser.java
@@ -41,7 +41,13 @@
 import org.apache.http.message.BasicHeaderValueParser;
 import org.apache.http.message.ParserCursor;
 import org.apache.http.util.CharArrayBuffer;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class NetscapeDraftHeaderParser {
 
     public final static NetscapeDraftHeaderParser DEFAULT = new NetscapeDraftHeaderParser();
diff --git a/src/org/apache/http/impl/cookie/NetscapeDraftSpec.java b/src/org/apache/http/impl/cookie/NetscapeDraftSpec.java
index 3bc4f9f..58bbe30 100644
--- a/src/org/apache/http/impl/cookie/NetscapeDraftSpec.java
+++ b/src/org/apache/http/impl/cookie/NetscapeDraftSpec.java
@@ -61,7 +61,12 @@
  * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
  * 
  * @since 4.0 
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class NetscapeDraftSpec extends CookieSpecBase {
 
     protected static final String EXPIRES_PATTERN = "EEE, dd-MMM-yyyy HH:mm:ss z";
diff --git a/src/org/apache/http/impl/cookie/NetscapeDraftSpecFactory.java b/src/org/apache/http/impl/cookie/NetscapeDraftSpecFactory.java
index 0dcb187..8fbf8a8 100644
--- a/src/org/apache/http/impl/cookie/NetscapeDraftSpecFactory.java
+++ b/src/org/apache/http/impl/cookie/NetscapeDraftSpecFactory.java
@@ -41,7 +41,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class NetscapeDraftSpecFactory implements CookieSpecFactory {    
 
     public CookieSpec newInstance(final HttpParams params) {
diff --git a/src/org/apache/http/impl/cookie/RFC2109DomainHandler.java b/src/org/apache/http/impl/cookie/RFC2109DomainHandler.java
index 9cfd484..54a14e1 100644
--- a/src/org/apache/http/impl/cookie/RFC2109DomainHandler.java
+++ b/src/org/apache/http/impl/cookie/RFC2109DomainHandler.java
@@ -37,7 +37,13 @@
 import org.apache.http.cookie.CookieOrigin;
 import org.apache.http.cookie.MalformedCookieException;
 import org.apache.http.cookie.SetCookie;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class RFC2109DomainHandler implements CookieAttributeHandler {
 
     public RFC2109DomainHandler() {
diff --git a/src/org/apache/http/impl/cookie/RFC2109Spec.java b/src/org/apache/http/impl/cookie/RFC2109Spec.java
index 9e45408..4da685c 100644
--- a/src/org/apache/http/impl/cookie/RFC2109Spec.java
+++ b/src/org/apache/http/impl/cookie/RFC2109Spec.java
@@ -61,8 +61,13 @@
  * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
  * 
  * @since 4.0 
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
 
+@Deprecated
 public class RFC2109Spec extends CookieSpecBase {
 
     private final static CookiePathComparator PATH_COMPARATOR = new CookiePathComparator(); 
diff --git a/src/org/apache/http/impl/cookie/RFC2109SpecFactory.java b/src/org/apache/http/impl/cookie/RFC2109SpecFactory.java
index 35c506e..e0008c5 100644
--- a/src/org/apache/http/impl/cookie/RFC2109SpecFactory.java
+++ b/src/org/apache/http/impl/cookie/RFC2109SpecFactory.java
@@ -41,7 +41,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RFC2109SpecFactory implements CookieSpecFactory {    
 
     public CookieSpec newInstance(final HttpParams params) {
diff --git a/src/org/apache/http/impl/cookie/RFC2109VersionHandler.java b/src/org/apache/http/impl/cookie/RFC2109VersionHandler.java
index d2c4955..3ace856 100644
--- a/src/org/apache/http/impl/cookie/RFC2109VersionHandler.java
+++ b/src/org/apache/http/impl/cookie/RFC2109VersionHandler.java
@@ -34,7 +34,13 @@
 import org.apache.http.cookie.CookieOrigin;
 import org.apache.http.cookie.MalformedCookieException;
 import org.apache.http.cookie.SetCookie;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class RFC2109VersionHandler extends AbstractCookieAttributeHandler {
 
     public RFC2109VersionHandler() {
diff --git a/src/org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.java b/src/org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.java
index aa3a1c5..405ae77 100644
--- a/src/org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.java
+++ b/src/org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.java
@@ -40,7 +40,12 @@
 
 /**
    * <tt>"CommantURL"</tt> cookie attribute handler for RFC 2965 cookie spec.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
    */
+@Deprecated
   public class RFC2965CommentUrlAttributeHandler implements CookieAttributeHandler {
 
       public RFC2965CommentUrlAttributeHandler() {
diff --git a/src/org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.java b/src/org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.java
index aa81145..b234ffb 100644
--- a/src/org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.java
+++ b/src/org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.java
@@ -40,7 +40,12 @@
 
 /**
    * <tt>"Discard"</tt> cookie attribute handler for RFC 2965 cookie spec.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
    */
+@Deprecated
   public class RFC2965DiscardAttributeHandler implements CookieAttributeHandler {
 
       public RFC2965DiscardAttributeHandler() {
diff --git a/src/org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.java b/src/org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.java
index b07e5e9..a655136 100644
--- a/src/org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.java
+++ b/src/org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.java
@@ -46,7 +46,12 @@
  * @author jain.samit@gmail.com (Samit Jain)
  *
  * @since 3.1
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RFC2965DomainAttributeHandler implements CookieAttributeHandler {
 
     public RFC2965DomainAttributeHandler() {
diff --git a/src/org/apache/http/impl/cookie/RFC2965PortAttributeHandler.java b/src/org/apache/http/impl/cookie/RFC2965PortAttributeHandler.java
index b881cda..b6aa08b 100644
--- a/src/org/apache/http/impl/cookie/RFC2965PortAttributeHandler.java
+++ b/src/org/apache/http/impl/cookie/RFC2965PortAttributeHandler.java
@@ -43,7 +43,12 @@
 
 /**
  * <tt>"Port"</tt> cookie attribute handler for RFC 2965 cookie spec.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RFC2965PortAttributeHandler implements CookieAttributeHandler {
 
     public RFC2965PortAttributeHandler() {
diff --git a/src/org/apache/http/impl/cookie/RFC2965Spec.java b/src/org/apache/http/impl/cookie/RFC2965Spec.java
index 9422fdf..3a776e8 100644
--- a/src/org/apache/http/impl/cookie/RFC2965Spec.java
+++ b/src/org/apache/http/impl/cookie/RFC2965Spec.java
@@ -55,7 +55,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @since 3.1
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RFC2965Spec extends RFC2109Spec {
 
     /** 
diff --git a/src/org/apache/http/impl/cookie/RFC2965SpecFactory.java b/src/org/apache/http/impl/cookie/RFC2965SpecFactory.java
index 4b3cc4d..d1cd29a 100644
--- a/src/org/apache/http/impl/cookie/RFC2965SpecFactory.java
+++ b/src/org/apache/http/impl/cookie/RFC2965SpecFactory.java
@@ -41,7 +41,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RFC2965SpecFactory implements CookieSpecFactory {    
 
     public CookieSpec newInstance(final HttpParams params) {
diff --git a/src/org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.java b/src/org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.java
index 8ea8481..d1319af 100644
--- a/src/org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.java
+++ b/src/org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.java
@@ -41,7 +41,12 @@
 
 /**
  * <tt>"Version"</tt> cookie attribute handler for RFC 2965 cookie spec.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RFC2965VersionAttributeHandler implements CookieAttributeHandler {
 
     public RFC2965VersionAttributeHandler() {
diff --git a/src/org/apache/http/impl/entity/EntityDeserializer.java b/src/org/apache/http/impl/entity/EntityDeserializer.java
index 12c4756..649b18b 100644
--- a/src/org/apache/http/impl/entity/EntityDeserializer.java
+++ b/src/org/apache/http/impl/entity/EntityDeserializer.java
@@ -56,7 +56,12 @@
  * @version $Revision: 560358 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class EntityDeserializer {
 
     private final ContentLengthStrategy lenStrategy;
diff --git a/src/org/apache/http/impl/entity/EntitySerializer.java b/src/org/apache/http/impl/entity/EntitySerializer.java
index 3221980..3679611 100644
--- a/src/org/apache/http/impl/entity/EntitySerializer.java
+++ b/src/org/apache/http/impl/entity/EntitySerializer.java
@@ -54,7 +54,12 @@
  * @version $Revision: 560343 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class EntitySerializer {
 
     private final ContentLengthStrategy lenStrategy;
diff --git a/src/org/apache/http/impl/entity/LaxContentLengthStrategy.java b/src/org/apache/http/impl/entity/LaxContentLengthStrategy.java
index 9a0d238..8c0147c 100644
--- a/src/org/apache/http/impl/entity/LaxContentLengthStrategy.java
+++ b/src/org/apache/http/impl/entity/LaxContentLengthStrategy.java
@@ -177,7 +177,12 @@
  * @version $Revision: 576073 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class LaxContentLengthStrategy implements ContentLengthStrategy {
 
     public LaxContentLengthStrategy() {
diff --git a/src/org/apache/http/impl/entity/StrictContentLengthStrategy.java b/src/org/apache/http/impl/entity/StrictContentLengthStrategy.java
index 30be8e2..d9cf7ad 100644
--- a/src/org/apache/http/impl/entity/StrictContentLengthStrategy.java
+++ b/src/org/apache/http/impl/entity/StrictContentLengthStrategy.java
@@ -173,7 +173,12 @@
  * @version $Revision: 573949 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class StrictContentLengthStrategy implements ContentLengthStrategy {
 
     public StrictContentLengthStrategy() {
diff --git a/src/org/apache/http/impl/io/AbstractMessageParser.java b/src/org/apache/http/impl/io/AbstractMessageParser.java
index 679bcd1..58c7396 100644
--- a/src/org/apache/http/impl/io/AbstractMessageParser.java
+++ b/src/org/apache/http/impl/io/AbstractMessageParser.java
@@ -52,7 +52,12 @@
  * 
  * @author Michael Becke
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class AbstractMessageParser implements HttpMessageParser {
 
     private final SessionInputBuffer sessionBuffer;
diff --git a/src/org/apache/http/impl/io/AbstractMessageWriter.java b/src/org/apache/http/impl/io/AbstractMessageWriter.java
index f9644ce..a60c69d 100644
--- a/src/org/apache/http/impl/io/AbstractMessageWriter.java
+++ b/src/org/apache/http/impl/io/AbstractMessageWriter.java
@@ -43,7 +43,13 @@
 import org.apache.http.message.BasicLineFormatter;
 import org.apache.http.params.HttpParams;
 import org.apache.http.util.CharArrayBuffer;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public abstract class AbstractMessageWriter implements HttpMessageWriter {
     
     protected final SessionOutputBuffer sessionBuffer;    
diff --git a/src/org/apache/http/impl/io/AbstractSessionInputBuffer.java b/src/org/apache/http/impl/io/AbstractSessionInputBuffer.java
index 9ac9b26..6de0280 100644
--- a/src/org/apache/http/impl/io/AbstractSessionInputBuffer.java
+++ b/src/org/apache/http/impl/io/AbstractSessionInputBuffer.java
@@ -49,7 +49,12 @@
  *
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class AbstractSessionInputBuffer implements SessionInputBuffer {
 
     private InputStream instream;
diff --git a/src/org/apache/http/impl/io/AbstractSessionOutputBuffer.java b/src/org/apache/http/impl/io/AbstractSessionOutputBuffer.java
index bf4e56e..0707df7 100644
--- a/src/org/apache/http/impl/io/AbstractSessionOutputBuffer.java
+++ b/src/org/apache/http/impl/io/AbstractSessionOutputBuffer.java
@@ -48,7 +48,12 @@
  *
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class AbstractSessionOutputBuffer implements SessionOutputBuffer {
 
     private static final byte[] CRLF = new byte[] {HTTP.CR, HTTP.LF};
diff --git a/src/org/apache/http/impl/io/ChunkedInputStream.java b/src/org/apache/http/impl/io/ChunkedInputStream.java
index 60cae90..1353d3f 100644
--- a/src/org/apache/http/impl/io/ChunkedInputStream.java
+++ b/src/org/apache/http/impl/io/ChunkedInputStream.java
@@ -67,7 +67,12 @@
  *
  * @since 4.0
  *
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ChunkedInputStream extends InputStream {
 
     /** The session input buffer */
diff --git a/src/org/apache/http/impl/io/ChunkedOutputStream.java b/src/org/apache/http/impl/io/ChunkedOutputStream.java
index 5ee7dd6..56867df 100644
--- a/src/org/apache/http/impl/io/ChunkedOutputStream.java
+++ b/src/org/apache/http/impl/io/ChunkedOutputStream.java
@@ -46,7 +46,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ChunkedOutputStream extends OutputStream {
 
     // ----------------------------------------------------- Instance Variables
diff --git a/src/org/apache/http/impl/io/ContentLengthInputStream.java b/src/org/apache/http/impl/io/ContentLengthInputStream.java
index 3b19c5b..f1134b9 100644
--- a/src/org/apache/http/impl/io/ContentLengthInputStream.java
+++ b/src/org/apache/http/impl/io/ContentLengthInputStream.java
@@ -67,7 +67,12 @@
  * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ContentLengthInputStream extends InputStream {
     
     private static final int BUFFER_SIZE = 2048;
diff --git a/src/org/apache/http/impl/io/ContentLengthOutputStream.java b/src/org/apache/http/impl/io/ContentLengthOutputStream.java
index afcb883..9e76c37 100644
--- a/src/org/apache/http/impl/io/ContentLengthOutputStream.java
+++ b/src/org/apache/http/impl/io/ContentLengthOutputStream.java
@@ -44,7 +44,12 @@
  * @version $Revision: 560343 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ContentLengthOutputStream extends OutputStream {
     
     /**
diff --git a/src/org/apache/http/impl/io/HttpRequestParser.java b/src/org/apache/http/impl/io/HttpRequestParser.java
index a7bae6d..dce9a63 100644
--- a/src/org/apache/http/impl/io/HttpRequestParser.java
+++ b/src/org/apache/http/impl/io/HttpRequestParser.java
@@ -44,7 +44,13 @@
 import org.apache.http.message.ParserCursor;
 import org.apache.http.params.HttpParams;
 import org.apache.http.util.CharArrayBuffer;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class HttpRequestParser extends AbstractMessageParser {
     
     private final HttpRequestFactory requestFactory;
diff --git a/src/org/apache/http/impl/io/HttpRequestWriter.java b/src/org/apache/http/impl/io/HttpRequestWriter.java
index b784e2d..e07a3ed 100644
--- a/src/org/apache/http/impl/io/HttpRequestWriter.java
+++ b/src/org/apache/http/impl/io/HttpRequestWriter.java
@@ -39,7 +39,13 @@
 import org.apache.http.message.LineFormatter;
 import org.apache.http.params.HttpParams;
 import org.apache.http.util.CharArrayBuffer;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class HttpRequestWriter extends AbstractMessageWriter {
 
     public HttpRequestWriter(final SessionOutputBuffer buffer,
diff --git a/src/org/apache/http/impl/io/HttpResponseParser.java b/src/org/apache/http/impl/io/HttpResponseParser.java
index 575aa18..6405ae2 100644
--- a/src/org/apache/http/impl/io/HttpResponseParser.java
+++ b/src/org/apache/http/impl/io/HttpResponseParser.java
@@ -44,7 +44,13 @@
 import org.apache.http.message.ParserCursor;
 import org.apache.http.params.HttpParams;
 import org.apache.http.util.CharArrayBuffer;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class HttpResponseParser extends AbstractMessageParser {
     
     private final HttpResponseFactory responseFactory;
diff --git a/src/org/apache/http/impl/io/HttpResponseWriter.java b/src/org/apache/http/impl/io/HttpResponseWriter.java
index f88791e..3143fb5 100644
--- a/src/org/apache/http/impl/io/HttpResponseWriter.java
+++ b/src/org/apache/http/impl/io/HttpResponseWriter.java
@@ -39,7 +39,13 @@
 import org.apache.http.message.LineFormatter;
 import org.apache.http.params.HttpParams;
 import org.apache.http.util.CharArrayBuffer;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class HttpResponseWriter extends AbstractMessageWriter {
 
     public HttpResponseWriter(final SessionOutputBuffer buffer,
diff --git a/src/org/apache/http/impl/io/HttpTransportMetricsImpl.java b/src/org/apache/http/impl/io/HttpTransportMetricsImpl.java
index 53e6772..f44b4be 100644
--- a/src/org/apache/http/impl/io/HttpTransportMetricsImpl.java
+++ b/src/org/apache/http/impl/io/HttpTransportMetricsImpl.java
@@ -35,7 +35,12 @@
 
 /**
  * Default implementation of {@link HttpTransportMetrics}.
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpTransportMetricsImpl implements HttpTransportMetrics {
 
     private long bytesTransferred = 0;
diff --git a/src/org/apache/http/impl/io/IdentityInputStream.java b/src/org/apache/http/impl/io/IdentityInputStream.java
index 390d5b7..c30205a 100644
--- a/src/org/apache/http/impl/io/IdentityInputStream.java
+++ b/src/org/apache/http/impl/io/IdentityInputStream.java
@@ -44,7 +44,12 @@
  * @version $Revision: 560358 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class IdentityInputStream extends InputStream {
     
     private final SessionInputBuffer in;
diff --git a/src/org/apache/http/impl/io/IdentityOutputStream.java b/src/org/apache/http/impl/io/IdentityOutputStream.java
index 10b64f7..aef5dc0 100644
--- a/src/org/apache/http/impl/io/IdentityOutputStream.java
+++ b/src/org/apache/http/impl/io/IdentityOutputStream.java
@@ -44,7 +44,12 @@
  * @version $Revision: 560343 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class IdentityOutputStream extends OutputStream {
     
     /**
diff --git a/src/org/apache/http/impl/io/SocketInputBuffer.java b/src/org/apache/http/impl/io/SocketInputBuffer.java
index 7d4323b..f525833 100644
--- a/src/org/apache/http/impl/io/SocketInputBuffer.java
+++ b/src/org/apache/http/impl/io/SocketInputBuffer.java
@@ -48,7 +48,12 @@
  * @version $Revision: 560358 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class SocketInputBuffer extends AbstractSessionInputBuffer {
 
     private final Socket socket;
diff --git a/src/org/apache/http/impl/io/SocketOutputBuffer.java b/src/org/apache/http/impl/io/SocketOutputBuffer.java
index c1d3b49..d054270 100644
--- a/src/org/apache/http/impl/io/SocketOutputBuffer.java
+++ b/src/org/apache/http/impl/io/SocketOutputBuffer.java
@@ -45,7 +45,12 @@
  * @version $Revision: 560358 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class SocketOutputBuffer extends AbstractSessionOutputBuffer {
 
     public SocketOutputBuffer(
diff --git a/src/org/apache/http/io/HttpMessageParser.java b/src/org/apache/http/io/HttpMessageParser.java
index 5c24736..34eb602 100644
--- a/src/org/apache/http/io/HttpMessageParser.java
+++ b/src/org/apache/http/io/HttpMessageParser.java
@@ -44,7 +44,12 @@
  * @version $Revision: 567370 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpMessageParser {
     
     HttpMessage parse()
diff --git a/src/org/apache/http/io/HttpMessageWriter.java b/src/org/apache/http/io/HttpMessageWriter.java
index b6ac7c1..0b059a0 100644
--- a/src/org/apache/http/io/HttpMessageWriter.java
+++ b/src/org/apache/http/io/HttpMessageWriter.java
@@ -44,7 +44,12 @@
  * @version $Revision: 567370 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpMessageWriter {
     
     void write(HttpMessage message)
diff --git a/src/org/apache/http/io/HttpTransportMetrics.java b/src/org/apache/http/io/HttpTransportMetrics.java
index f88e036..9d23e7f 100644
--- a/src/org/apache/http/io/HttpTransportMetrics.java
+++ b/src/org/apache/http/io/HttpTransportMetrics.java
@@ -30,7 +30,13 @@
  */
 
 package org.apache.http.io;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public interface HttpTransportMetrics {
     
     /**
diff --git a/src/org/apache/http/io/SessionInputBuffer.java b/src/org/apache/http/io/SessionInputBuffer.java
index d7824d9..f852422 100644
--- a/src/org/apache/http/io/SessionInputBuffer.java
+++ b/src/org/apache/http/io/SessionInputBuffer.java
@@ -43,7 +43,12 @@
  * @version $Revision: 560528 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface SessionInputBuffer {
     
     int read(byte[] b, int off, int len) throws IOException; 
diff --git a/src/org/apache/http/io/SessionOutputBuffer.java b/src/org/apache/http/io/SessionOutputBuffer.java
index 6587a26..4b4d60a 100644
--- a/src/org/apache/http/io/SessionOutputBuffer.java
+++ b/src/org/apache/http/io/SessionOutputBuffer.java
@@ -43,7 +43,12 @@
  * @version $Revision: 560528 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface SessionOutputBuffer {
 
     void write(byte[] b, int off, int len) throws IOException;
diff --git a/src/org/apache/http/message/AbstractHttpMessage.java b/src/org/apache/http/message/AbstractHttpMessage.java
index d8a6962..25d19fa 100644
--- a/src/org/apache/http/message/AbstractHttpMessage.java
+++ b/src/org/apache/http/message/AbstractHttpMessage.java
@@ -47,7 +47,12 @@
  * @version $Revision: 620287 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class AbstractHttpMessage implements HttpMessage {
     
     protected HeaderGroup headergroup;
diff --git a/src/org/apache/http/message/BasicHeader.java b/src/org/apache/http/message/BasicHeader.java
index f134d8d..18c8978 100644
--- a/src/org/apache/http/message/BasicHeader.java
+++ b/src/org/apache/http/message/BasicHeader.java
@@ -62,7 +62,12 @@
  * @version $Revision: 652956 $ $Date: 2008-05-02 17:13:05 -0700 (Fri, 02 May 2008) $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicHeader implements Header, Cloneable {
 
     /**
diff --git a/src/org/apache/http/message/BasicHeaderElement.java b/src/org/apache/http/message/BasicHeaderElement.java
index 19a40c6..3ec9633 100644
--- a/src/org/apache/http/message/BasicHeaderElement.java
+++ b/src/org/apache/http/message/BasicHeaderElement.java
@@ -79,7 +79,12 @@
  * @version $Revision: 604625 $ $Date: 2007-12-16 06:11:11 -0800 (Sun, 16 Dec 2007) $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicHeaderElement implements HeaderElement, Cloneable {
 
     private final String name;
diff --git a/src/org/apache/http/message/BasicHeaderElementIterator.java b/src/org/apache/http/message/BasicHeaderElementIterator.java
index 46f53a8..dfead0b 100644
--- a/src/org/apache/http/message/BasicHeaderElementIterator.java
+++ b/src/org/apache/http/message/BasicHeaderElementIterator.java
@@ -47,7 +47,12 @@
  * 
  * @author Andrea Selva <selva.andre at gmail.com>
  * @author Oleg Kalnichevski <oleg at ural.ru>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicHeaderElementIterator implements HeaderElementIterator {
     
     private final HeaderIterator headerIt;
diff --git a/src/org/apache/http/message/BasicHeaderIterator.java b/src/org/apache/http/message/BasicHeaderIterator.java
index 32cd1c8..0eff092 100644
--- a/src/org/apache/http/message/BasicHeaderIterator.java
+++ b/src/org/apache/http/message/BasicHeaderIterator.java
@@ -42,7 +42,12 @@
  * Basic implementation of a {@link HeaderIterator}.
  * 
  * @version $Revision: 581981 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicHeaderIterator implements HeaderIterator {
 
     /**
diff --git a/src/org/apache/http/message/BasicHeaderValueFormatter.java b/src/org/apache/http/message/BasicHeaderValueFormatter.java
index b63bdf7..75849b5 100644
--- a/src/org/apache/http/message/BasicHeaderValueFormatter.java
+++ b/src/org/apache/http/message/BasicHeaderValueFormatter.java
@@ -49,7 +49,12 @@
  * @version $Revision: 574185 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicHeaderValueFormatter implements HeaderValueFormatter {
 
     /**
diff --git a/src/org/apache/http/message/BasicHeaderValueParser.java b/src/org/apache/http/message/BasicHeaderValueParser.java
index 5216196..a87146f 100644
--- a/src/org/apache/http/message/BasicHeaderValueParser.java
+++ b/src/org/apache/http/message/BasicHeaderValueParser.java
@@ -59,7 +59,12 @@
  * @version $Revision: 595670 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicHeaderValueParser implements HeaderValueParser {
 
     /**
diff --git a/src/org/apache/http/message/BasicHttpEntityEnclosingRequest.java b/src/org/apache/http/message/BasicHttpEntityEnclosingRequest.java
index dbb70c8..6e87338 100644
--- a/src/org/apache/http/message/BasicHttpEntityEnclosingRequest.java
+++ b/src/org/apache/http/message/BasicHttpEntityEnclosingRequest.java
@@ -46,7 +46,12 @@
  * @version $Revision: 618017 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicHttpEntityEnclosingRequest 
             extends BasicHttpRequest implements HttpEntityEnclosingRequest {
     
diff --git a/src/org/apache/http/message/BasicHttpRequest.java b/src/org/apache/http/message/BasicHttpRequest.java
index eedf8bc..93f4fd8 100644
--- a/src/org/apache/http/message/BasicHttpRequest.java
+++ b/src/org/apache/http/message/BasicHttpRequest.java
@@ -44,7 +44,12 @@
  * @version $Revision: 573864 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicHttpRequest extends AbstractHttpMessage implements HttpRequest {
     
     private final RequestLine requestline;
diff --git a/src/org/apache/http/message/BasicHttpResponse.java b/src/org/apache/http/message/BasicHttpResponse.java
index 7da4bea..e656651 100644
--- a/src/org/apache/http/message/BasicHttpResponse.java
+++ b/src/org/apache/http/message/BasicHttpResponse.java
@@ -49,7 +49,12 @@
  * @version $Revision: 573864 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicHttpResponse extends AbstractHttpMessage
     implements HttpResponse {
 
diff --git a/src/org/apache/http/message/BasicLineFormatter.java b/src/org/apache/http/message/BasicLineFormatter.java
index 7c3bbc4..595adb6 100644
--- a/src/org/apache/http/message/BasicLineFormatter.java
+++ b/src/org/apache/http/message/BasicLineFormatter.java
@@ -61,7 +61,12 @@
  * @version $Revision: 574185 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicLineFormatter implements LineFormatter {
 
     /**
diff --git a/src/org/apache/http/message/BasicLineParser.java b/src/org/apache/http/message/BasicLineParser.java
index c5e9ddb..20f4fd7 100644
--- a/src/org/apache/http/message/BasicLineParser.java
+++ b/src/org/apache/http/message/BasicLineParser.java
@@ -61,7 +61,12 @@
  * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
  * @author <a href="mailto:oleg@ural.ru">Oleg Kalnichevski</a>
  * @author and others
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicLineParser implements LineParser {
 
     /**
diff --git a/src/org/apache/http/message/BasicListHeaderIterator.java b/src/org/apache/http/message/BasicListHeaderIterator.java
index 69b8c06..8c6ba5f 100644
--- a/src/org/apache/http/message/BasicListHeaderIterator.java
+++ b/src/org/apache/http/message/BasicListHeaderIterator.java
@@ -44,7 +44,12 @@
  * For use by {@link HeaderGroup}.
  * 
  * @version $Revision: 584542 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicListHeaderIterator implements HeaderIterator {
 
     /**
diff --git a/src/org/apache/http/message/BasicNameValuePair.java b/src/org/apache/http/message/BasicNameValuePair.java
index 59fcb42..2d6c24e 100644
--- a/src/org/apache/http/message/BasicNameValuePair.java
+++ b/src/org/apache/http/message/BasicNameValuePair.java
@@ -102,7 +102,12 @@
  * 
  * @author <a href="mailto:oleg at ural.com">Oleg Kalnichevski</a>
  * 
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicNameValuePair implements NameValuePair, Cloneable {
 
     private final String name;
diff --git a/src/org/apache/http/message/BasicRequestLine.java b/src/org/apache/http/message/BasicRequestLine.java
index b826064..e682d22 100644
--- a/src/org/apache/http/message/BasicRequestLine.java
+++ b/src/org/apache/http/message/BasicRequestLine.java
@@ -46,7 +46,12 @@
  * @version $Revision: 604625 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicRequestLine implements RequestLine, Cloneable {
 
     private final ProtocolVersion protoversion;
diff --git a/src/org/apache/http/message/BasicStatusLine.java b/src/org/apache/http/message/BasicStatusLine.java
index c34cefe..7ecdb67 100644
--- a/src/org/apache/http/message/BasicStatusLine.java
+++ b/src/org/apache/http/message/BasicStatusLine.java
@@ -49,7 +49,12 @@
  * @version $Id: BasicStatusLine.java 604625 2007-12-16 14:11:11Z olegk $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicStatusLine implements StatusLine, Cloneable {
 
     // ----------------------------------------------------- Instance Variables
diff --git a/src/org/apache/http/message/BasicTokenIterator.java b/src/org/apache/http/message/BasicTokenIterator.java
index 5fbf5ba..76858a8 100644
--- a/src/org/apache/http/message/BasicTokenIterator.java
+++ b/src/org/apache/http/message/BasicTokenIterator.java
@@ -44,7 +44,12 @@
  * It extends that definition somewhat beyond US-ASCII.
  * 
  * @version $Revision: 602520 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicTokenIterator implements TokenIterator {
 
     /** The HTTP separator characters. Defined in RFC 2616, section 2.2. */
diff --git a/src/org/apache/http/message/BufferedHeader.java b/src/org/apache/http/message/BufferedHeader.java
index 35c5cfc..6383618 100644
--- a/src/org/apache/http/message/BufferedHeader.java
+++ b/src/org/apache/http/message/BufferedHeader.java
@@ -45,7 +45,12 @@
  *
  * <!-- empty lines above to avoid 'svn diff' context problems -->
  * @version $Revision: 604625 $ $Date: 2007-12-16 06:11:11 -0800 (Sun, 16 Dec 2007) $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BufferedHeader implements FormattedHeader, Cloneable {
 
     /**
diff --git a/src/org/apache/http/message/HeaderGroup.java b/src/org/apache/http/message/HeaderGroup.java
index 4e40db1..5a92242 100644
--- a/src/org/apache/http/message/HeaderGroup.java
+++ b/src/org/apache/http/message/HeaderGroup.java
@@ -47,7 +47,12 @@
  * @author Michael Becke
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HeaderGroup implements Cloneable {
 
     /** The list of headers for this group, in the order in which they were added */
diff --git a/src/org/apache/http/message/HeaderValueFormatter.java b/src/org/apache/http/message/HeaderValueFormatter.java
index 4f6351f..54ea82c 100644
--- a/src/org/apache/http/message/HeaderValueFormatter.java
+++ b/src/org/apache/http/message/HeaderValueFormatter.java
@@ -56,7 +56,12 @@
  * @version $Revision: 571954 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HeaderValueFormatter {
 
     /**
diff --git a/src/org/apache/http/message/HeaderValueParser.java b/src/org/apache/http/message/HeaderValueParser.java
index 74bb93c..e3ec7e4 100644
--- a/src/org/apache/http/message/HeaderValueParser.java
+++ b/src/org/apache/http/message/HeaderValueParser.java
@@ -48,7 +48,12 @@
  * @version $Revision: 589325 $ $Date: 2007-10-28 03:37:56 -0700 (Sun, 28 Oct 2007) $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HeaderValueParser {
 
     /**
diff --git a/src/org/apache/http/message/LineFormatter.java b/src/org/apache/http/message/LineFormatter.java
index ccc603c..cb298e1 100644
--- a/src/org/apache/http/message/LineFormatter.java
+++ b/src/org/apache/http/message/LineFormatter.java
@@ -68,7 +68,12 @@
  * @version $Revision: 573864 $ $Date: 2007-09-08 08:53:25 -0700 (Sat, 08 Sep 2007) $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface LineFormatter {
 
 
diff --git a/src/org/apache/http/message/LineParser.java b/src/org/apache/http/message/LineParser.java
index d1bcd15..b6db7cb 100644
--- a/src/org/apache/http/message/LineParser.java
+++ b/src/org/apache/http/message/LineParser.java
@@ -55,7 +55,12 @@
  * @version $Revision: 589374 $ $Date: 2007-10-28 09:25:07 -0700 (Sun, 28 Oct 2007) $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface LineParser {
 
 
diff --git a/src/org/apache/http/message/ParserCursor.java b/src/org/apache/http/message/ParserCursor.java
index d030675..e104f5b 100644
--- a/src/org/apache/http/message/ParserCursor.java
+++ b/src/org/apache/http/message/ParserCursor.java
@@ -41,7 +41,12 @@
  * </ul>
  * 
  * @author <a href="mailto:oleg at ural.com">Oleg Kalnichevski</a>
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ParserCursor {
 
     private final int lowerBound;
diff --git a/src/org/apache/http/params/AbstractHttpParams.java b/src/org/apache/http/params/AbstractHttpParams.java
index 91631fc..3d8994c 100644
--- a/src/org/apache/http/params/AbstractHttpParams.java
+++ b/src/org/apache/http/params/AbstractHttpParams.java
@@ -43,7 +43,12 @@
  * @author <a href="mailto:rolandw at apache.org">Roland Weber</a>
  * 
  * @version $Revision: 542224 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public abstract class AbstractHttpParams implements HttpParams {
 
     /**
diff --git a/src/org/apache/http/params/BasicHttpParams.java b/src/org/apache/http/params/BasicHttpParams.java
index 70e6605..ba1a80f 100644
--- a/src/org/apache/http/params/BasicHttpParams.java
+++ b/src/org/apache/http/params/BasicHttpParams.java
@@ -48,7 +48,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @version $Revision: 610464 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class BasicHttpParams extends AbstractHttpParams
     implements Serializable, Cloneable {
 
diff --git a/src/org/apache/http/params/CoreConnectionPNames.java b/src/org/apache/http/params/CoreConnectionPNames.java
index a2dec8b..9479db1 100644
--- a/src/org/apache/http/params/CoreConnectionPNames.java
+++ b/src/org/apache/http/params/CoreConnectionPNames.java
@@ -38,7 +38,12 @@
  * @version $Revision: 576077 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface CoreConnectionPNames {
 
     /**
diff --git a/src/org/apache/http/params/CoreProtocolPNames.java b/src/org/apache/http/params/CoreProtocolPNames.java
index a0a726d..45072b1 100644
--- a/src/org/apache/http/params/CoreProtocolPNames.java
+++ b/src/org/apache/http/params/CoreProtocolPNames.java
@@ -38,7 +38,12 @@
  * @version $Revision: 576077 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface CoreProtocolPNames {
 
     /**
diff --git a/src/org/apache/http/params/DefaultedHttpParams.java b/src/org/apache/http/params/DefaultedHttpParams.java
index ce33247..43cc0da 100644
--- a/src/org/apache/http/params/DefaultedHttpParams.java
+++ b/src/org/apache/http/params/DefaultedHttpParams.java
@@ -42,7 +42,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @version $Revision: 610763 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class DefaultedHttpParams extends AbstractHttpParams {
 
     private final HttpParams local;
diff --git a/src/org/apache/http/params/HttpAbstractParamBean.java b/src/org/apache/http/params/HttpAbstractParamBean.java
index 8701a99..1a9e3a3 100644
--- a/src/org/apache/http/params/HttpAbstractParamBean.java
+++ b/src/org/apache/http/params/HttpAbstractParamBean.java
@@ -30,7 +30,13 @@
  */
 
 package org.apache.http.params;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public abstract class HttpAbstractParamBean {
     
     protected final HttpParams params;
diff --git a/src/org/apache/http/params/HttpConnectionParamBean.java b/src/org/apache/http/params/HttpConnectionParamBean.java
index 0b61346..7541a35 100644
--- a/src/org/apache/http/params/HttpConnectionParamBean.java
+++ b/src/org/apache/http/params/HttpConnectionParamBean.java
@@ -30,7 +30,13 @@
  */
 
 package org.apache.http.params;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class HttpConnectionParamBean extends HttpAbstractParamBean {
     
     public HttpConnectionParamBean (final HttpParams params) {
diff --git a/src/org/apache/http/params/HttpConnectionParams.java b/src/org/apache/http/params/HttpConnectionParams.java
index 7918a66..a7b31fc 100644
--- a/src/org/apache/http/params/HttpConnectionParams.java
+++ b/src/org/apache/http/params/HttpConnectionParams.java
@@ -43,7 +43,12 @@
  * @version $Revision: 576089 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class HttpConnectionParams implements CoreConnectionPNames {
 
     /**
diff --git a/src/org/apache/http/params/HttpParams.java b/src/org/apache/http/params/HttpParams.java
index ba901a2..9562e54 100644
--- a/src/org/apache/http/params/HttpParams.java
+++ b/src/org/apache/http/params/HttpParams.java
@@ -39,7 +39,12 @@
  * @version $Revision: 610763 $
  *
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpParams {
 
     /** 
diff --git a/src/org/apache/http/params/HttpProtocolParamBean.java b/src/org/apache/http/params/HttpProtocolParamBean.java
index 6273430..6719821 100644
--- a/src/org/apache/http/params/HttpProtocolParamBean.java
+++ b/src/org/apache/http/params/HttpProtocolParamBean.java
@@ -32,7 +32,13 @@
 package org.apache.http.params;
 
 import org.apache.http.HttpVersion;
+/**
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
+*/
 
+@Deprecated
 public class HttpProtocolParamBean extends HttpAbstractParamBean {
     
     public HttpProtocolParamBean (final HttpParams params) {
diff --git a/src/org/apache/http/params/HttpProtocolParams.java b/src/org/apache/http/params/HttpProtocolParams.java
index 71e9c67..3110484 100644
--- a/src/org/apache/http/params/HttpProtocolParams.java
+++ b/src/org/apache/http/params/HttpProtocolParams.java
@@ -50,7 +50,12 @@
  * @since 4.0
  *
  * @see CoreProtocolPNames
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class HttpProtocolParams implements CoreProtocolPNames {
     
     /**
diff --git a/src/org/apache/http/protocol/BasicHttpContext.java b/src/org/apache/http/protocol/BasicHttpContext.java
index 9b4e2b3..57d1f0f 100644
--- a/src/org/apache/http/protocol/BasicHttpContext.java
+++ b/src/org/apache/http/protocol/BasicHttpContext.java
@@ -42,7 +42,12 @@
  * @version $Revision: 654882 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class BasicHttpContext implements HttpContext {
     
     private final HttpContext parentContext;
diff --git a/src/org/apache/http/protocol/BasicHttpProcessor.java b/src/org/apache/http/protocol/BasicHttpProcessor.java
index 3caec72..4b57525 100644
--- a/src/org/apache/http/protocol/BasicHttpProcessor.java
+++ b/src/org/apache/http/protocol/BasicHttpProcessor.java
@@ -51,7 +51,12 @@
  * @version $Revision: 613298 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class BasicHttpProcessor implements
     HttpProcessor, HttpRequestInterceptorList, HttpResponseInterceptorList, Cloneable {
 
diff --git a/src/org/apache/http/protocol/DefaultedHttpContext.java b/src/org/apache/http/protocol/DefaultedHttpContext.java
index 986f1a6..25f5841 100644
--- a/src/org/apache/http/protocol/DefaultedHttpContext.java
+++ b/src/org/apache/http/protocol/DefaultedHttpContext.java
@@ -40,7 +40,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @version $Revision: 654882 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class DefaultedHttpContext implements HttpContext {
 
     private final HttpContext local;
diff --git a/src/org/apache/http/protocol/ExecutionContext.java b/src/org/apache/http/protocol/ExecutionContext.java
index d14acb5..9f2c58a 100644
--- a/src/org/apache/http/protocol/ExecutionContext.java
+++ b/src/org/apache/http/protocol/ExecutionContext.java
@@ -39,7 +39,12 @@
  * @version $Revision: 558154 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface ExecutionContext {
     
     public static final String HTTP_CONNECTION  = "http.connection"; 
diff --git a/src/org/apache/http/protocol/HTTP.java b/src/org/apache/http/protocol/HTTP.java
index 9223955..41f2b8f 100644
--- a/src/org/apache/http/protocol/HTTP.java
+++ b/src/org/apache/http/protocol/HTTP.java
@@ -39,7 +39,12 @@
  * @version $Revision: 555989 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class HTTP {
 
     public static final int CR = 13; // <US-ASCII CR, carriage return (13)>
diff --git a/src/org/apache/http/protocol/HttpContext.java b/src/org/apache/http/protocol/HttpContext.java
index bcf36fd..3664f94 100644
--- a/src/org/apache/http/protocol/HttpContext.java
+++ b/src/org/apache/http/protocol/HttpContext.java
@@ -43,7 +43,12 @@
  * @version $Revision: 558111 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpContext {
 
     /** The prefix reserved for use by HTTP components. "http." */
diff --git a/src/org/apache/http/protocol/HttpDateGenerator.java b/src/org/apache/http/protocol/HttpDateGenerator.java
index bfb0863..1a23da9 100644
--- a/src/org/apache/http/protocol/HttpDateGenerator.java
+++ b/src/org/apache/http/protocol/HttpDateGenerator.java
@@ -46,7 +46,12 @@
  * @version $Revision: 548066 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpDateGenerator {
 
     /** Date format pattern used to generate the header in RFC 1123 format. */
diff --git a/src/org/apache/http/protocol/HttpExpectationVerifier.java b/src/org/apache/http/protocol/HttpExpectationVerifier.java
index 9fa4316..a3aa8b1 100644
--- a/src/org/apache/http/protocol/HttpExpectationVerifier.java
+++ b/src/org/apache/http/protocol/HttpExpectationVerifier.java
@@ -64,7 +64,12 @@
  * @version $Revision: 613298 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpExpectationVerifier {
 
     void verify(HttpRequest request, HttpResponse response, HttpContext context)
diff --git a/src/org/apache/http/protocol/HttpProcessor.java b/src/org/apache/http/protocol/HttpProcessor.java
index 489220d..24b2cbb 100644
--- a/src/org/apache/http/protocol/HttpProcessor.java
+++ b/src/org/apache/http/protocol/HttpProcessor.java
@@ -48,7 +48,12 @@
  * @version $Revision: 496070 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpProcessor
     extends HttpRequestInterceptor, HttpResponseInterceptor {
 
diff --git a/src/org/apache/http/protocol/HttpRequestExecutor.java b/src/org/apache/http/protocol/HttpRequestExecutor.java
index 71fa75a..3a80c5c 100644
--- a/src/org/apache/http/protocol/HttpRequestExecutor.java
+++ b/src/org/apache/http/protocol/HttpRequestExecutor.java
@@ -54,7 +54,12 @@
  * @version $Revision: 576073 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpRequestExecutor {
 
     /**
diff --git a/src/org/apache/http/protocol/HttpRequestHandler.java b/src/org/apache/http/protocol/HttpRequestHandler.java
index 7494353..c3fe2ac 100644
--- a/src/org/apache/http/protocol/HttpRequestHandler.java
+++ b/src/org/apache/http/protocol/HttpRequestHandler.java
@@ -44,7 +44,12 @@
  * @version $Revision: 613298 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpRequestHandler {
 
     void handle(HttpRequest request, HttpResponse response, HttpContext context) 
diff --git a/src/org/apache/http/protocol/HttpRequestHandlerRegistry.java b/src/org/apache/http/protocol/HttpRequestHandlerRegistry.java
index 79701e3..26be636 100644
--- a/src/org/apache/http/protocol/HttpRequestHandlerRegistry.java
+++ b/src/org/apache/http/protocol/HttpRequestHandlerRegistry.java
@@ -47,7 +47,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @version $Revision: 630662 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpRequestHandlerRegistry implements HttpRequestHandlerResolver {
 
     private final UriPatternMatcher matcher;
diff --git a/src/org/apache/http/protocol/HttpRequestHandlerResolver.java b/src/org/apache/http/protocol/HttpRequestHandlerResolver.java
index be92deb..f2c8a60 100644
--- a/src/org/apache/http/protocol/HttpRequestHandlerResolver.java
+++ b/src/org/apache/http/protocol/HttpRequestHandlerResolver.java
@@ -38,7 +38,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @version $Revision: 613298 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpRequestHandlerResolver {
 
     HttpRequestHandler lookup(String requestURI);
diff --git a/src/org/apache/http/protocol/HttpRequestInterceptorList.java b/src/org/apache/http/protocol/HttpRequestInterceptorList.java
index 84ec761..306a393 100644
--- a/src/org/apache/http/protocol/HttpRequestInterceptorList.java
+++ b/src/org/apache/http/protocol/HttpRequestInterceptorList.java
@@ -45,7 +45,12 @@
  * @version $Revision: 554903 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpRequestInterceptorList {
 
     /**
diff --git a/src/org/apache/http/protocol/HttpResponseInterceptorList.java b/src/org/apache/http/protocol/HttpResponseInterceptorList.java
index 8b5811b..fe0b66a 100644
--- a/src/org/apache/http/protocol/HttpResponseInterceptorList.java
+++ b/src/org/apache/http/protocol/HttpResponseInterceptorList.java
@@ -47,7 +47,12 @@
  * @version $Revision: 554903 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public interface HttpResponseInterceptorList {
 
     /**
diff --git a/src/org/apache/http/protocol/HttpService.java b/src/org/apache/http/protocol/HttpService.java
index 991e931..b1204f7 100644
--- a/src/org/apache/http/protocol/HttpService.java
+++ b/src/org/apache/http/protocol/HttpService.java
@@ -58,7 +58,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @version $Revision: 610763 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class HttpService {
 
     private HttpParams params = null;
diff --git a/src/org/apache/http/protocol/RequestConnControl.java b/src/org/apache/http/protocol/RequestConnControl.java
index 0a7088c..17432b6 100644
--- a/src/org/apache/http/protocol/RequestConnControl.java
+++ b/src/org/apache/http/protocol/RequestConnControl.java
@@ -45,7 +45,12 @@
  * @version $Revision: 496070 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RequestConnControl implements HttpRequestInterceptor {
 
     public RequestConnControl() {
diff --git a/src/org/apache/http/protocol/RequestContent.java b/src/org/apache/http/protocol/RequestContent.java
index 745f604..dceb951 100644
--- a/src/org/apache/http/protocol/RequestContent.java
+++ b/src/org/apache/http/protocol/RequestContent.java
@@ -50,7 +50,12 @@
  * @version $Revision: 573864 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RequestContent implements HttpRequestInterceptor {
 
     public RequestContent() {
diff --git a/src/org/apache/http/protocol/RequestDate.java b/src/org/apache/http/protocol/RequestDate.java
index 6462906..2a8608d 100644
--- a/src/org/apache/http/protocol/RequestDate.java
+++ b/src/org/apache/http/protocol/RequestDate.java
@@ -47,7 +47,12 @@
  * @version $Revision: 555989 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RequestDate implements HttpRequestInterceptor {
 
     private static final HttpDateGenerator DATE_GENERATOR = new HttpDateGenerator(); 
diff --git a/src/org/apache/http/protocol/RequestExpectContinue.java b/src/org/apache/http/protocol/RequestExpectContinue.java
index 0799849..3af277e 100644
--- a/src/org/apache/http/protocol/RequestExpectContinue.java
+++ b/src/org/apache/http/protocol/RequestExpectContinue.java
@@ -50,7 +50,12 @@
  * @version $Revision: 573864 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RequestExpectContinue implements HttpRequestInterceptor {
 
     public RequestExpectContinue() {
diff --git a/src/org/apache/http/protocol/RequestTargetHost.java b/src/org/apache/http/protocol/RequestTargetHost.java
index 9349a8a..d5a30f6 100644
--- a/src/org/apache/http/protocol/RequestTargetHost.java
+++ b/src/org/apache/http/protocol/RequestTargetHost.java
@@ -52,7 +52,12 @@
  * @version $Revision: 573864 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RequestTargetHost implements HttpRequestInterceptor {
 
     public RequestTargetHost() {
diff --git a/src/org/apache/http/protocol/RequestUserAgent.java b/src/org/apache/http/protocol/RequestUserAgent.java
index 5a3145f..2afe51d 100644
--- a/src/org/apache/http/protocol/RequestUserAgent.java
+++ b/src/org/apache/http/protocol/RequestUserAgent.java
@@ -46,7 +46,12 @@
  * @version $Revision: 496070 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class RequestUserAgent implements HttpRequestInterceptor {
 
     public RequestUserAgent() {
diff --git a/src/org/apache/http/protocol/ResponseConnControl.java b/src/org/apache/http/protocol/ResponseConnControl.java
index 2e535fe..d0f2c29 100644
--- a/src/org/apache/http/protocol/ResponseConnControl.java
+++ b/src/org/apache/http/protocol/ResponseConnControl.java
@@ -52,7 +52,12 @@
  * @version $Revision: 618017 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ResponseConnControl implements HttpResponseInterceptor {
 
     public ResponseConnControl() {
diff --git a/src/org/apache/http/protocol/ResponseContent.java b/src/org/apache/http/protocol/ResponseContent.java
index d1ac054..4786044 100644
--- a/src/org/apache/http/protocol/ResponseContent.java
+++ b/src/org/apache/http/protocol/ResponseContent.java
@@ -51,7 +51,12 @@
  * @version $Revision: 573864 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ResponseContent implements HttpResponseInterceptor {
 
     public ResponseContent() {
diff --git a/src/org/apache/http/protocol/ResponseDate.java b/src/org/apache/http/protocol/ResponseDate.java
index 431dc19..0073594 100644
--- a/src/org/apache/http/protocol/ResponseDate.java
+++ b/src/org/apache/http/protocol/ResponseDate.java
@@ -47,7 +47,12 @@
  * @version $Revision: 555989 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ResponseDate implements HttpResponseInterceptor {
 
     private static final HttpDateGenerator DATE_GENERATOR = new HttpDateGenerator(); 
diff --git a/src/org/apache/http/protocol/ResponseServer.java b/src/org/apache/http/protocol/ResponseServer.java
index 44df593..917b351 100644
--- a/src/org/apache/http/protocol/ResponseServer.java
+++ b/src/org/apache/http/protocol/ResponseServer.java
@@ -47,7 +47,12 @@
  * @version $Revision: 576073 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class ResponseServer implements HttpResponseInterceptor {
 
     public ResponseServer() {
diff --git a/src/org/apache/http/protocol/SyncBasicHttpContext.java b/src/org/apache/http/protocol/SyncBasicHttpContext.java
index b1a408b..1451c33 100644
--- a/src/org/apache/http/protocol/SyncBasicHttpContext.java
+++ b/src/org/apache/http/protocol/SyncBasicHttpContext.java
@@ -39,7 +39,12 @@
  * @version $Revision: 613298 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class SyncBasicHttpContext extends BasicHttpContext {
     
     public SyncBasicHttpContext(final HttpContext parentContext) {
diff --git a/src/org/apache/http/protocol/UriPatternMatcher.java b/src/org/apache/http/protocol/UriPatternMatcher.java
index 2870d99..fffd747 100644
--- a/src/org/apache/http/protocol/UriPatternMatcher.java
+++ b/src/org/apache/http/protocol/UriPatternMatcher.java
@@ -48,7 +48,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @version $Revision: 630662 $
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class UriPatternMatcher {
 
     private final Map handlerMap;
diff --git a/src/org/apache/http/util/ByteArrayBuffer.java b/src/org/apache/http/util/ByteArrayBuffer.java
index 01d6577..e392d5e 100644
--- a/src/org/apache/http/util/ByteArrayBuffer.java
+++ b/src/org/apache/http/util/ByteArrayBuffer.java
@@ -39,7 +39,12 @@
  * @version $Revision: 496070 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class ByteArrayBuffer  {
     
     private byte[] buffer;
diff --git a/src/org/apache/http/util/CharArrayBuffer.java b/src/org/apache/http/util/CharArrayBuffer.java
index b89f5d1..30da06a 100644
--- a/src/org/apache/http/util/CharArrayBuffer.java
+++ b/src/org/apache/http/util/CharArrayBuffer.java
@@ -41,7 +41,12 @@
  * @version $Revision: 496070 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class CharArrayBuffer  {
     
     private char[] buffer;
diff --git a/src/org/apache/http/util/EncodingUtils.java b/src/org/apache/http/util/EncodingUtils.java
index a1b3f44..53c8f83 100644
--- a/src/org/apache/http/util/EncodingUtils.java
+++ b/src/org/apache/http/util/EncodingUtils.java
@@ -41,7 +41,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class EncodingUtils {
 
     /**
diff --git a/src/org/apache/http/util/EntityUtils.java b/src/org/apache/http/util/EntityUtils.java
index f9a7cf3..ded6787 100644
--- a/src/org/apache/http/util/EntityUtils.java
+++ b/src/org/apache/http/util/EntityUtils.java
@@ -50,7 +50,12 @@
  * @version $Revision: 569637 $
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class EntityUtils {
 
     /** Disabled default constructor. */
diff --git a/src/org/apache/http/util/ExceptionUtils.java b/src/org/apache/http/util/ExceptionUtils.java
index c7fdccd..014a0dd 100644
--- a/src/org/apache/http/util/ExceptionUtils.java
+++ b/src/org/apache/http/util/ExceptionUtils.java
@@ -39,7 +39,12 @@
  * @author <a href="mailto:laura@lwerner.org">Laura Werner</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class ExceptionUtils {
 
     /** A reference to Throwable's initCause method, or null if it's not there in this JVM */
diff --git a/src/org/apache/http/util/LangUtils.java b/src/org/apache/http/util/LangUtils.java
index a1dee8f..e3ce88b 100644
--- a/src/org/apache/http/util/LangUtils.java
+++ b/src/org/apache/http/util/LangUtils.java
@@ -38,7 +38,12 @@
  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  * 
  * @since 4.0
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public final class LangUtils {
     
     public static final int HASH_SEED = 17;
diff --git a/src/org/apache/http/util/VersionInfo.java b/src/org/apache/http/util/VersionInfo.java
index 0c95594..448700b 100644
--- a/src/org/apache/http/util/VersionInfo.java
+++ b/src/org/apache/http/util/VersionInfo.java
@@ -53,7 +53,12 @@
  *
  * @author <a href="mailto:oleg@ural.ru">Oleg Kalnichevski</a>
  * @author and others
+ *
+ * @deprecated Please use {@link java.net.URL#openConnection} instead.
+ *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
+ *     for further details.
  */
+@Deprecated
 public class VersionInfo {
 
     /** A string constant for unavailable information. */
