diff --git a/Transceiver52M/radioInterface.cpp b/Transceiver52M/radioInterface.cpp
index 0f949d7..6245cfc 100644
--- a/Transceiver52M/radioInterface.cpp
+++ b/Transceiver52M/radioInterface.cpp
@@ -245,7 +245,7 @@
    * Pre-allocate head room for the largest correlation size
    * so we can later avoid a re-allocation and copy
    * */
-  size_t head = GSM::gRACHSynchSequence.size();
+  size_t head = GSM::gRACHSynchSequenceTS0.size();
 
   /*
    * Form receive bursts and pass up to transceiver. Use repeating
diff --git a/Transceiver52M/sigProcLib.cpp b/Transceiver52M/sigProcLib.cpp
index 692fbe0..072fb3b 100644
--- a/Transceiver52M/sigProcLib.cpp
+++ b/Transceiver52M/sigProcLib.cpp
@@ -132,7 +132,7 @@
 
 static CorrelationSequence *gMidambles[] = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
 static CorrelationSequence *gEdgeMidambles[] = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
-static CorrelationSequence *gRACHSequence = NULL;
+static CorrelationSequence *gRACHSequences[] = {NULL,NULL,NULL};
 static PulseSequence *GSMPulse1 = NULL;
 static PulseSequence *GSMPulse4 = NULL;
 
@@ -150,11 +150,15 @@
     delayFilters[i] = NULL;
   }
 
+  for (int i = 0; i < 3; i++) {
+    delete gRACHSequences[i];
+    gRACHSequences[i] = NULL;
+  }
+
   delete GMSKRotation1;
   delete GMSKReverseRotation1;
   delete GMSKRotation4;
   delete GMSKReverseRotation4;
-  delete gRACHSequence;
   delete GSMPulse1;
   delete GSMPulse4;
   delete dnsampler;
@@ -163,7 +167,6 @@
   GMSKRotation4 = NULL;
   GMSKReverseRotation4 = NULL;
   GMSKReverseRotation1 = NULL;
-  gRACHSequence = NULL;
   GSMPulse1 = NULL;
   GSMPulse4 = NULL;
 }
@@ -1332,7 +1335,7 @@
   return seq;
 }
 
-static bool generateRACHSequence(int sps)
+static bool generateRACHSequence(CorrelationSequence **seq, const BitVector &bv, int sps)
 {
   bool status = true;
   float toa;
@@ -1340,13 +1343,14 @@
   signalVector *autocorr = NULL;
   signalVector *seq0 = NULL, *seq1 = NULL, *_seq1 = NULL;
 
-  delete gRACHSequence;
+  if (*seq != NULL)
+    delete *seq;
 
-  seq0 = modulateBurst(gRACHSynchSequence, 0, sps, false);
+  seq0 = modulateBurst(bv, 0, sps, false);
   if (!seq0)
     return false;
 
-  seq1 = modulateBurst(gRACHSynchSequence.segment(0, 40), 0, sps, true);
+  seq1 = modulateBurst(bv.segment(0, 40), 0, sps, true);
   if (!seq1) {
     status = false;
     goto release;
@@ -1366,19 +1370,19 @@
     goto release;
   }
 
-  gRACHSequence = new CorrelationSequence;
-  gRACHSequence->sequence = _seq1;
-  gRACHSequence->buffer = data;
-  gRACHSequence->gain = peakDetect(*autocorr, &toa, NULL);
+  *seq = new CorrelationSequence;
+  (*seq)->sequence = _seq1;
+  (*seq)->buffer = data;
+  (*seq)->gain = peakDetect(*autocorr, &toa, NULL);
 
   /* For 1 sps only
    *     (Half of correlation length - 1) + midpoint of pulse shaping filer
    *     20.5 = (40 / 2 - 1) + 1.5
    */
   if (sps == 1)
-    gRACHSequence->toa = toa - 20.5;
+    (*seq)->toa = toa - 20.5;
   else
-    gRACHSequence->toa = 0.0;
+    (*seq)->toa = 0.0;
 
 release:
   delete autocorr;
@@ -1388,7 +1392,7 @@
   if (!status) {
     delete _seq1;
     free(data);
-    gRACHSequence = NULL;
+    *seq = NULL;
   }
 
   return status;
@@ -1606,7 +1610,7 @@
   target = 8 + 40;
   head = 8;
   tail = 8 + max_toa;
-  sync = gRACHSequence;
+  sync = gRACHSequences[0];
 
   rc = detectGeneralBurst(burst, threshold, sps, amplitude, toa,
                           target, head, tail, sync);
@@ -1858,7 +1862,10 @@
   GSMPulse1 = generateGSMPulse(1);
   GSMPulse4 = generateGSMPulse(4);
 
-  generateRACHSequence(1);
+  generateRACHSequence(&gRACHSequences[0], gRACHSynchSequenceTS0, 1);
+  generateRACHSequence(&gRACHSequences[1], gRACHSynchSequenceTS1, 1);
+  generateRACHSequence(&gRACHSequences[2], gRACHSynchSequenceTS2, 1);
+
   for (int tsc = 0; tsc < 8; tsc++) {
     generateMidamble(1, tsc);
     gEdgeMidambles[tsc] = generateEdgeMidamble(tsc);
