diff --git a/src/@dseries/backcast_.m b/src/@dseries/backcast_.m
index 5020c7c9e1115b1a94453357af4d9cb30cac3124..40bc368068d40a75f1a05b5e3a09bda8abdbe906 100644
--- a/src/@dseries/backcast_.m
+++ b/src/@dseries/backcast_.m
@@ -42,11 +42,11 @@ idp = find(o.dates(1)==p.dates);
 
 if diff
     FirstDifference = p.data(2:idp,:)-p.data(1:idp-1,:);
-    CumulatedDifferences = cumsum(FirstDifference, 'reverse');
+    CumulatedDifferences = rcumsum(FirstDifference);
     o.data = [bsxfun(@minus, o.data(1:end), CumulatedDifferences); o.data];    
 else
     GrowthFactor = p.data(2:idp,:)./p.data(1:idp-1,:);
-    CumulatedGrowthFactors = cumprod(GrowthFactor, 'reverse');
+    CumulatedGrowthFactors = rcumprod(GrowthFactor);
     o.data = [bsxfun(@rdivide, o.data(1:end), CumulatedGrowthFactors); o.data];
 end
 
diff --git a/src/utilities/cumulate/rcumprod.m b/src/utilities/cumulate/rcumprod.m
new file mode 100644
index 0000000000000000000000000000000000000000..54be58efc8df8ed4c33b1e72e7b7a6e516c4e45b
--- /dev/null
+++ b/src/utilities/cumulate/rcumprod.m
@@ -0,0 +1,12 @@
+function Y = rcumprod(X)
+
+% Returns the cumulated product of X from bottom to top (reversed order
+% compared to cumprod, emulate the `reverse` option).
+%
+% INPUTS
+% - X      [double]      T×N array
+%
+% OUTPUTS
+% - Y      [double]      T×N array
+
+Y = flip(cumprod(flip(X)));
\ No newline at end of file
diff --git a/src/utilities/cumulate/rcumsum.m b/src/utilities/cumulate/rcumsum.m
new file mode 100644
index 0000000000000000000000000000000000000000..db52f3de0463b21e7023ba71cf13ebccd0bfceea
--- /dev/null
+++ b/src/utilities/cumulate/rcumsum.m
@@ -0,0 +1,12 @@
+function Y = rcumsum(X)
+
+% Returns the cumulated sum of X from bottom to top (reversed order
+% compared to cumsum, emulate the `reverse` option).
+%
+% INPUTS
+% - X      [double]      T×N array
+%
+% OUTPUTS
+% - Y      [double]      T×N array
+
+Y = flip(cumsum(flip(X)));
\ No newline at end of file