diff --git a/accelerate-arithmetic.cabal b/accelerate-arithmetic.cabal
--- a/accelerate-arithmetic.cabal
+++ b/accelerate-arithmetic.cabal
@@ -1,10 +1,10 @@
 Name:             accelerate-arithmetic
-Version:          0.1
+Version:          1.0.0.2
 License:          BSD3
 License-File:     LICENSE
 Author:           Henning Thielemann <haskell@henning-thielemann.de>
 Maintainer:       Henning Thielemann <haskell@henning-thielemann.de>
-Homepage:         http://hub.darcs.net/thielema/accelerate-arithmetic/
+Homepage:         https://hub.darcs.net/thielema/accelerate-arithmetic/
 Category:         Math
 Synopsis:         Linear algebra and interpolation using the Accelerate framework
 Description:
@@ -13,25 +13,25 @@
   but it does not contain processor optimizations
   or optimizations for CUDA.
 Tested-With:      GHC==7.8.2
-Cabal-Version:    >=1.14
+Cabal-Version:    1.14
 Build-Type:       Simple
 
 Source-Repository this
-  Tag:         0.1
+  Tag:         1.0.0.2
   Type:        darcs
-  Location:    http://hub.darcs.net/thielema/accelerate-arithmetic/
+  Location:    https://hub.darcs.net/thielema/accelerate-arithmetic/
 
 Source-Repository head
   Type:        darcs
-  Location:    http://hub.darcs.net/thielema/accelerate-arithmetic/
+  Location:    https://hub.darcs.net/thielema/accelerate-arithmetic/
 
 Library
   Build-Depends:
-    accelerate-utility >=0.1 && <0.2,
-    accelerate >=0.15 && <0.16,
+    accelerate-utility >=1.1 && <1.2,
+    accelerate >=1.3 && <1.5,
     utility-ht >=0.0.8 && <0.1,
     QuickCheck >=2.4 && <3,
-    base >=4.5 && <4.10
+    base >=4.5 && <5
 
   GHC-Options:      -Wall -fwarn-missing-import-lists
   Hs-Source-Dirs:   src, private
diff --git a/private/Data/Array/Accelerate/LinearAlgebra/Private.hs b/private/Data/Array/Accelerate/LinearAlgebra/Private.hs
--- a/private/Data/Array/Accelerate/LinearAlgebra/Private.hs
+++ b/private/Data/Array/Accelerate/LinearAlgebra/Private.hs
@@ -6,6 +6,7 @@
 import qualified Data.Array.Accelerate.Utility.Lift.Exp as Exp
 import qualified Data.Array.Accelerate.Utility.Arrange as Arrange
 import qualified Data.Array.Accelerate as A
+import Data.Array.Accelerate.Utility.Lift.Exp (expr)
 import Data.Array.Accelerate
           (Acc, Array, Exp, Any(Any), All(All), Z(Z), (:.)((:.)))
 
@@ -63,7 +64,7 @@
 
 
 outer ::
-   (A.Shape ix, A.Slice ix, A.IsNum a, A.Elt a) =>
+   (A.Shape ix, A.Slice ix, A.Num a) =>
    Vector ix a -> Vector ix a -> Matrix ix a
 outer x y =
    A.zipWith (*)
@@ -71,7 +72,7 @@
       (A.replicate (A.lift $ Any :. numElems x :. All) y)
 
 multiplyMatrixVector ::
-   (A.Shape ix, A.Slice ix, A.IsNum a, A.Elt a) =>
+   (A.Shape ix, A.Slice ix, A.Num a) =>
    Matrix ix a ->
    Vector ix a ->
    Vector ix a
@@ -82,8 +83,8 @@
          A.zipWith (*) m
             (A.replicate (A.lift $ Any :. rows :. All) v)
 
-multiplyMatrixMatrix ::
-   (A.Shape ix, A.Slice ix, A.IsNum a, A.Elt a) =>
+multiplyMatrixMatrix, _multiplyMatrixMatrix, _multiplyMatrixMatrix2 ::
+   (A.Shape ix, A.Slice ix, A.Num a) =>
    Matrix ix a ->
    Matrix ix a ->
    Matrix ix a
