diff --git a/openbsc/include/openbsc/mgcp.h b/openbsc/include/openbsc/mgcp.h
index 26a6c33..04643c5 100644
--- a/openbsc/include/openbsc/mgcp.h
+++ b/openbsc/include/openbsc/mgcp.h
@@ -151,7 +151,7 @@
  * format helper functions
  */
 struct msgb *mgcp_handle_message(struct mgcp_config *cfg, struct msgb *msg);
-struct msgb *mgcp_create_response_with_data(int code, const char *msg, const char *trans, const char *data);
+struct msgb *mgcp_create_response_with_data(int code, const char *txt, const char *msg, const char *trans, const char *data);
 
 /* adc helper */
 static inline int mgcp_timeslot_to_endpoint(int multiplex, int timeslot)
diff --git a/openbsc/src/mgcp/mgcp_protocol.c b/openbsc/src/mgcp/mgcp_protocol.c
index 46c98a6..dba4870 100644
--- a/openbsc/src/mgcp/mgcp_protocol.c
+++ b/openbsc/src/mgcp/mgcp_protocol.c
@@ -2,8 +2,8 @@
 /* The protocol implementation */
 
 /*
- * (C) 2009-2010 by Holger Hans Peter Freyther <zecke@selfish.org>
- * (C) 2009-2010 by On-Waves
+ * (C) 2009-2011 by Holger Hans Peter Freyther <zecke@selfish.org>
+ * (C) 2009-2011 by On-Waves
  * All Rights Reserved
  *
  * This program is free software; you can redistribute it and/or modify
@@ -136,8 +136,9 @@
 	return msg;
 }
 
-struct msgb *mgcp_create_response_with_data(int code, const char *msg, const char *trans,
-				    const char *data)
+struct msgb *mgcp_create_response_with_data(int code, const char *txt,
+					    const char *msg, const char *trans,
+					    const char *data)
 {
 	int len;
 	struct msgb *res;
@@ -147,9 +148,9 @@
 		return NULL;
 
 	if (data) {
-		len = snprintf((char *) res->data, 2048, "%d %s\n%s", code, trans, data);
+		len = snprintf((char *) res->data, 2048, "%d %s%s\r\n%s", code, trans, txt, data);
 	} else {
-		len = snprintf((char *) res->data, 2048, "%d %s\n", code, trans);
+		len = snprintf((char *) res->data, 2048, "%d %s%s\r\n", code, trans, txt);
 	}
 
 	res->l2h = msgb_put(res, len);
@@ -157,9 +158,14 @@
 	return res;
 }
 
-static struct msgb *create_response(int code, const char *msg, const char *trans)
+static struct msgb *create_ok_response(int code, const char *msg, const char *trans)
 {
-	return mgcp_create_response_with_data(code, msg, trans, NULL);
+	return mgcp_create_response_with_data(code, " OK", msg, trans, NULL);
+}
+
+static struct msgb *create_err_response(int code, const char *msg, const char *trans)
+{
+	return mgcp_create_response_with_data(code, " FAIL", msg, trans, NULL);
 }
 
 static struct msgb *create_response_with_sdp(struct mgcp_endpoint *endp,
@@ -180,7 +186,7 @@
 			endp->ci, addr, endp->net_end.local_port,
 			endp->bts_end.payload_type, endp->bts_end.payload_type,
 		        endp->cfg->audio_name);
-	return mgcp_create_response_with_data(200, msg, trans_id, sdp_record);
+	return mgcp_create_response_with_data(200, " OK", msg, trans_id, sdp_record);
 }
 
 /*
@@ -342,17 +348,15 @@
 static struct msgb *handle_audit_endpoint(struct mgcp_config *cfg, struct msgb *msg)
 {
 	struct mgcp_msg_ptr data_ptrs[6];
-	int found, response;
+	int found;
 	const char *trans_id;
 	struct mgcp_endpoint *endp;
 
 	found = mgcp_analyze_header(cfg, msg, data_ptrs, ARRAY_SIZE(data_ptrs), &trans_id, &endp);
 	if (found != 0)
-	    response = 500;
+		return create_err_response(500, "AUEP", trans_id);
 	else
-	    response = 200;
-
-	return create_response(response, "AUEP", trans_id);
+		return create_ok_response(200, "AUEP", trans_id);
 }
 
 static int parse_conn_mode(const char *msg, int *conn_mode)
@@ -454,7 +458,7 @@
 
 	found = mgcp_analyze_header(cfg, msg, data_ptrs, ARRAY_SIZE(data_ptrs), &trans_id, &endp);
 	if (found != 0)
-		return create_response(510, "CRCX", trans_id);
+		return create_err_response(510, "CRCX", trans_id);
 
 	if (endp->allocated) {
 		if (cfg->force_realloc) {
@@ -466,7 +470,7 @@
 		} else {
 			LOGP(DMGCP, LOGL_ERROR, "Endpoint is already used. 0x%x\n",
 			     ENDPOINT_NUMBER(endp));
-			return create_response(400, "CRCX", trans_id);
+			return create_err_response(400, "CRCX", trans_id);
 		}
 	}
 
@@ -523,7 +527,7 @@
 			LOGP(DMGCP, LOGL_NOTICE, "CRCX rejected by policy on 0x%x\n",
 			     ENDPOINT_NUMBER(endp));
 			mgcp_free_endp(endp);
-			return create_response(400, "CRCX", trans_id);
+			return create_err_response(400, "CRCX", trans_id);
 			break;
 		case MGCP_POLICY_DEFER:
 			/* stop processing */
