diff --git a/nodes/core/io/25-serial.html b/nodes/core/io/25-serial.html
index aad37dce8..225e4dc3b 100644
--- a/nodes/core/io/25-serial.html
+++ b/nodes/core/io/25-serial.html
@@ -27,10 +27,9 @@
diff --git a/nodes/core/io/25-serial.js b/nodes/core/io/25-serial.js
index a24dcdf03..5a3f92d1d 100644
--- a/nodes/core/io/25-serial.js
+++ b/nodes/core/io/25-serial.js
@@ -114,7 +114,13 @@ module.exports = function(RED) {
this.serialConfig.stopbits,
this.serialConfig.newline
);
- var splitc = new Buffer(node.serialConfig.newline.replace("\\n","\n").replace("\\r","\r").replace("\\t","\t").replace("\\e","\e").replace("\\f","\f").replace("\\0","\0"));
+
+ if (node.serialConfig.newline.substr(0,2) == "0x") {
+ var splitc = new Buffer([parseInt(node.serialConfig.newline)]);
+ } else {
+ var splitc = new Buffer(node.serialConfig.newline.replace("\\n","\n").replace("\\r","\r").replace("\\t","\t").replace("\\e","\e").replace("\\f","\f").replace("\\0","\0"));
+ }
+
this.port.on('data', function(msg) {
// single char buffer
if ((node.serialConfig.newline == 0)||(node.serialConfig.newline == "")) {
@@ -145,9 +151,9 @@ module.exports = function(RED) {
else if (node.serialConfig.out === "count") {
buf[i] = msg;
i += 1;
- if ( i >= Number(node.serialConfig.newline)) {
+ if ( i >= parseInt(node.serialConfig.newline)) {
var m = new Buffer(i);
- buf.copy(m,0,0,i-1);
+ buf.copy(m,0,0,i);
if (node.serialConfig.bin !== "bin") { m = m.toString(); }
node.send({"payload":m});
m = null;