diff --git a/src/net_socket.c b/src/net_socket.c
index ed136c5a..4b94b416 100644
--- a/src/net_socket.c
+++ b/src/net_socket.c
@@ -442,7 +442,7 @@ static void handle_meta_io(void *data, int flags) {
 }
 
 bool do_outgoing_connection(outgoing_t *outgoing) {
-	char *address, *port, *space;
+	char *address;
 	struct addrinfo *proxyai = NULL;
 	int result;
 
@@ -454,21 +454,12 @@ begin:
 			return false;
 		}
 
-		get_config_string(outgoing->cfg, &address);
-
-		space = strchr(address, ' ');
-		if(space) {
-			port = xstrdup(space + 1);
-			*space = 0;
-		} else {
-			if(!get_config_string(lookup_config(outgoing->config_tree, "Port"), &port))
-				port = xstrdup("655");
+		if (!get_config_string(outgoing->cfg, &address)) {
+			logger(DEBUG_CONNECTIONS, LOG_ERR, "Could not set up a meta connection to %s - address not found", outgoing->name);
+			return false;
 		}
 
-		outgoing->ai = str2addrinfo(address, port, SOCK_STREAM);
-		free(address);
-		free(port);
-
+		outgoing->ai = config_address2addrinfo(address, SOCK_STREAM);
 		outgoing->aip = outgoing->ai;
 		outgoing->cfg = lookup_config_next(outgoing->config_tree, outgoing->cfg);
 	}
@@ -613,14 +604,33 @@ void setup_outgoing_connection(outgoing_t *outgoing) {
 		}
 	}
 
-	if (!outgoing->config_tree) {
+	// Prefer the address discovered via SLPD
+	if (slpdinterval && n->slpd_address)
+		outgoing->cfg = n->slpd_address;
+	else if (!outgoing->config_tree) {
 		init_configuration(&outgoing->config_tree);
 		read_host_config(outgoing->config_tree, outgoing->name);
-		outgoing->cfg = lookup_config(outgoing->config_tree, "Address");
-	}
+		char *address, *port;
 
-	if (slpdinterval && !outgoing->cfg && n->slpd_address)
-		outgoing->cfg = n->slpd_address;
+		if(!get_config_string(lookup_config(outgoing->config_tree, "Port"), &port))
+			port = xstrdup("655");
+
+		if(get_config_string(lookup_config(outgoing->config_tree, "Address"), &address)) {
+			char fullhost[MAXSIZE] = { 0 };
+			config_t *cfg = new_config();
+
+			if (!strchr(address, ' ')) {
+				snprintf(fullhost, MAXSIZE-1, "%s %s", address, port);
+				cfg->value = xstrdup(fullhost);
+			} else
+				cfg->value = xstrdup(address);
+
+			cfg->variable = xstrdup("Address");
+			cfg->file = NULL;
+			cfg->line = -1;
+			outgoing->cfg = cfg;
+		}
+	}
 
 	if(!outgoing->cfg) {
 		if(n)