diff --git a/src/common/address.c b/src/common/address.c
index e88869f1d8747601d171f736e7bce12568dd3071..e5862be1e9b0ad3bdc73bbba6e356dbbd6aba297 100644
--- a/src/common/address.c
+++ b/src/common/address.c
@@ -1697,3 +1697,15 @@ tor_addr_hostname_is_local(const char *name)
     !strcasecmpend(name, ".local");
 }
 
+
+/** Return a newly allocated tor_addr_port_t with <b>addr</b> and
+    <b>port</b> filled in. */
+tor_addr_port_t *
+tor_addr_port_new(const tor_addr_t *addr, uint16_t port)
+{
+  tor_addr_port_t *ap = tor_malloc_zero(sizeof(tor_addr_port_t));
+  if (addr)
+    tor_addr_copy(&ap->addr, addr);
+  ap->port = port;
+  return ap;
+}
diff --git a/src/common/address.h b/src/common/address.h
index c6c126862a7055b0a32a81cd775a4c15b744222a..27dff662044b627518d980dad6b4a726eb80309a 100644
--- a/src/common/address.h
+++ b/src/common/address.h
@@ -221,5 +221,7 @@ int tor_inet_ntoa(const struct in_addr *in, char *buf, size_t buf_len);
 char *tor_dup_ip(uint32_t addr) ATTR_MALLOC;
 int get_interface_address(int severity, uint32_t *addr);
 
+tor_addr_port_t *tor_addr_port_new(const tor_addr_t *addr, uint16_t port);
+
 #endif
 
diff --git a/src/or/dirvote.c b/src/or/dirvote.c
index e6601cffb71ef459b6d048a0df1b20ad046a734d..2c9e56d7afa715f9a5e4e959c2cac9d3b3ed51e4 100644
--- a/src/or/dirvote.c
+++ b/src/or/dirvote.c
@@ -479,8 +479,8 @@ compute_routerstatus_consensus(smartlist_t *votes, int consensus_method,
       if (compare_vote_rs(most, rs) == 0 &&
           !tor_addr_is_null(&rs->status.ipv6_addr)
           && rs->status.ipv6_orport) {
-        smartlist_add(alt_orports, tor_addr_port_alloc(&rs->status.ipv6_addr,
-                                                       rs->status.ipv6_orport));
+        smartlist_add(alt_orports, tor_addr_port_new(&rs->status.ipv6_addr,
+                                                     rs->status.ipv6_orport));
         log_debug(LD_DIR, "picking %s:%d (%s) for voting on \"a\" lines", /* FIXME: remove */
                   fmt_and_decorate_addr(&rs->status.ipv6_addr), rs->status.ipv6_orport,
                   rs->status.nickname);