diff --git a/xmlout.js b/xmlout.js
index 1ad27dc..e744ccd 100644
--- a/xmlout.js
+++ b/xmlout.js
@@ -168,6 +168,24 @@ function _topupRequest(task, pendingOnConnectError) {
     });
 }
 
+function snSanitizer(sn) {
+    if (!sn && typeof sn === 'string') {
+        return;
+    }
+
+    sn = sn.replace(/[^A-Z0-9\/]/g, '-');
+    sn = sn.replace(/-+/g, '-');
+    sn = sn.replace(/^-+/, '');
+    sn = sn.replace(/-+$/, '');
+    sn = sn.trim();
+
+    return sn;
+}
+
+function msgSanitizer(msg) {
+    return msg.replace(/;\s*SN=.+?;/, '; ').trim();
+}
+
 function prefixMessageWithSN(data) {
 
     if (data['RESPONSECODE'] != '00') {
@@ -188,16 +206,11 @@ function prefixMessageWithSN(data) {
         }
     }
 
+    sn = snSanitizer(sn);
+
     if (sn) {
-        //sn = sn.replace(/ /g, '-');
-        //sn = sn.replace(/[\()]/g, '-');
-        sn = sn.replace(/[^A-Z0-9\/]/g, '-');
-        sn = sn.replace(/-+/g, '-');
-        sn = sn.replace(/^-+/, '');
-        sn = sn.replace(/-+$/, '');
-        sn = sn.replace(/;\s*SN=.+?;/, '; ');
-        sn = sn.trim();
-        return 'SN=' + sn + '; ' + data['MESSAGE'];
+        msg = 'SN=' + sn + '; ' + data['MESSAGE'];
+        return msgSanitizer(msg);
     }
 
     return data['MESSAGE'];