diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp
index 4462cdd..5c5707b 100644
--- a/Transceiver52M/Transceiver.cpp
+++ b/Transceiver52M/Transceiver.cpp
@@ -575,8 +575,8 @@
 bool Transceiver::pullRadioVector(size_t chan, struct trx_ul_burst_ind *bi)
 {
   int rc;
-  complex amp;
-  float toa, max = -1.0, avg = 0.0;
+  struct estim_burst_params ebp;
+  float max = -1.0, avg = 0.0;
   unsigned max_toa;
   int max_i = -1;
   signalVector *burst;
@@ -654,7 +654,7 @@
             mMaxExpectedDelayAB : mMaxExpectedDelayNB;
 
   /* Detect normal or RACH bursts */
-  rc = detectAnyBurst(*burst, mTSC, BURST_THRESH, mSPSRx, type, amp, toa, max_toa);
+  rc = detectAnyBurst(*burst, mTSC, BURST_THRESH, mSPSRx, type, max_toa, &ebp);
   if (rc <= 0) {
     if (rc == -SIGERR_CLIP)
       LOG(WARNING) << "Clipping detected on received RACH or Normal Burst";
@@ -664,8 +664,8 @@
   }
 
   type = (CorrType) rc;
-  bi->toa = toa;
-  rxBurst = demodAnyBurst(*burst, mSPSRx, amp, toa, type);
+  bi->toa = ebp.toa;
+  rxBurst = demodAnyBurst(*burst, mSPSRx, ebp.amp, ebp.toa, type);
 
   /* EDGE demodulator returns 444 (gSlotLen * 3) bits */
   if (rxBurst->size() == EDGE_BURST_NBITS)
diff --git a/Transceiver52M/sigProcLib.cpp b/Transceiver52M/sigProcLib.cpp
index cff7825..52a6701 100644
--- a/Transceiver52M/sigProcLib.cpp
+++ b/Transceiver52M/sigProcLib.cpp
@@ -1463,8 +1463,8 @@
  */
 static int detectBurst(const signalVector &burst,
                        signalVector &corr, CorrelationSequence *sync,
-                       float thresh, int sps, complex *amp, float *toa,
-                       int start, int len)
+                       float thresh, int sps, int start, int len,
+                       struct estim_burst_params *ebp)
 {
   const signalVector *corr_in;
   signalVector *dec = NULL;
@@ -1490,23 +1490,23 @@
   sps = 1;
 
   /* Peak detection - place restrictions at correlation edges */
-  *amp = fastPeakDetect(corr, toa);
+  ebp->amp = fastPeakDetect(corr, &ebp->toa);
 
-  if ((*toa < 3 * sps) || (*toa > len - 3 * sps))
+  if ((ebp->toa < 3 * sps) || (ebp->toa > len - 3 * sps))
     return 0;
 
   /* Peak -to-average ratio */
-  if (computePeakRatio(&corr, sps, *toa, *amp) < thresh)
+  if (computePeakRatio(&corr, sps, ebp->toa, ebp->amp) < thresh)
     return 0;
 
   /* Compute peak-to-average ratio. Reject if we don't have enough values */
-  *amp = peakDetect(corr, toa, NULL);
+  ebp->amp = peakDetect(corr, &ebp->toa, NULL);
 
   /* Normalize our channel gain */
-  *amp = *amp / sync->gain;
+  ebp->amp = ebp->amp / sync->gain;
 
   /* Compensate for residuate time lag */
-  *toa = *toa - sync->toa;
+  ebp->toa = ebp->toa - sync->toa;
 
   return 1;
 }
@@ -1532,13 +1532,10 @@
  *   head: Search symbols before target
  *   tail: Search symbols after target
  */
-static int detectGeneralBurst(const signalVector &rxBurst,
-                              float thresh,
-                              int sps,
-                              complex &amp,
-                              float &toa,
+static int detectGeneralBurst(const signalVector &rxBurst, float thresh, int sps,
                               int target, int head, int tail,
-                              CorrelationSequence *sync)
+                              CorrelationSequence *sync,
+                              struct estim_burst_params *ebp)
 {
   int rc, start, len;
   bool clipping = false;
@@ -1560,17 +1557,17 @@
   signalVector corr(len);
 
   rc = detectBurst(rxBurst, corr, sync,
-                   thresh, sps, &amp, &toa, start, len);
+                   thresh, sps, start, len, ebp);
   if (rc < 0) {
     return -SIGERR_INTERNAL;
   } else if (!rc) {
-    amp = 0.0f;
-    toa = 0.0f;
+    ebp->amp = 0.0f;
+    ebp->toa = 0.0f;
     return clipping?-SIGERR_CLIP:SIGERR_NONE;
   }
 
   /* Subtract forward search bits from delay */
-  toa -= head;
+  ebp->toa -= head;
 
   return 1;
 }