@@ -548,12 +552,12 @@
 	LOGP(DMGCP, LOGL_ERROR, "Malformed line: %s on 0x%x with: line_start: %d %d\n",
 		    hexdump(msg->l3h, msgb_l3len(msg)),
 		    ENDPOINT_NUMBER(endp), line_start, i);
-	return create_response(error_code, "CRCX", trans_id);
+	return create_err_response(error_code, "CRCX", trans_id);
 
 error2:
 	mgcp_free_endp(endp);
 	LOGP(DMGCP, LOGL_NOTICE, "Resource error on 0x%x\n", ENDPOINT_NUMBER(endp));
-	return create_response(error_code, "CRCX", trans_id);
+	return create_err_response(error_code, "CRCX", trans_id);
 }
 
 static struct msgb *handle_modify_con(struct mgcp_config *cfg, struct msgb *msg)
@@ -567,11 +571,11 @@
 
 	found = mgcp_analyze_header(cfg, msg, data_ptrs, ARRAY_SIZE(data_ptrs), &trans_id, &endp);
 	if (found != 0)
-		return create_response(510, "MDCX", trans_id);
+		return create_err_response(510, "MDCX", trans_id);
 
 	if (endp->ci == CI_UNUSED) {
 		LOGP(DMGCP, LOGL_ERROR, "Endpoint is not holding a connection. 0x%x\n", ENDPOINT_NUMBER(endp));
-		return create_response(400, "MDCX", trans_id);
+		return create_err_response(400, "MDCX", trans_id);
 	}
 
 	MSG_TOKENIZE_START
@@ -647,7 +651,7 @@
 			     ENDPOINT_NUMBER(endp));
 			if (silent)
 				goto out_silent;
-			return create_response(400, "MDCX", trans_id);
+			return create_err_response(400, "MDCX", trans_id);
 			break;
 		case MGCP_POLICY_DEFER:
 			/* stop processing */
@@ -673,10 +677,10 @@
 	LOGP(DMGCP, LOGL_ERROR, "Malformed line: %s on 0x%x with: line_start: %d %d %d\n",
 		    hexdump(msg->l3h, msgb_l3len(msg)),
 		    ENDPOINT_NUMBER(endp), line_start, i, msg->l3h[line_start]);
-	return create_response(error_code, "MDCX", trans_id);
+	return create_err_response(error_code, "MDCX", trans_id);
 
 error3:
-	return create_response(error_code, "MDCX", trans_id);
+	return create_err_response(error_code, "MDCX", trans_id);
 
 
 out_silent:
@@ -694,11 +698,11 @@
 
 	found = mgcp_analyze_header(cfg, msg, data_ptrs, ARRAY_SIZE(data_ptrs), &trans_id, &endp);
 	if (found != 0)
-		return create_response(error_code, "DLCX", trans_id);
+		return create_err_response(error_code, "DLCX", trans_id);
 
 	if (!endp->allocated) {
 		LOGP(DMGCP, LOGL_ERROR, "Endpoint is not used. 0x%x\n", ENDPOINT_NUMBER(endp));
-		return create_response(400, "DLCX", trans_id);
+		return create_err_response(400, "DLCX", trans_id);
 	}
 
 	MSG_TOKENIZE_START
@@ -732,7 +736,7 @@
 			     ENDPOINT_NUMBER(endp));
 			if (silent)
 				goto out_silent;
-			return create_response(400, "DLCX", trans_id);
+			return create_err_response(400, "DLCX", trans_id);
 			break;
 		case MGCP_POLICY_DEFER:
 			/* stop processing */
@@ -756,16 +760,16 @@
 
 	if (silent)
 		goto out_silent;
-	return create_response(250, "DLCX", trans_id);
+	return create_ok_response(250, "DLCX", trans_id);
 
 error:
 	LOGP(DMGCP, LOGL_ERROR, "Malformed line: %s on 0x%x with: line_start: %d %d\n",
 		    hexdump(msg->l3h, msgb_l3len(msg)),
 		    ENDPOINT_NUMBER(endp), line_start, i);
-	return create_response(error_code, "DLCX", trans_id);
+	return create_err_response(error_code, "DLCX", trans_id);
 
 error3:
-	return create_response(error_code, "DLCX", trans_id);
+	return create_err_response(error_code, "DLCX", trans_id);
 
 out_silent:
 	return NULL;