@@ -95,8 +96,27 @@
             (A.replicate (A.lift $ Any :. All :. All :. cols) x)
             (A.replicate (A.lift $ Any :. rows :. All :. All) y)
 
+_multiplyMatrixMatrix x y =
+   case (matrixShape x, matrixShape y) of
+      (_ :. rows :. _cols, _ :. _rows :. cols) ->
+         A.fold1 (+) $
+         A.zipWith (*)
+            (A.replicate (A.lift $ Any :. All :. cols :. All) x)
+            (A.replicate (A.lift $ Any :. rows :. All :. All) $ transpose y)
+
+_multiplyMatrixMatrix2 x y =
+   case (matrixShape x, matrixShape y) of
+      (_ :. rowsX :. _colsX, shapeY :. rowsY :. colsY) ->
+         A.fold1 (+) $
+         A.zipWith (*)
+            (A.replicate (A.lift $ Any :. All :. colsY :. All) x)
+            (A.backpermute (A.lift $ shapeY :. rowsX :. colsY :. rowsY)
+                (Exp.modify (expr:.expr:.expr:.expr) $
+                 \(ix:._:.j:.k) -> ix:.k:.j)
+                y)
+
 newtonInverseStep ::
-   (A.Shape ix, A.Slice ix, A.IsNum a, A.Elt a) =>
+   (A.Shape ix, A.Slice ix, A.Num a) =>
    Matrix ix a ->
    Matrix ix a ->
    Matrix ix a
@@ -105,15 +125,15 @@
    multiplyMatrixMatrix x $ multiplyMatrixMatrix a x
 
 identity ::
-   (A.Shape ix, A.Slice ix, A.IsNum a, A.Elt a) =>
+   (A.Shape ix, A.Slice ix, A.Elt a, A.FromIntegral Int a) =>
    Exp (ix :. Int :. Int) -> Matrix ix a
 identity sh =
    A.generate sh
       (withMatrixIndex $
-       \(_ :. r :. c) -> A.fromIntegral $ A.boolToInt (r A.==* c))
+       \(_ :. r :. c) -> A.fromIntegral $ A.boolToInt (r A.== c))
 
 newtonInverse ::
-   (A.Shape ix, A.Slice ix, A.IsNum a, A.Elt a) =>
+   (A.Shape ix, A.Slice ix, A.Num a) =>
    Exp Int ->
    Matrix ix a ->
    Matrix ix a ->
@@ -124,7 +144,7 @@
 
 
 scaleRows ::
-   (A.Slice ix, A.Shape ix, A.Elt a, A.IsNum a) =>
+   (A.Slice ix, A.Shape ix, A.Num a) =>
    Vector ix a -> Matrix ix a -> Matrix ix a
 scaleRows s x =
    zipScalarVectorWith (*) s x
diff --git a/src/Data/Array/Accelerate/Arithmetic/Interpolation.hs b/src/Data/Array/Accelerate/Arithmetic/Interpolation.hs
--- a/src/Data/Array/Accelerate/Arithmetic/Interpolation.hs
+++ b/src/Data/Array/Accelerate/Arithmetic/Interpolation.hs
@@ -19,7 +19,7 @@
 
 
 bisect ::
-   (A.Slice ix, A.Shape ix, A.IsScalar a, A.Elt a) =>
+   (A.Slice ix, A.Shape ix, A.Ord a, A.Elt a) =>
    Vector ix a ->
    Scalar ix a ->
    Scalar ix (Int, Int) ->
@@ -35,11 +35,11 @@
                  (Exp.mapSnd (const center) interval)
                  (Exp.mapFst (const center) interval))
           centers bounds $
-       A.zipWith (A.<*) xs $
+       A.zipWith (A.<) xs $
        Arrange.gather (Arrange.mapWithIndex Exp.indexCons centers) nodes
 
 lookupInterval ::
-   (A.Slice ix, A.Shape ix, A.IsScalar a, A.Elt a) =>
+   (A.Slice ix, A.Shape ix, A.Ord a, A.Elt a) =>
    Vector ix a ->
    Scalar ix a ->
    Scalar ix Int
