diff --git a/src/shared/trk/trkutils.cpp b/src/shared/trk/trkutils.cpp
index 7d31f586ff431e869b4f6de7bdf5c8e0b13f92a5..463415e7c21c3da5443fdd4c25b51147d1cd7c20 100644
--- a/src/shared/trk/trkutils.cpp
+++ b/src/shared/trk/trkutils.cpp
@@ -107,6 +107,7 @@ QByteArray frameMessage(byte command, byte token, const QByteArray &data, bool s
     //logMessage("check: " << s << checksum << x;
 
     QByteArray response;
+    response.reserve(data.size() + 3);
     response.append(char(command));
     response.append(char(token));
     response.append(data);
@@ -115,12 +116,12 @@ QByteArray frameMessage(byte command, byte token, const QByteArray &data, bool s
     QByteArray encodedData = encode7d(response);
 
     QByteArray ba;
+    ba.reserve(encodedData.size() + 6);
     if (serialFrame) {
         ba.append(char(0x01));
         ba.append(char(0x90));
         const ushort encodedSize = encodedData.size() + 2; // 2 x 0x7e
-        ba.append(char(encodedSize / 256));
-        ba.append(char(encodedSize % 256));
+        appendShort(&ba, encodedSize, BigEndian);
     }
     ba.append(char(0x7e));
     ba.append(encodedData);
@@ -227,7 +228,7 @@ QString quoteUnprintableLatin1(const QByteArray &ba)
 QByteArray decode7d(const QByteArray &ba)
 {
     QByteArray res;
-    res.reserve(ba.size() + 2);
+    res.reserve(ba.size());
     for (int i = 0; i < ba.size(); ++i) {
         byte c = byte(ba.at(i));
         if (c == 0x7d) {
@@ -279,10 +280,11 @@ void appendShort(QByteArray *ba, ushort s, Endianness endian)
 
 void appendInt(QByteArray *ba, uint i, Endianness endian)
 {
-    int b3 = i % 256; i -= b3; i /= 256;
-    int b2 = i % 256; i -= b2; i /= 256;
-    int b1 = i % 256; i -= b1; i /= 256;
-    int b0 = i % 256; i -= b0; i /= 256;
+    const uchar b3 = i % 256; i /= 256;
+    const uchar b2 = i % 256; i /= 256;
+    const uchar b1 = i % 256; i /= 256;
+    const uchar b0 = i;
+    ba->reserve(ba->size() + 4);
     if (endian == BigEndian) {
         ba->append(b0);
         ba->append(b1);
@@ -298,11 +300,9 @@ void appendInt(QByteArray *ba, uint i, Endianness endian)
 
 void appendString(QByteArray *ba, const QByteArray &str, Endianness endian, bool appendNullTerminator)
 {
-    const int n = str.size();
-    const int fullSize = n + (appendNullTerminator ? 1 : 0);
+    const int fullSize = str.size() + (appendNullTerminator ? 1 : 0);
     appendShort(ba, fullSize, endian); // count the terminating \0
-    for (int i = 0; i != n; ++i)
-        ba->append(str.at(i));
+    ba->append(str);
     if (appendNullTerminator)
         ba->append('\0');
 }