diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp
index 255e120..a9e7035 100644
--- a/Transceiver52M/Transceiver.cpp
+++ b/Transceiver52M/Transceiver.cpp
@@ -71,63 +71,25 @@
   }
 }
 
-static BitVector *genRandNormalBurst(size_t tsc)
-{
-  if (tsc > 7)
-    return NULL;
-
-  BitVector *bits = new BitVector(148);
-
-  size_t i = 0;
-
-  /* Tail bits */
-  for (; i < 4; i++)
-    (*bits)[i] = 0;
-
-  /* Random bits */
-  for (; i < 61; i++)
-    (*bits)[i] = rand() % 2;
-
-  /* Training sequence */
-  for (int j = 0; i < 87; i++, j++)
-    (*bits)[i] = GSM::gTrainingSequence[tsc][j];
-
-  /* Random bits */
-  for (; i < 144; i++)
-    (*bits)[i] = rand() % 2;
-
-  /* Tail bits */
-  for (; i < 148; i++)
-    (*bits)[i] = 0;
-
-  return bits;
-}
-
 bool TransceiverState::init(int filler, size_t sps, float scale, size_t rtsc)
 {
-  BitVector *bits;
   signalVector *burst;
 
   if ((sps != 1) && (sps != 4))
     return false;
 
   for (size_t n = 0; n < 8; n++) {
-    size_t guard = 8 + !(n % 4);
-    size_t len = sps == 4 ? 625 : 148 + guard;
-
     for (size_t i = 0; i < 102; i++) {
       switch (filler) {
       case Transceiver::FILLER_DUMMY:
-        burst = modulateBurst(gDummyBurst, guard, sps);
+        burst = generateDummyBurst(sps, n);
         break;
       case Transceiver::FILLER_RAND:
-        bits = genRandNormalBurst(rtsc);
-        burst = modulateBurst(*bits, guard, sps);
-        delete bits;
+        burst = genRandNormalBurst(rtsc, sps, n);
         break;
       case Transceiver::FILLER_ZERO:
       default:
-        burst = new signalVector(len);
+        burst = generateEmptyBurst(sps, n);
       }
 
       scaleVector(*burst, scale);
diff --git a/Transceiver52M/sigProcLib.cpp b/Transceiver52M/sigProcLib.cpp
index 1a15e51..cf2c257 100644
--- a/Transceiver52M/sigProcLib.cpp
+++ b/Transceiver52M/sigProcLib.cpp
@@ -965,6 +965,68 @@
 }
 
 /*
+ * Generate a random GSM normal burst.
+ */
+signalVector *genRandNormalBurst(int tsc, int sps, int tn)
+{
+  if ((tsc < 0) || (tsc > 7) || (tn < 0) || (tn > 7))
+    return NULL;
+  if ((sps != 1) && (sps != 4))
+    return NULL;
+
+  int i = 0;
+  BitVector *bits = new BitVector(148);
+  signalVector *burst;
+
+  /* Tail bits */
+  for (; i < 4; i++)
+    (*bits)[i] = 0;
+
+  /* Random bits */
+  for (; i < 61; i++)
+    (*bits)[i] = rand() % 2;
+
+  /* Training sequence */
+  for (int n = 0; i < 87; i++, n++)
+    (*bits)[i] = gTrainingSequence[tsc][n];
+
+  /* Random bits */
+  for (; i < 144; i++)
+    (*bits)[i] = rand() % 2;
+
+  /* Tail bits */
+  for (; i < 148; i++)
+    (*bits)[i] = 0;
+
+  int guard = 8 + !(tn % 4);
+  burst = modulateBurst(*bits, guard, sps);
+  delete bits;
+
+  return burst;
+}
+
+signalVector *generateEmptyBurst(int sps, int tn)
+{
+	if ((tn < 0) || (tn > 7))
+		return NULL;
+
+	if (sps == 4)
+		return new signalVector(625);
+	else if (sps == 1)
+		return new signalVector(148 + 8 + !(tn % 4));
+	else
+		return NULL;
+}
+
+signalVector *generateDummyBurst(int sps, int tn)
+{
+	if (((sps != 1) && (sps != 4)) || (tn < 0) || (tn > 7))
+		return NULL;
+
+	return modulateBurst(gDummyBurst, 8 + !(tn % 4), sps);
+}
+
+/*
  * Generate a random 8-PSK EDGE burst. Only 4 SPS is supported with
  * the returned burst being 625 samples in length.
  */
diff --git a/Transceiver52M/sigProcLib.h b/Transceiver52M/sigProcLib.h
index 4f9f849..870eb1a 100644
--- a/Transceiver52M/sigProcLib.h
+++ b/Transceiver52M/sigProcLib.h
@@ -116,6 +116,15 @@
 /** Generate a EDGE burst with random payload - 4 SPS (625 samples) only */
 signalVector *generateEdgeBurst(int tsc);
 
+/** Generate an empty burst - 4 or 1 SPS */
+signalVector *generateEmptyBurst(int sps, int tn);
+
+/** Generate a normal GSM burst with random payload - 4 or 1 SPS */
+signalVector *genRandNormalBurst(int tsc, int sps, int tn);
+
+/** Generate a dummy GSM burst - 4 or 1 SPS */
+signalVector *generateDummyBurst(int sps, int tn);
+
 /** Sinc function */
 float sinc(float x);
 
