diff --git a/Transceiver52M/sigProcLib.cpp b/Transceiver52M/sigProcLib.cpp
index 54dd8fc..4501a13 100644
--- a/Transceiver52M/sigProcLib.cpp
+++ b/Transceiver52M/sigProcLib.cpp
@@ -40,6 +40,9 @@
 #define TABLESIZE		1024
 #define DELAYFILTS		64
 
+/* Clipping detection threshold */
+#define CLIP_THRESH		30000.0f
+
 /** Lookup tables for trigonometric approximation */
 float cosTable[TABLESIZE+1]; // add 1 element for wrap around
 float sinTable[TABLESIZE+1];
@@ -1369,6 +1372,18 @@
   return 1;
 }
 
+static int detectClipping(signalVector &burst, float thresh)
+{
+	for (size_t i = 0; i < burst.size(); i++) {
+		if (fabs(burst[i].real()) > thresh)
+			return 1;
+		if (fabs(burst[i].imag()) > thresh)
+			return 1;
+	}
+
+	return 0;
+}
+
 /* 
  * RACH burst detection
  *
@@ -1390,7 +1405,10 @@
   CorrelationSequence *sync;
 
   if ((sps != 1) && (sps != 4))
-    return -1;
+    return -SIGERR_UNSUPPORTED;
+
+  if (detectClipping(rxBurst, CLIP_THRESH))
+    return -SIGERR_CLIP;
 
   target = 8 + 40;
   head = 4;
@@ -1406,7 +1424,7 @@
   delete corr;
 
   if (rc < 0) {
-    return -1;
+    return -SIGERR_INTERNAL;
   } else if (!rc) {
     if (amp)
       *amp = 0.0f;
@@ -1443,7 +1461,10 @@
   CorrelationSequence *sync;
 
   if ((tsc < 0) || (tsc > 7) || ((sps != 1) && (sps != 4)))
-    return -1;
+    return -SIGERR_UNSUPPORTED;
+
+  if (detectClipping(rxBurst, CLIP_THRESH))
+    return -SIGERR_CLIP;
 
   target = 3 + 58 + 16 + 5;
   head = 4;
@@ -1459,7 +1480,7 @@
   delete corr;
 
   if (rc < 0) {
-    return -1;
+    return -SIGERR_INTERNAL;
   } else if (!rc) {
     if (amp)
       *amp = 0.0f;