@@ -66,7 +66,7 @@
 type Interpolator13 a = (a,a) -> (a,a) -> (a,a) -> (a,a) -> a -> a
 
 sampleBasisFunctions13 ::
-   (A.Slice ix, A.Shape ix, A.Elt a, A.IsFloating a, Num a) =>
+   (A.Slice ix, A.Shape ix, A.Ord a, Num a) =>
    Interpolator13 (Exp a) ->
    Vector Z a -> Vector ix a -> Sparse.Rows ix a
 sampleBasisFunctions13 interpolate nodes zs =
@@ -83,8 +83,8 @@
               case (Exp.unliftQuadruple x, Exp.unliftQuadruple y) of
                  ((xm1,x0,x1,x2), (ym1,y0,y1,y2)) ->
                     (ln+k :: Exp Int,
-                     A.cond (n A.<* minIx) y0 $
-                     A.cond (n A.>* maxIx) y1 $
+                     A.cond (n A.< minIx) y0 $
+                     A.cond (n A.> maxIx) y1 $
                      interpolate (xm1,ym1) (x0,y0) (x1,y1) (x2,y2) z))
           (A.zip4 indices limitIndices zs
              (A.zip4
diff --git a/src/Data/Array/Accelerate/LinearAlgebra/Matrix/Banded.hs b/src/Data/Array/Accelerate/LinearAlgebra/Matrix/Banded.hs
--- a/src/Data/Array/Accelerate/LinearAlgebra/Matrix/Banded.hs
+++ b/src/Data/Array/Accelerate/LinearAlgebra/Matrix/Banded.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE FlexibleContexts #-}
 module Data.Array.Accelerate.LinearAlgebra.Matrix.Banded (
    Symmetric(..),
    flattenSymmetric,
@@ -8,13 +9,13 @@
 import qualified Data.Array.Accelerate.Utility.Lift.Exp as Exp
 import qualified Data.Array.Accelerate as A
 import Data.Array.Accelerate.Utility.Lift.Exp (expr)
-import Data.Array.Accelerate ((:.)((:.)), (>*), (!), (?))
+import Data.Array.Accelerate ((:.)((:.)), (!), (?))
 
 
 newtype Symmetric ix a = Symmetric (Matrix ix a)
 
 flattenSymmetric ::
-   (A.Slice ix, A.Shape ix, A.Elt a, A.IsNum a) =>
+   (A.Slice ix, A.Shape ix, A.Num a) =>
    Symmetric ix a -> Matrix ix a
 flattenSymmetric (Symmetric m) =
    case matrixShape m of
@@ -23,4 +24,4 @@
          Exp.modify (expr:.expr:.expr) $ \(ix:.k0:.j0) ->
             let k = min k0 j0
                 j = max k0 j0 - k
-            in  width >* j ? (m ! A.lift(ix:.k:.j), 0)
+            in  width A.> j ? (m ! A.lift(ix:.k:.j), 0)
diff --git a/src/Data/Array/Accelerate/LinearAlgebra/Matrix/Sparse.hs b/src/Data/Array/Accelerate/LinearAlgebra/Matrix/Sparse.hs
--- a/src/Data/Array/Accelerate/LinearAlgebra/Matrix/Sparse.hs
+++ b/src/Data/Array/Accelerate/LinearAlgebra/Matrix/Sparse.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE FlexibleContexts #-}
 module Data.Array.Accelerate.LinearAlgebra.Matrix.Sparse (
    Columns(..),
    multiplyColumnsVector,
@@ -18,10 +19,8 @@
 import qualified Data.Array.Accelerate as A
 import Data.Array.Accelerate.Utility.Lift.Exp (expr, )
 
-import Data.Array.Accelerate.LinearAlgebra
-          (Matrix, Vector, matrixShape, )
-import Data.Array.Accelerate
-          (Exp, Any(Any), All(All), (:.)((:.)), (>*), (?), )
+import Data.Array.Accelerate.LinearAlgebra (Matrix, Vector, matrixShape, )
+import Data.Array.Accelerate (Exp, Any(Any), All(All), (:.)((:.)), (?), )
 
 
 {- |
@@ -40,13 +39,13 @@
       (A.map A.fst m)
 
 multiplyColumnsVector ::
-   (A.Shape ix, A.Slice ix, A.IsNum a, A.Elt a) =>
+   (A.Shape ix, A.Slice ix, A.Num a) =>
    Columns ix a ->
    Vector ix a ->
    Vector ix a
 multiplyColumnsVector (Columns rows m) v =
    Arrange.scatter (+)
-      (realIndex m)
+      (A.map A.Just_ $ realIndex m)
       (case matrixShape m of
           sh :. _rows :. _cols -> A.fill (A.lift $ sh :. rows) 0) $
    A.zipWith (*)
@@ -54,7 +53,7 @@
       (A.replicate (A.lift $ Any :. LinAlg.numRows m :. All) v)
 
 transposeColumns ::
-   (A.Shape ix, A.Slice ix, A.IsNum a, A.Elt a) =>
+   (A.Shape ix, A.Slice ix, A.Num a) =>
    Columns ix a ->
    Rows ix a
 transposeColumns (Columns n x) =
@@ -68,7 +67,7 @@
         Rows {numCols :: Exp Int, rowMatrix :: Matrix ix (Int, a)}
 
 multiplyRowsVector ::
-   (A.Shape ix, A.Slice ix, A.IsNum a, A.Elt a) =>
+   (A.Shape ix, A.Slice ix, A.Num a) =>
    Rows ix a ->
    Vector ix a ->
    Vector ix a
@@ -78,14 +77,14 @@
    Arrange.gather (realIndex m) v
 
 transposeRows ::
-   (A.Shape ix, A.Slice ix, A.IsNum a, A.Elt a) =>
+   (A.Shape ix, A.Slice ix, A.Num a) =>
    Rows ix a ->
    Columns ix a
 transposeRows (Rows n x) =
    (Columns n $ LinAlg.transpose x)
 
 multiplyColumnsRows ::
-   (A.Shape ix, A.Slice ix, A.IsNum a, A.Elt a) =>
+   (A.Shape ix, A.Slice ix, A.Num a) =>
    Columns ix a ->
    Rows ix a ->
    Matrix ix a
@@ -95,7 +94,7 @@
    in  Arrange.scatter (+)
           (Arrange.mapWithIndex
              (Exp.modify2 expr (expr,expr) $ \mix (k,j) ->
-                global mix :. k :. j) $
+                Just (global mix :. k :. j)) $
            ixs)
           (A.fill (A.lift $ global (A.shape prods) :. rows :. cols) 0)
           prods
@@ -108,7 +107,7 @@
 So far, only correct for real matrices.
 -}
 realBandedGramian ::
-   (A.Shape ix, A.Slice ix, A.IsNum a, A.Elt a) =>
+   (A.Shape ix, A.Slice ix, A.Num a) =>
    Exp Int ->
    Rows ix a ->
    BandMatrix.Symmetric ix a
@@ -119,13 +118,14 @@
        Arrange.scatter (+)
           (Arrange.mapWithIndex
              (Exp.modify2 expr (expr,expr) $ \mix (k,j) ->
-                k>*j ? (A.ignore, A.lift $ global mix :. k :. j-k)) $
+                k A.> j ?
+                   (A.Nothing_, A.lift $ Just (global mix :. k :. j-k))) $
            ixs)
           (A.fill (A.lift $ global (A.shape prods) :. cols :. width) 0)
           prods
 
 matchMatrices ::
-   (A.Shape ix, A.Slice ix, A.IsNum a, A.Elt a) =>
+   (A.Shape ix, A.Slice ix, A.Num a) =>
    Matrix ix (Int, a) ->
    Matrix ix (Int, a) ->
    Matrix (ix :. Int) ((Int, Int), a)
@@ -141,7 +141,7 @@
 
 
 scaleRowRows ::
-   (A.Slice ix, A.Shape ix, A.Elt a, A.IsNum a) =>
+   (A.Slice ix, A.Shape ix, A.Num a) =>
    Vector ix a -> Rows ix a -> Rows ix a
 scaleRowRows s (Rows n x) =
    Rows n $
