diff --git a/ares/CHANGES b/ares/CHANGES
index 6d2a4f19d542ee19df15dcea38ce4bcc3b0913fa..cfcd2e7b3be8799182cdc731a103da0668df4bd8 100644
--- a/ares/CHANGES
+++ b/ares/CHANGES
@@ -4,6 +4,13 @@
 - Jakub Hrozek fixed more function prototypes in man pages to sync them
   with the ones declared in ares.h
 
+- Jakub Hrozek renamed addrttl and addr6ttl structs to ares_addrttl and
+  ares_addr6ttl in order to prevent name space pollution, along with
+  necessary changes to code base and man pages.This change does not break
+  ABI, there is no need to recompile existing applications. But existing
+  applications using these structs with the old name will need source code
+  adjustments when recompiled using c-ares 1.6.1.
+
 * November 20, 2009 (Yang Tse)
 - Fixed several function prototypes in man pages that were out of sync
   with the ones declared in ares.h
diff --git a/ares/RELEASE-NOTES b/ares/RELEASE-NOTES
index 1ecc17622430536726109715362b1c862f5d40a6..0de52de0d583bdbb284810c17ef509736a1e5e8a 100644
--- a/ares/RELEASE-NOTES
+++ b/ares/RELEASE-NOTES
@@ -13,6 +13,7 @@ Changed:
  o added ares_parse_srv_reply()
  o added ares_parse_txt_reply()
  o new --enable-symbol-hiding configure option
+ o addrttl and addr6ttl structs renamed to ares_addrttl and ares_addr6ttl
 
 Fixed:
 
diff --git a/ares/ares.h b/ares/ares.h
index e79debddbb950bf5bbe8c8a1d9848d22fe664152..3e45a90f25a063b867c63115bb1126b511f78d2b 100644
--- a/ares/ares.h
+++ b/ares/ares.h
@@ -416,15 +416,12 @@ struct ares_in6_addr {
   } _S6_un;
 };
 
