diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c
index b0fea7c..b391fc2 100644
--- a/profiles/audio/a2dp.c
+++ b/profiles/audio/a2dp.c
@@ -225,6 +225,29 @@
 	va_end(args);
 }
 
+static int error_to_errno(struct avdtp_error *err)
+{
+	int perr;
+
+	if (!err)
+		return 0;
+
+	if (avdtp_error_category(err) != AVDTP_ERRNO)
+		return -EIO;
+
+	perr = -avdtp_error_posix_errno(err);
+	switch (-perr) {
+	case -EHOSTDOWN:
+	case -ECONNABORTED:
+		return perr;
+	default:
+		/*
+		 * An unexpect error has occurred setup may be attempted again.
+		 */
+		return -EAGAIN;
+	}
+}
+
 static gboolean finalize_config(gpointer data)
 {
 	struct a2dp_setup *s = data;
@@ -239,8 +262,8 @@
 		if (!cb->config_cb)
 			continue;
 
-		cb->config_cb(s->session, s->sep, stream, s->err,
-							cb->user_data);
+		cb->config_cb(s->session, s->sep, stream,
+				error_to_errno(s->err), cb->user_data);
 		setup_cb_free(cb);
 	}
 
@@ -260,7 +283,8 @@
 		if (!cb->resume_cb)
 			continue;
 
-		cb->resume_cb(s->session, s->err, cb->user_data);
+		cb->resume_cb(s->session, error_to_errno(s->err),
+							cb->user_data);
 		setup_cb_free(cb);
 	}
 
@@ -280,7 +304,8 @@
 		if (!cb->suspend_cb)
 			continue;
 
-		cb->suspend_cb(s->session, s->err, cb->user_data);
+		cb->suspend_cb(s->session, error_to_errno(s->err),
+							cb->user_data);
 		setup_cb_free(cb);
 	}
 
@@ -316,7 +341,8 @@
 		if (!cb->discover_cb)
 			continue;
 
-		cb->discover_cb(s->session, s->seps, s->err, cb->user_data);
+		cb->discover_cb(s->session, s->seps, error_to_errno(s->err),
+								cb->user_data);
 		setup_cb_free(cb);
 	}
 }
diff --git a/profiles/audio/a2dp.h b/profiles/audio/a2dp.h
index 19d1877..2c388bb 100644
--- a/profiles/audio/a2dp.h
+++ b/profiles/audio/a2dp.h
@@ -53,17 +53,14 @@
 };
 
 typedef void (*a2dp_discover_cb_t) (struct avdtp *session, GSList *seps,
-					struct avdtp_error *err,
-					void *user_data);
+						int err, void *user_data);
 typedef void (*a2dp_select_cb_t) (struct avdtp *session,
 					struct a2dp_sep *sep, GSList *caps,
 					void *user_data);
 typedef void (*a2dp_config_cb_t) (struct avdtp *session, struct a2dp_sep *sep,
-					struct avdtp_stream *stream,
-					struct avdtp_error *err,
+					struct avdtp_stream *stream, int err,
 					void *user_data);
-typedef void (*a2dp_stream_cb_t) (struct avdtp *session,
-					struct avdtp_error *err,
+typedef void (*a2dp_stream_cb_t) (struct avdtp *session, int err,
 					void *user_data);
 
 struct a2dp_sep *a2dp_add_sep(struct btd_adapter *adapter, uint8_t type,
diff --git a/profiles/audio/sink.c b/profiles/audio/sink.c
index ac7237b..3167b3a 100644
--- a/profiles/audio/sink.c
+++ b/profiles/audio/sink.c
@@ -180,8 +180,8 @@
 }
 
 static void stream_setup_complete(struct avdtp *session, struct a2dp_sep *sep,
-					struct avdtp_stream *stream,
-					struct avdtp_error *err, void *user_data)
+					struct avdtp_stream *stream, int err,
+					void *user_data)
 {
 	struct sink *sink = user_data;
 
@@ -192,11 +192,7 @@
 
 	avdtp_unref(sink->session);
 	sink->session = NULL;
-	if (avdtp_error_category(err) == AVDTP_ERRNO
-				&& avdtp_error_posix_errno(err) != EHOSTDOWN)
-		btd_service_connecting_complete(sink->service, -EAGAIN);
-	else
-		btd_service_connecting_complete(sink->service, -EIO);
+	btd_service_connecting_complete(sink->service, err);
 }
 
 static void select_complete(struct avdtp *session, struct a2dp_sep *sep,
@@ -221,25 +217,17 @@
 	sink->session = NULL;
 }
 
