diff --git a/ChangeLog b/ChangeLog
index 92e1ec1e5b9e11e5d20c4708395f5ed9f9ee665c..bbd37136a91d3c23d15d95cb8b09291622f982cc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -20,6 +20,9 @@ Changes in version 0.2.2.9-alpha - 2010-??-??
       implemented in the past.
     - Avoid a bogus overlapped memcpy in tor_addr_copy().  Found by
       "memcpyfail".
+    - Make the DNSPort option work with libevent 2.x. Don't alter the
+      behaviour for libevent 1.x. Fixes bug 1143. Found by SwissTorExit.
+
 
   o Code simplifications and refactoring:
     - Generate our manpage and HTML documentation using Asciidoc.  This
diff --git a/src/common/compat_libevent.h b/src/common/compat_libevent.h
index d2e76ce4e2ff54ccc3b3cad6141dca2ea9c5974c..eedd9da43d173e75e0a25dd86efdac667ff63210 100644
--- a/src/common/compat_libevent.h
+++ b/src/common/compat_libevent.h
@@ -23,6 +23,10 @@ void suppress_libevent_log_msg(const char *msg);
 #define tor_evtimer_new   evtimer_new
 #define tor_evsignal_new  evsignal_new
 #define tor_event_free    event_free
+#define tor_evdns_add_server_port(sock, tcp, cb, data) \
+  evdns_add_server_port_with_base(tor_libevent_get_base(), \
+  (sock),(tcp),(cb),(data));
+
 #else
 struct event *tor_event_new(struct event_base * base, evutil_socket_t sock,
            short what, void (*cb)(evutil_socket_t, short, void *), void *arg);
@@ -31,6 +35,7 @@ struct event *tor_evtimer_new(struct event_base * base,
 struct event *tor_evsignal_new(struct event_base * base, int sig,
             void (*cb)(evutil_socket_t, short, void *), void *arg);
 void tor_event_free(struct event *ev);
+#define tor_evdns_add_server_port evdns_add_server_port
 #endif
 
 /* XXXX022 If we can drop support for Libevent before 1.1, we can
diff --git a/src/or/dnsserv.c b/src/or/dnsserv.c
index 256dcbd75ba337ef91c62253f2849effac8fef83..8e3e55e795d5afee5cd93affa8e8e4bfcab4369c 100644
--- a/src/or/dnsserv.c
+++ b/src/or/dnsserv.c
@@ -299,8 +299,8 @@ dnsserv_configure_listener(connection_t *conn)
   tor_assert(conn->s >= 0);
   tor_assert(conn->type == CONN_TYPE_AP_DNS_LISTENER);
 
-  conn->dns_server_port = evdns_add_server_port(conn->s, 0,
-                                                evdns_server_callback, NULL);
+  conn->dns_server_port =
+    tor_evdns_add_server_port(conn->s, 0, evdns_server_callback, NULL);
 }
 
 /** Free the evdns server port for <b>conn</b>, which must be an