diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -89,3 +89,6 @@
 
 0.2.2:
 		added entropy_phase
+
+0.2.2.1:
+		fixed unwrap
diff --git a/hsignal.cabal b/hsignal.cabal
--- a/hsignal.cabal
+++ b/hsignal.cabal
@@ -1,5 +1,5 @@
 Name:               hsignal
-Version:            0.2.2
+Version:            0.2.2.1
 License:            BSD3
 License-file:       LICENSE
 Copyright:          (c) A.V.H. McPhail 2010, 2011
diff --git a/lib/Numeric/Signal/signal-aux.c b/lib/Numeric/Signal/signal-aux.c
--- a/lib/Numeric/Signal/signal-aux.c
+++ b/lib/Numeric/Signal/signal-aux.c
@@ -297,15 +297,25 @@
 
   r[0] = x[0];
 
-  int j = 0;
+  double c = 0;
 
+  int tmp;
+
   for (i = 1; i < rs; i++) {
-    if (x[i] < x[i-1]) {
-      j += 1;
+    tmp = x[i-1] - x[i];
+    if (tmp > M_PI) {
+      r[i] = 2*M_PI;
     }
-    r[i] = x[i] + j*2*M_PI;
+    else if (tmp < (-M_PI)) {
+      r[i] = -2*M_PI;
+    }
+    else {
+      r[i] = 0;
+    }
+    c += r[i];
+    r[i] = c + x[i];
   }
-
+  
   return 0;
 }
 
@@ -317,13 +327,23 @@
 
   r[0] = x[0];
 
-  int j = 0;
+  double c = 0;
 
+  int tmp;
+
   for (i = 1; i < rs; i++) {
-    if (x[i] < x[i-1]) {
-      j += 1;
+    tmp = x[i-1] - x[i];
+    if (tmp > M_PI) {
+      r[i] = 2*M_PI;
     }
-    r[i] = x[i] + j*2*M_PI;
+    else if (tmp < (-M_PI)) {
+      r[i] = -2*M_PI;
+    }
+    else {
+      r[i] = 0;
+    }
+    c += r[i];
+    r[i] = c + x[i];
   }
 
   return 0;