-static void discovery_complete(struct avdtp *session, GSList *seps, struct avdtp_error *err,
-				void *user_data)
+static void discovery_complete(struct avdtp *session, GSList *seps, int err,
+							void *user_data)
 {
 	struct sink *sink = user_data;
-	int id, perr;
+	int id;
 
 	sink->connect_id = 0;
 
 	if (err) {
 		avdtp_unref(sink->session);
 		sink->session = NULL;
-
-		perr = -avdtp_error_posix_errno(err);
-		if (perr != -EHOSTDOWN) {
-			if (avdtp_error_category(err) == AVDTP_ERRNO)
-				perr = -EAGAIN;
-			else
-				perr = -EIO;
-		}
 		goto failed;
 	}
 
@@ -248,7 +236,7 @@
 	id = a2dp_select_capabilities(sink->session, AVDTP_SEP_TYPE_SINK, NULL,
 						select_complete, sink);
 	if (id == 0) {
-		perr = -EIO;
+		err = -EIO;
 		goto failed;
 	}
 
@@ -256,7 +244,7 @@
 	return;
 
 failed:
-	btd_service_connecting_complete(sink->service, perr);
+	btd_service_connecting_complete(sink->service, err);
 	avdtp_unref(sink->session);
 	sink->session = NULL;
 }
diff --git a/profiles/audio/source.c b/profiles/audio/source.c
index 372b132..493524e 100644
--- a/profiles/audio/source.c
+++ b/profiles/audio/source.c
@@ -177,8 +177,8 @@
 }
 
 static void stream_setup_complete(struct avdtp *session, struct a2dp_sep *sep,
-					struct avdtp_stream *stream,
-					struct avdtp_error *err, void *user_data)
+					struct avdtp_stream *stream, int err,
+					void *user_data)
 {
 	struct source *source = user_data;
 
@@ -189,11 +189,7 @@
 
 	avdtp_unref(source->session);
 	source->session = NULL;
-	if (avdtp_error_category(err) == AVDTP_ERRNO
-				&& avdtp_error_posix_errno(err) != EHOSTDOWN)
-		btd_service_connecting_complete(source->service, -EAGAIN);
-	else
-		btd_service_connecting_complete(source->service, -EIO);
+	btd_service_connecting_complete(source->service, err);
 }
 
 static void select_complete(struct avdtp *session, struct a2dp_sep *sep,
@@ -221,34 +217,26 @@
 	source->session = NULL;
 }
 
-static void discovery_complete(struct avdtp *session, GSList *seps, struct avdtp_error *err,
-				void *user_data)
+static void discovery_complete(struct avdtp *session, GSList *seps, int err,
+							void *user_data)
 {
 	struct source *source = user_data;
-	int id, perr;
+	int id;
 
 	source->connect_id = 0;
 
 	if (err) {
 		avdtp_unref(source->session);
 		source->session = NULL;
-
-		perr = -avdtp_error_posix_errno(err);
-		if (perr != -EHOSTDOWN) {
-			if (avdtp_error_category(err) == AVDTP_ERRNO)
-				perr = -EAGAIN;
-			else
-				perr = -EIO;
-		}
 		goto failed;
 	}
 
 	DBG("Discovery complete");
 
-	id = a2dp_select_capabilities(source->session, AVDTP_SEP_TYPE_SOURCE, NULL,
-						select_complete, source);
+	id = a2dp_select_capabilities(source->session, AVDTP_SEP_TYPE_SOURCE,
+					NULL, select_complete, source);
 	if (id == 0) {
-		perr = -EIO;
+		err = -EIO;
 		goto failed;
 	}
 
@@ -256,7 +244,7 @@
 	return;
 
 failed:
-	btd_service_connecting_complete(source->service, perr);
+	btd_service_connecting_complete(source->service, err);
 	avdtp_unref(source->session);
 	source->session = NULL;
 }
diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 4121e52..b9d357e 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -283,8 +283,8 @@
 	return TRUE;
 }
 
-static void a2dp_resume_complete(struct avdtp *session,
-				struct avdtp_error *err, void *user_data)
+static void a2dp_resume_complete(struct avdtp *session, int err,
+							void *user_data)
 {
 	struct media_owner *owner = user_data;
 	struct media_request *req = owner->pending;
@@ -362,8 +362,8 @@
 	return id;
 }
 
-static void a2dp_suspend_complete(struct avdtp *session,
-				struct avdtp_error *err, void *user_data)
+static void a2dp_suspend_complete(struct avdtp *session, int err,
+							void *user_data)
 {
 	struct media_owner *owner = user_data;
 	struct media_transport *transport = owner->transport;