@@ -1585,7 +1582,7 @@
  *   tail: Search 8 symbols + maximum expected delay
  */
 static int detectRACHBurst(const signalVector &burst, float threshold, int sps,
-                           complex &amplitude, float &toa, unsigned max_toa, bool ext)
+                           unsigned max_toa, bool ext, struct estim_burst_params *ebp)
 {
   int rc, target, head, tail;
   int i, num_seq;
@@ -1596,8 +1593,8 @@
   num_seq = ext ? 3 : 1;
 
   for (i = 0; i < num_seq; i++) {
-    rc = detectGeneralBurst(burst, threshold, sps, amplitude, toa,
-                            target, head, tail, gRACHSequences[i]);
+    rc = detectGeneralBurst(burst, threshold, sps, target, head, tail,
+                            gRACHSequences[i], ebp);
     if (rc > 0)
       break;
   }
@@ -1614,7 +1611,7 @@
  *   tail: Search 6 symbols + maximum expected delay
  */
 static int analyzeTrafficBurst(const signalVector &burst, unsigned tsc, float threshold,
-                               int sps, complex &amplitude, float &toa, unsigned max_toa)
+                               int sps, unsigned max_toa, struct estim_burst_params *ebp)
 {
   int rc, target, head, tail;
   CorrelationSequence *sync;
@@ -1627,13 +1624,12 @@
   tail = 6 + max_toa;
   sync = gMidambles[tsc];
 
-  rc = detectGeneralBurst(burst, threshold, sps, amplitude, toa,
-                          target, head, tail, sync);
+  rc = detectGeneralBurst(burst, threshold, sps, target, head, tail, sync, ebp);
   return rc;
 }
 
 static int detectEdgeBurst(const signalVector &burst, unsigned tsc, float threshold,
-                           int sps, complex &amplitude, float &toa, unsigned max_toa)
+                           int sps, unsigned max_toa, struct estim_burst_params *ebp)
 {
   int rc, target, head, tail;
   CorrelationSequence *sync;
@@ -1646,33 +1642,30 @@
   tail = 6 + max_toa;
   sync = gEdgeMidambles[tsc];
 
-  rc = detectGeneralBurst(burst, threshold, sps, amplitude, toa,
-                          target, head, tail, sync);
+  rc = detectGeneralBurst(burst, threshold, sps,
+                          target, head, tail, sync, ebp);
   return rc;
 }
 
 int detectAnyBurst(const signalVector &burst, unsigned tsc, float threshold,
-                   int sps, CorrType type, complex &amp, float &toa,
-                   unsigned max_toa)
+                   int sps, CorrType type, unsigned max_toa,
+                   struct estim_burst_params *ebp)
 {
   int rc = 0;
 
   switch (type) {
   case EDGE:
-    rc = detectEdgeBurst(burst, tsc, threshold, sps,
-                         amp, toa, max_toa);
+    rc = detectEdgeBurst(burst, tsc, threshold, sps, max_toa, ebp);
     if (rc > 0)
       break;
     else
       type = TSC;
   case TSC:
-    rc = analyzeTrafficBurst(burst, tsc, threshold, sps,
-                             amp, toa, max_toa);
+    rc = analyzeTrafficBurst(burst, tsc, threshold, sps, max_toa, ebp);
     break;
   case EXT_RACH:
   case RACH:
-    rc = detectRACHBurst(burst, threshold, sps, amp, toa,
-                         max_toa, type == EXT_RACH);
+    rc = detectRACHBurst(burst, threshold, sps, max_toa, type == EXT_RACH, ebp);
     break;
   default:
     LOG(ERR) << "Invalid correlation type";
diff --git a/Transceiver52M/sigProcLib.h b/Transceiver52M/sigProcLib.h
index bae2127..8442cfc 100644
--- a/Transceiver52M/sigProcLib.h
+++ b/Transceiver52M/sigProcLib.h
@@ -101,15 +101,23 @@
 */
 float energyDetect(const signalVector &rxBurst,
                    unsigned windowLength);
+
+/** Struct used to fill out parameters in detectAnyBurst(): estimated burst parameters
+@param amplitude The estimated amplitude of received TSC burst.
+@param toa The estimated time-of-arrival of received TSC burst (in symbols).
+*/
+struct estim_burst_params {
+        complex amp;
+        float toa;
+};
 /**
         8-PSK/GMSK/RACH burst detector
         @param burst The received GSM burst of interest
         @param tsc Midamble type (0..7) also known as TSC
         @param threshold The threshold that the received burst's post-correlator SNR is compared against to determine validity.
         @param sps The number of samples per GSM symbol.
-        @param amplitude The estimated amplitude of received TSC burst.
-        @param toa The estimate time-of-arrival of received TSC burst (in symbols).
         @param max_toa The maximum expected time-of-arrival (in symbols).
+        @param ebp The estimated parameters of the detected burst.
         @return positive value (CorrType) if threshold value is reached,
                 negative value (-SignalError) on error,
                 zero (SIGERR_NONE) if no burst is detected
@@ -119,9 +127,8 @@
                    float threshold,
                    int sps,
                    CorrType type,
-                   complex &amp,
-                   float &toa,
-                   unsigned max_toa);
+                   unsigned max_toa,
+                   struct estim_burst_params *ebp);
 
 /** Demodulate burst basde on type and output soft bits */
 SoftVector *demodAnyBurst(const signalVector &burst, int sps,
