diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -86,3 +86,6 @@
 0.2.1.0:
 		added Noise.hs: pinkNoise, spatialNoise, powerNoise
 		fixed bug in detrend that occurs if a zero window occurs at end
+
+0.2.2:
+		added entropy_phase
diff --git a/hsignal.cabal b/hsignal.cabal
--- a/hsignal.cabal
+++ b/hsignal.cabal
@@ -1,5 +1,5 @@
 Name:               hsignal
-Version:            0.2.1.0
+Version:            0.2.2
 License:            BSD3
 License-file:       LICENSE
 Copyright:          (c) A.V.H. McPhail 2010, 2011
diff --git a/lib/Numeric/Signal/Multichannel.hs b/lib/Numeric/Signal/Multichannel.hs
--- a/lib/Numeric/Signal/Multichannel.hs
+++ b/lib/Numeric/Signal/Multichannel.hs
@@ -33,7 +33,7 @@
                        detrend,filter,
                        slice,
                        histograms,
-                       mi_phase
+                       entropy_delta_phase,mi_phase
                 ) where
 
 -----------------------------------------------------------------------------
@@ -55,6 +55,7 @@
 --import qualified Data.List as L
 
 import Data.Binary
+import Data.Maybe
 
 import Foreign.Storable
 
@@ -341,6 +342,23 @@
         pairs = I.array br $ map (\(m,n) -> ((m,n),(d I.! m,d I.! n))) (range br)
         hist2array = mapArrayConcurrently (\(x,y) -> (H2.addVector (H2.emptyLimits bx by (lx,ux) (ly,uy)) x y)) pairs
     in (histarray,hist2array)
+
+-----------------------------------------------------------------------------
+
+-- | calculate the entropy of the phase difference between pairs of channels (fills upper half of matrix)
+entropy_delta_phase :: (S.Filterable a, Double ~ DoubleOf a) =>
+                Multichannel a      -- ^ input data
+              -> Matrix Double
+entropy_delta_phase m = let d = _data m
+                            c = _channels m
+                            b = ((1,1),(c,c))
+                            r = I.range b
+                            diff = I.listArray b (map (\i@(x,y) -> (i,if x <= y then Just (double $ (d I.! y)-(d I.! x)) else Nothing)) r) :: I.Array (Int,Int) ((Int,Int),Maybe (Vector Double))
+                            h = mapArrayConcurrently (maybe Nothing (\di -> Just $ H.fromLimits 128 ((-2)*pi,2*pi) di)) (fmap snd diff)
+                            ent = mapArrayConcurrently (\(i,difvec) -> case difvec of 
+                                                        Nothing -> 0 :: Double
+                                                        Just da -> SI.entropy (fromJust (h I.! i)) da) diff
+                        in fromArray2D ent
 
 -----------------------------------------------------------------------------
 
