diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,12 @@
 ## Unreleased changes
 
 
+## 0.1.0.2
+
+-   `scale`, `rescaleWith` functions.
+-   Avoid duplicate centering.
+
+
 ## 0.1.0.1
 
 -   Fix tests, remove debug output.
diff --git a/covariance.cabal b/covariance.cabal
--- a/covariance.cabal
+++ b/covariance.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.4
 name:               covariance
-version:            0.1.0.1
+version:            0.1.0.2
 synopsis:
     Well-conditioned estimation of large-dimensional covariance matrices
 
@@ -26,6 +26,7 @@
     exposed-modules:
       Statistics.Covariance
     other-modules:
+      Statistics.Covariance.Types
       Statistics.Covariance.LedoitWolf
       Statistics.Covariance.RaoBlackwellLedoitWolf
       Statistics.Covariance.OracleApproximatingShrinkage
@@ -33,6 +34,7 @@
     ghc-options: -Wall -Wunused-packages
     build-depends:    base ^>=4.14.3.0
                     , hmatrix
+                    , statistics
                     , vector
     hs-source-dirs:   src
     default-language: Haskell2010
diff --git a/src/Statistics/Covariance.hs b/src/Statistics/Covariance.hs
--- a/src/Statistics/Covariance.hs
+++ b/src/Statistics/Covariance.hs
@@ -10,22 +10,30 @@
 --
 -- Creation date: Tue Sep 14 13:02:15 2021.
 module Statistics.Covariance
-  ( empiricalCovariance,
+  ( -- * Empirical estimator
+    empiricalCovariance,
 
     -- * Shrinkage based estimators
-    --
+
     -- | See the overview on shrinkage estimators provided by
     -- [scikit-learn](https://scikit-learn.org/dev/modules/covariance.html#shrunk-covariance).
     module Statistics.Covariance.LedoitWolf,
     module Statistics.Covariance.RaoBlackwellLedoitWolf,
     module Statistics.Covariance.OracleApproximatingShrinkage,
+
+    -- * Helper functions
+    scale,
+    rescaleWith,
   )
 where
 
+import qualified Data.Vector.Storable as VS
 import qualified Numeric.LinearAlgebra as L
+import qualified Numeric.LinearAlgebra.Devel as L
 import Statistics.Covariance.LedoitWolf
 import Statistics.Covariance.OracleApproximatingShrinkage
 import Statistics.Covariance.RaoBlackwellLedoitWolf
+import qualified Statistics.Sample as S
 
 -- | Empirical or sample covariance.
 --
@@ -36,5 +44,48 @@
 -- [hmatrix](https://hackage.haskell.org/package/hmatrix).
 --
 -- NOTE: This function may call 'error'.
-empiricalCovariance :: L.Matrix Double -> L.Herm Double
+empiricalCovariance ::
+  -- | Data matrix of dimension NxP, where N is the number of observations, and
+  -- P is the number of parameters.
+  L.Matrix Double ->
+  L.Herm Double
 empiricalCovariance = snd . L.meanCov
+
+scaleWith ::
+  -- Vector of means (length P).
+  L.Vector Double ->
+  -- Vector of standard deviations (length P)
+  L.Vector Double ->
+  -- Data matrix of dimension N x P.
+  L.Matrix Double ->
+  -- Data matrix with means 0 and variance 1.0.
+  L.Matrix Double
+scaleWith ms ss = L.mapMatrixWithIndex (\(_, j) x -> (x - ms VS.! j) / (ss VS.! j))
+
+-- | Center and scales columns.
+--
+-- Normalize a data matrix to have means 0 and standard deviations/variances
+-- 1.0. The estimated covariance matrix of a scaled data matrix is a correlation
+-- matrix, which is easier to estimate.
+scale ::
+  -- | Data matrix of dimension NxP, where N is the number of observations, and
+  -- P is the number of parameters.
+  L.Matrix Double ->
+  -- | (Means, Standard deviations, Centered and scaled matrix)
+  (L.Vector Double, L.Vector Double, L.Matrix Double)
+scale xs = (ms, ss, scaleWith ms ss xs)
+  where
+    msVs = map S.meanVariance $ L.toColumns xs
+    ms = L.fromList $ map fst msVs
+    ss = L.fromList $ map (sqrt . snd) msVs
+
+-- | Convert a correlation matrix with given standard deviations to original
+-- scale.
+rescaleWith ::
+  -- | Vector of standard deviations (length P)
+  L.Vector Double ->
+  -- | Correlation matrix.
+  L.Matrix Double ->
+  -- | Covariance matrix.
+  L.Matrix Double
+rescaleWith ss = L.mapMatrixWithIndex (\(i, j) x -> x * (ss VS.! i) * (ss VS.! j))
diff --git a/src/Statistics/Covariance/LedoitWolf.hs b/src/Statistics/Covariance/LedoitWolf.hs
--- a/src/Statistics/Covariance/LedoitWolf.hs
+++ b/src/Statistics/Covariance/LedoitWolf.hs
@@ -17,6 +17,7 @@
 import Data.Foldable
 import qualified Numeric.LinearAlgebra as L
 import Statistics.Covariance.Internal.Tools
+import Statistics.Covariance.Types
 
 -- | Shrinkage based covariance estimator by Ledoit and Wolf.
 --
@@ -32,11 +33,12 @@
 --
 -- NOTE: This function may call 'error' due to partial library functions.
 ledoitWolf ::
+  DoCenter ->
   -- | Sample data matrix of dimension \(n \times p\), where \(n\) is the number
   -- of samples (rows), and \(p\) is the number of parameters (columns).
   L.Matrix Double ->
   Either String (L.Herm Double)
-ledoitWolf xs
+ledoitWolf c xs
   | n < 2 = Left "ledoitWolf: Need more than one sample."
   | p < 1 = Left "ledoitWolf: Need at least one parameter."
   -- The Ledoit and Wolf shrinkage estimator of the covariance matrix
@@ -47,7 +49,9 @@
     n = L.rows xs
     p = L.cols xs
     (means, sigma) = L.meanCov xs
-    xsCentered = centerWith means xs
+    xsCentered = case c of
+      DoCenter -> centerWith means xs
+      AssumeCentered -> xs
     im = L.trustSym $ L.ident p
     mu = muE sigma
     d2 = d2E im sigma mu
diff --git a/src/Statistics/Covariance/Types.hs b/src/Statistics/Covariance/Types.hs
new file mode 100644
--- /dev/null
+++ b/src/Statistics/Covariance/Types.hs
@@ -0,0 +1,24 @@
+-- |
+-- Module      :  Statistics.Covariance.Types
+-- Description :  Common types
+-- Copyright   :  (c) 2021 Dominik Schrempf
+-- License     :  GPL-3.0-or-later
+--
+-- Maintainer  :  dominik.schrempf@gmail.com
+-- Stability   :  experimental
+-- Portability :  portable
+--
+-- Creation date: Wed Sep 15 09:03:01 2021.
+module Statistics.Covariance.Types
+  ( DoCenter (..),
+  )
+where
+
+-- | For some methods, data matrices have to be centered before estimation of
+-- the covariance matrix. Sometimes, data matrices are already centered, and in
+-- this case, duplicate centering can be avoided.
+data DoCenter
+  = -- | Perform centering.
+    DoCenter
+  | -- | Do not perform centering; assume the data matrix is already centered.
+    AssumeCentered
