diff -Naur orig-gateway-1.5.0/gw/smsbox.c gateway-1.5.0/gw/smsbox.c
--- orig-gateway-1.5.0/gw/smsbox.c	2010-10-07 15:03:35.000000000 +0100
+++ gateway-1.5.0/gw/smsbox.c	2012-08-07 16:25:49.991913516 +0100
@@ -150,6 +150,8 @@
 static Dict *client_dict = NULL;
 static List *sendsms_reply_hdrs = NULL;
 
+static int concatenated_sms_dlr_for_all_parts = 0;
+
 /***********************************************************************
  * Communication with the bearerbox.
  */
@@ -361,7 +363,7 @@
     else
     	msg_sequence = 0;
 
-    list = sms_split(msg, header, footer, suffix, split_chars, catenate,
+    list = sms_split(msg, header, footer, suffix, split_chars, catenate, concatenated_sms_dlr_for_all_parts,
     	    	     msg_sequence, max_msgs, sms_max_length);
     msg_count = gwlist_len(list);
     
@@ -3411,6 +3413,8 @@
     /* should smsbox reply to sendsms immediate or wait for bearerbox ack */
     cfg_get_bool(&immediate_sendsms_reply, grp, octstr_imm("immediate-sendsms-reply"));
 
+    cfg_get_bool(&concatenated_sms_dlr_for_all_parts, grp, octstr_imm("concatenated-sms-dlr-for-all-parts"));
+
     /* determine which timezone we use for access logging */
     if ((p = cfg_get(grp, octstr_imm("access-log-time"))) != NULL) {
         lf = (octstr_case_compare(p, octstr_imm("gmt")) == 0) ? 0 : 1;
diff -Naur orig-gateway-1.5.0/gw/sms.c gateway-1.5.0/gw/sms.c
--- orig-gateway-1.5.0/gw/sms.c	2010-10-07 15:03:35.000000000 +0100
+++ gateway-1.5.0/gw/sms.c	2012-08-07 16:25:49.991913516 +0100
@@ -301,7 +301,7 @@
 
 List *sms_split(Msg *orig, Octstr *header, Octstr *footer, 
                 Octstr *nonlast_suffix, Octstr *split_chars, 
-                int catenate, unsigned long msg_sequence,
+                int catenate, int concatenated_sms_dlr_for_all_parts, unsigned long msg_sequence,
                 int max_messages, int max_octets)
 {
     long max_part_len, udh_len, hf_len, nlsuf_len;
@@ -347,11 +347,12 @@
          * if its a DLR request message getting split, 
          * only ask DLR for the first one 
          */
-        if ((msgno > 1) && DLR_IS_ENABLED(part->sms.dlr_mask)) {
+        if (!concatenated_sms_dlr_for_all_parts && (msgno > 1) && DLR_IS_ENABLED(part->sms.dlr_mask)) {
             octstr_destroy(part->sms.dlr_url);
             part->sms.dlr_url = NULL;
             part->sms.dlr_mask = 0;
         }
+
         octstr_destroy(part->sms.msgdata);
         if (sms_msgdata_len(temp) <= max_part_len || msgno == max_messages)
             last = 1;
diff -Naur orig-gateway-1.5.0/gw/smscconn.c gateway-1.5.0/gw/smscconn.c
--- orig-gateway-1.5.0/gw/smscconn.c	2010-10-07 15:03:35.000000000 +0100
+++ gateway-1.5.0/gw/smscconn.c	2012-08-07 16:25:49.987913516 +0100
@@ -238,6 +238,8 @@
     if (cfg_get_integer(&conn->max_sms_octets, grp, octstr_imm("max-sms-octets")) == -1)
         conn->max_sms_octets = MAX_SMS_OCTETS;
 
+    cfg_get_bool(&conn->concatenated_sms_dlr_for_all_parts, grp, octstr_imm("concatenated-sms-dlr-for-all-parts"));
+
     /* open a smsc-id specific log-file in exlusive mode */
     if (conn->log_file)
         conn->log_idx = log_open(octstr_get_cstr(conn->log_file), 
@@ -532,7 +534,7 @@
         normalize_number(uf, &(msg->sms.receiver));
 
         /* split msg */
-        parts = sms_split(msg, NULL, NULL, NULL, NULL, 1, 
+        parts = sms_split(msg, NULL, NULL, NULL, NULL, 1, conn->concatenated_sms_dlr_for_all_parts,
             counter_increase(split_msg_counter) & 0xff, 0xff, conn->max_sms_octets);
         if (gwlist_len(parts) == 1) {
             /* don't create split_parts of sms fit into one */
diff -Naur orig-gateway-1.5.0/gw/smscconn_p.h gateway-1.5.0/gw/smscconn_p.h
--- orig-gateway-1.5.0/gw/smscconn_p.h	2010-10-07 15:03:35.000000000 +0100
+++ gateway-1.5.0/gw/smscconn_p.h	2012-08-07 16:25:49.987913516 +0100
@@ -236,6 +236,7 @@
     void (*start_conn) (SMSCConn *conn);
     void (*stop_conn) (SMSCConn *conn);
 
+    int concatenated_sms_dlr_for_all_parts;
 
     void *data;			/* SMSC specific stuff */
 };
diff -Naur orig-gateway-1.5.0/gw/sms.h gateway-1.5.0/gw/sms.h
--- orig-gateway-1.5.0/gw/sms.h	2010-10-07 15:03:35.000000000 +0100
+++ gateway-1.5.0/gw/sms.h	2012-08-07 16:25:49.983913516 +0100
@@ -189,6 +189,7 @@
  */
 List *sms_split(Msg *orig, Octstr *header, Octstr *footer,
                 Octstr *nonlast_suffix, Octstr *split_chars, int catenate,
+                int concatenated_sms_dlr_for_all_parts,
                 unsigned long msg_sequence, int max_messages, int max_octets);
 
 /**
diff -Naur orig-gateway-1.5.0/gw/wapbox.c gateway-1.5.0/gw/wapbox.c
--- orig-gateway-1.5.0/gw/wapbox.c	2010-10-07 15:03:35.000000000 +0100
+++ gateway-1.5.0/gw/wapbox.c	2012-08-07 16:25:49.991913516 +0100
@@ -457,7 +457,7 @@
     } else {
         msg_sequence = counter_increase(sequence_counter) & 0xff;
         msg = pack_sms_datagram(dgram);
-        sms_datagrams = sms_split(msg, NULL, NULL, NULL, NULL, concatenation, 
+        sms_datagrams = sms_split(msg, NULL, NULL, NULL, NULL, concatenation, 1,
                                   msg_sequence, max_messages, MAX_SMS_OCTETS);
         debug("wap",0,"WDP (wapbox): delivering %ld segments to bearerbox",
               gwlist_len(sms_datagrams));
diff -Naur orig-gateway-1.5.0/gwlib/cfg.def gateway-1.5.0/gwlib/cfg.def
--- orig-gateway-1.5.0/gwlib/cfg.def	2010-10-07 15:03:35.000000000 +0100
+++ gateway-1.5.0/gwlib/cfg.def	2012-08-07 16:25:49.915913519 +0100
@@ -283,6 +283,7 @@
     OCTSTR(immediate-sendsms-reply)
     OCTSTR(max-pending-requests)
     OCTSTR(http-timeout)
+    OCTSTR(concatenated-sms-dlr-for-all-parts)
 )
 
 
@@ -412,6 +413,7 @@
     OCTSTR(generic-status-sent)
     OCTSTR(generic-status-error)
     OCTSTR(generic-foreign-id-regex)
+    OCTSTR(concatenated-sms-dlr-for-all-parts)
 )
 
 
diff -Naur orig-gateway-1.5.0/utils/mtbatch.c gateway-1.5.0/utils/mtbatch.c
--- orig-gateway-1.5.0/utils/mtbatch.c	2010-10-07 15:03:35.000000000 +0100
+++ gateway-1.5.0/utils/mtbatch.c	2012-08-07 16:25:49.935913516 +0100
@@ -217,7 +217,7 @@
         msg->sms.boxc_id = octstr_duplicate(smsbox_id);
     }
     
-    list = sms_split(msg, NULL, NULL, NULL, NULL, 1, 0, 100, MAX_SMS_OCTETS);
+    list = sms_split(msg, NULL, NULL, NULL, NULL, 1, 1, 0, 100, MAX_SMS_OCTETS);
     msg_count = gwlist_len(list);
     gwlist_destroy(list, msg_destroy_item);
 