-/*
- * TODO: the structs 'addrttl' and 'addr6ttl' really should get their names
- * prefixed with ares_ to keep them in our own "name space".
- */
-struct addrttl {
+struct ares_addrttl {
   struct in_addr ipaddr;
   int            ttl;
 };
-struct addr6ttl {
+
+struct ares_addr6ttl {
   struct ares_in6_addr ip6addr;
   int             ttl;
 };
@@ -454,13 +451,13 @@ struct ares_txt_reply {
 CARES_EXTERN int ares_parse_a_reply(const unsigned char *abuf,
                                     int alen,
                                     struct hostent **host,
-                                    struct addrttl *addrttls,
+                                    struct ares_addrttl *addrttls,
                                     int *naddrttls);
 
 CARES_EXTERN int ares_parse_aaaa_reply(const unsigned char *abuf,
                                        int alen,
                                        struct hostent **host,
-                                       struct addr6ttl *addrttls,
+                                       struct ares_addr6ttl *addrttls,
                                        int *naddrttls);
 
 CARES_EXTERN int ares_parse_ptr_reply(const unsigned char *abuf,
diff --git a/ares/ares_parse_a_reply.3 b/ares/ares_parse_a_reply.3
index 10c06501cd20301038cb39fdf0498c53cc2792d1..f7debb9123e93e24ae122d40616ad7a4ae2065bc 100644
--- a/ares/ares_parse_a_reply.3
+++ b/ares/ares_parse_a_reply.3
@@ -23,7 +23,7 @@ ares_parse_a_reply \- Parse a reply to a DNS query of type A
 .PP
 .B int ares_parse_a_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
 .B 	struct hostent **\fIhost\fP,
-.B      struct addrttl *\fIaddrttls\fB, int *\fInaddrttls\fB);
+.B      struct ares_addrttl *\fIaddrttls\fB, int *\fInaddrttls\fB);
 .fi
 .SH DESCRIPTION
 The
@@ -31,7 +31,7 @@ The
 function parses the response to a query of type A into a
 .BR "struct hostent"
 and/or an array of
-.BR "struct addrttls" . 
+.BR "struct ares_addrttls" . 
 The parameters
 .I abuf
 and
@@ -51,7 +51,7 @@ and
 .IR naddrttls
 are both nonnull,
 then up to *naddrttls
-.BR "struct addrttl"
+.BR "struct ares_addrttl"
 records are stored in the array pointed to by addrttls,
 and then *naddrttls is set to the number of records so stored.
 Note that the memory for these records is supplied by the caller.
diff --git a/ares/ares_parse_a_reply.c b/ares/ares_parse_a_reply.c
index 3d59c8aa4c0815dc180ffda35dc5637e2b766163..a6ed7dd2f05759d29becef2b71b2a4be4d06dc37 100644
--- a/ares/ares_parse_a_reply.c
+++ b/ares/ares_parse_a_reply.c
@@ -54,7 +54,7 @@
 
 int ares_parse_a_reply(const unsigned char *abuf, int alen,
                        struct hostent **host,
-                       struct addrttl *addrttls, int *naddrttls)
+                       struct ares_addrttl *addrttls, int *naddrttls)
 {
   unsigned int qdcount, ancount;
   int status, i, rr_type, rr_class, rr_len, rr_ttl, naddrs;
@@ -157,7 +157,7 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen,
             }
           if (naddrs < max_addr_ttls)
             {
-              struct addrttl * const at = &addrttls[naddrs];
+              struct ares_addrttl * const at = &addrttls[naddrs];
               if (aptr + sizeof(struct in_addr) > abuf + alen)
               {
                 status = ARES_EBADRESP;
diff --git a/ares/ares_parse_aaaa_reply.3 b/ares/ares_parse_aaaa_reply.3
index f25cb937292c692b1ea841975bd64a229f55e162..0f77c0323692e6d7e3fb3338f7e1d22f32e4fab7 100644
--- a/ares/ares_parse_aaaa_reply.3
+++ b/ares/ares_parse_aaaa_reply.3
@@ -23,7 +23,7 @@ ares_parse_aaaa_reply \- Parse a reply to a DNS query of type AAAA
 .PP
 .B int ares_parse_aaaa_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
 .B 	struct hostent **\fIhost\fP,         
-.B      struct addr6ttl *\fIaddrttls\fB, int *\fInaddrttls\fB);
+.B      struct ares_addr6ttl *\fIaddrttls\fB, int *\fInaddrttls\fB);
 .fi
 .SH DESCRIPTION
 The
@@ -31,7 +31,7 @@ The
 function parses the response to a query of type AAAA into a
 .BR "struct hostent"
 and/or an array of
-.BR "struct addr6ttl" . 
+.BR "struct ares_addr6ttl" . 
 The parameters
 .I abuf
 and
@@ -51,7 +51,7 @@ and
 .IR naddrttls
 are both nonnull,
 then up to *naddrttls
-.BR "struct addr6ttl"
+.BR "struct ares_addr6ttl"
 records are stored in the array pointed to by addrttls,
 and then *naddrttls is set to the number of records so stored.
 Note that the memory for these records is supplied by the caller.
diff --git a/ares/ares_parse_aaaa_reply.c b/ares/ares_parse_aaaa_reply.c
index 58c6b8ab84ec130964d84459abfbfd8f3a3aeaa6..6d54667554e965215e825918fd4251c2d5bf6cf5 100644
--- a/ares/ares_parse_aaaa_reply.c
+++ b/ares/ares_parse_aaaa_reply.c
@@ -55,7 +55,7 @@
 #include "ares_private.h"
 
 int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
-                          struct hostent **host, struct addr6ttl *addrttls,
+                          struct hostent **host, struct ares_addr6ttl *addrttls,
                           int *naddrttls)
 {
   unsigned int qdcount, ancount;
@@ -157,7 +157,7 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
             }
           if (naddrs < max_addr_ttls)
             {
-              struct addr6ttl * const at = &addrttls[naddrs];
+              struct ares_addr6ttl * const at = &addrttls[naddrs];
               if (aptr + sizeof(struct in6_addr) > abuf + alen)
               {
                 status = ARES_EBADRESP;