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:          1.0.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:
@@ -17,18 +17,18 @@
 Build-Type:       Simple
 
 Source-Repository this
-  Tag:         1.0.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 >=1.0 && <1.1,
-    accelerate >=1.0 && <1.2,
+    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 && <5
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), (:.)((:.)))
 
@@ -82,7 +83,7 @@
          A.zipWith (*) m
             (A.replicate (A.lift $ Any :. rows :. All) v)
 
-multiplyMatrixMatrix ::
+multiplyMatrixMatrix, _multiplyMatrixMatrix, _multiplyMatrixMatrix2 ::
    (A.Shape ix, A.Slice ix, A.Num a) =>
    Matrix ix a ->
    Matrix ix a ->
@@ -94,6 +95,25 @@
          A.zipWith (*)
             (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.Num a) =>
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
@@ -45,7 +45,7 @@
    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 (*)
@@ -94,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
@@ -118,7 +118,8 @@
        Arrange.scatter (+)
           (Arrange.mapWithIndex
              (Exp.modify2 expr (expr,expr) $ \mix (k,j) ->
-                k A.> 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
