diff --git a/NAMESPACE b/NAMESPACE
index 99f1e6fbe4e8aca71d6babbd6ce9657da18c50a1..371a683ebb5e05d276820772bc2e72366d35dddd 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -19,6 +19,7 @@ export(PP.base.ZillmerReserveT2)
 export(PP.base.ZillmerRiskPremium)
 export(PP.base.contractualReserve)
 export(PP.base.meanContractualReserve)
+export(PP.base.previousContractualReserve)
 export(PP.base.sumInsured)
 export(PP.benefit.Profit)
 export(PP.benefit.ProfitPlusGuaranteedInterest)
@@ -30,11 +31,13 @@ export(PP.benefit.ProfitPlusTerminalBonusReserve)
 export(PP.benefit.ProfitPlusTotalInterest)
 export(PP.benefit.TerminalBonus5YearsProRata)
 export(PP.calculate.RateOnBase)
+export(PP.calculate.RateOnBaseMin0)
 export(PP.calculate.RateOnBaseSGFFactor)
 export(PP.calculate.RatePlusGuaranteeOnBase)
 export(PP.rate.expenseProfit)
 export(PP.rate.interestProfit)
 export(PP.rate.interestProfit2)
+export(PP.rate.interestProfit2PlusGuarantee)
 export(PP.rate.interestProfitPlusGuarantee)
 export(PP.rate.riskProfit)
 export(PP.rate.sumProfit)
diff --git a/R/ProfitParticipation.R b/R/ProfitParticipation.R
index 2347e333aa9a4ea748abcd8e7c15a8fc71ba9e44..fbbdff869bb7cd184b9975fa4b83af68e6fe340f 100644
--- a/R/ProfitParticipation.R
+++ b/R/ProfitParticipation.R
@@ -254,9 +254,9 @@ ProfitParticipation = R6Class(
         sumRate      = self$Functions$getSumProfitRate(rates = rates, params = params, values = values);
 
         intProfit     = self$Functions$calculateInterestProfit(base = intBase, rate = intRate, waiting = waitingFactor, rates = rates, params = params, values = values);
-        riskProfit    = self$Functions$calculateInterestProfit(base = riskBase, rate = riskRate, waiting = waitingFactor, rates = rates, params = params, values = values);
-        expenseProfit = self$Functions$calculateInterestProfit(base = expenseBase, rate = expenseRate, waiting = waitingFactor, rates = rates, params = params, values = values);
-        sumProfit     = self$Functions$calculateInterestProfit(base = sumBase, rate = sumRate, waiting = waitingFactor, rates = rates, params = params, values = values);
+        riskProfit    = self$Functions$calculateRiskProfit(base = riskBase, rate = riskRate, waiting = waitingFactor, rates = rates, params = params, values = values);
+        expenseProfit = self$Functions$calculateExpenseProfit(base = expenseBase, rate = expenseRate, waiting = waitingFactor, rates = rates, params = params, values = values);
+        sumProfit     = self$Functions$calculateSumProfit(base = sumBase, rate = sumRate, waiting = waitingFactor, rates = rates, params = params, values = values);
 
         interestOnProfitRate = self$Functions$getInterestOnProfits(rates = rates, params = params, values = values);
 
diff --git a/R/ProfitParticipation_Functions.R b/R/ProfitParticipation_Functions.R
index b4fb8d2746f4cc9782543534c3b347c055f58a21..6660b23126c2695baf5075ba430e5422a0e63c7a 100644
--- a/R/ProfitParticipation_Functions.R
+++ b/R/ProfitParticipation_Functions.R
@@ -12,6 +12,13 @@ NULL
 #' @name ProfitParticipationFunctions
 NULL
 
+shiftBy = function(rate, n = 1) {
+  nm = names(rate)
+  res = c(rep(0, n), head(rate, -n))
+  names(res) = nm
+  res
+  
+}
 
 ##########################################################################m##
 # Calculation bases for the various types of profit                      ####  
@@ -28,29 +35,30 @@ PP.base.NULL = function(rates, params, values, ...) {
 #' Basis for profit: Previous Zillmer reserve (no administration cost reserve)
 #' @export
 PP.base.PreviousZillmerReserve = function(rates, params, values, ...) {
-    nm = names(values$reserves[,"Zillmer"])
-    res = c(0, head(values$reserves[,"Zillmer"], -1))
-    names(res) = nm
-    res
-};
+    shiftBy(values$reserves[,"Zillmer"], n = 1)
+}
 
 #' @describeIn ProfitParticipationFunctions
 #' Basis for profit: Zillmer reserve (no administration cost reserve) at time t-2
 #' @export
 PP.base.ZillmerReserveT2 = function(rates, params, values, ...) {
-    nm = names(values$reserves[,"Zillmer"])
-    res = c(0, 0, head(values$reserves[,"Zillmer"], -2))
-    names(res) = nm
-    res
-};
+    shiftBy(values$reserves[,"Zillmer"], n = 2)
+}
 
 #' @describeIn ProfitParticipationFunctions
 #' Basis for profit: Contractual reserve (including administration costs) at time t
 #' @export
 PP.base.contractualReserve = function(rates, params, values, ...) {
-    pmax(0, values$reserves[,"contractual"])
+  pmax(0, values$reserves[,"contractual"])
 };
 
+#' @describeIn ProfitParticipationFunctions
+#' Basis for profit: Contractual reserve (including administration costs) at time t-1
+#' @export
+PP.base.previousContractualReserve = function(rates, params, values, ...) {
+  shiftBy(values$reserves[,"contractual"], n = 1)
+}
+
 #' @describeIn ProfitParticipationFunctions
 #' Basis for profit: Contractual reserve (including administration costs) averaged over t and t-1
 #' @export
@@ -65,7 +73,7 @@ PP.base.meanContractualReserve = function(rates, params, values, ...) {
 PP.base.ZillmerRiskPremium = function(rates, params, values, ...) {
     # The risk premium of t=0 is used to determine the risk profit at time
     # t=1, so shift the whole vector!
-    c(0, head(values$premiumComposition[,"Zillmer.risk"], -1))
+    shiftBy(values$premiumComposition[,"Zillmer.risk"], n = 1)
 };
 
 #' @describeIn ProfitParticipationFunctions
@@ -180,6 +188,13 @@ PP.calculate.RateOnBase = function(base, rate, waiting, rates, params, values, .
     base * rate * waiting
 };
 
+#' @describeIn ProfitParticipationFunctions
+#' Calculate profit by a simple rate applied on the basis (with an optional waiting vector of values 0 or 1), bound below by 0
+#' @export
+PP.calculate.RateOnBaseMin0 = function(base, rate, waiting, rates, params, values, ...) {
+    pmax(0, base * rate * waiting)
+};
+
 #' @describeIn ProfitParticipationFunctions
 #' Calculate profit by a rate + guaranteed interest applied on the basis (with an optional waiting vector of values 0 or 1)
 #' @export
diff --git a/man/ProfitParticipationFunctions.Rd b/man/ProfitParticipationFunctions.Rd
index e8e1b575c3b43d8e23910ab61fe6af08f4ec29e8..1ffda3e1ab746e4322d29dcb0af301dbb25b81f6 100644
--- a/man/ProfitParticipationFunctions.Rd
+++ b/man/ProfitParticipationFunctions.Rd
@@ -6,6 +6,7 @@
 \alias{PP.base.PreviousZillmerReserve}
 \alias{PP.base.ZillmerReserveT2}
 \alias{PP.base.contractualReserve}
+\alias{PP.base.previousContractualReserve}
 \alias{PP.base.meanContractualReserve}
 \alias{PP.base.ZillmerRiskPremium}
 \alias{PP.base.sumInsured}
@@ -16,10 +17,12 @@
 \alias{PP.rate.terminalBonus}
 \alias{PP.rate.terminalBonusFundRatio}
 \alias{PP.rate.interestProfitPlusGuarantee}
+\alias{PP.rate.interestProfit2PlusGuarantee}
 \alias{PP.rate.totalInterest}
 \alias{PP.rate.totalInterest2}
 \alias{PP.rate.interestProfit2}
 \alias{PP.calculate.RateOnBase}
+\alias{PP.calculate.RateOnBaseMin0}
 \alias{PP.calculate.RatePlusGuaranteeOnBase}
 \alias{PP.calculate.RateOnBaseSGFFactor}
 \alias{PP.benefit.ProfitPlusTerminalBonusReserve}
@@ -41,59 +44,64 @@ PP.base.ZillmerReserveT2(rates, params, values, ...)
 
 PP.base.contractualReserve(rates, params, values, ...)
 
+PP.base.previousContractualReserve(rates, params, values, ...)
+
 PP.base.meanContractualReserve(rates, params, values, ...)
 
 PP.base.ZillmerRiskPremium(rates, params, values, ...)
 
 PP.base.sumInsured(rates, params, values, ...)
 
-PP.rate.interestProfit(rates, params, values, ...)
+PP.rate.interestProfit(rates, ...)
+
+PP.rate.riskProfit(rates, ...)
 
-PP.rate.riskProfit(rates, params, values, ...)
+PP.rate.expenseProfit(rates, ...)
 
-PP.rate.expenseProfit(rates, params, values, ...)
+PP.rate.sumProfit(rates, ...)
 
-PP.rate.sumProfit(rates, params, values, ...)
+PP.rate.terminalBonus(rates, ...)
 
-PP.rate.terminalBonus(rates, params, values, ...)
+PP.rate.terminalBonusFundRatio(rates, ...)
 
-PP.rate.terminalBonusFundRatio(rates, params, values, ...)
+PP.rate.interestProfitPlusGuarantee(rates, ...)
 
-PP.rate.interestProfitPlusGuarantee(rates, params, values, ...)
+PP.rate.interestProfit2PlusGuarantee(rates, ...)
 
-PP.rate.totalInterest(rates, params, values, ...)
+PP.rate.totalInterest(rates, ...)
 
-PP.rate.totalInterest2(rates, params, values, ...)
+PP.rate.totalInterest2(rates, ...)
 
-PP.rate.interestProfit2(rates, params, values, ...)
+PP.rate.interestProfit2(rates, ...)
 
 PP.calculate.RateOnBase(base, rate, waiting, rates, params, values, ...)
 
+PP.calculate.RateOnBaseMin0(base, rate, waiting, rates, params, values,
+  ...)
+
 PP.calculate.RatePlusGuaranteeOnBase(base, rate, waiting, rates, params,
   values, ...)
 
 PP.calculate.RateOnBaseSGFFactor(base, rate, waiting, rates, params,
   values, ...)
 
-PP.benefit.ProfitPlusTerminalBonusReserve(profits, rates, params, values)
+PP.benefit.ProfitPlusTerminalBonusReserve(profits, ...)
 
-PP.benefit.Profit(profits, rates, params, values)
+PP.benefit.Profit(profits, ...)
 
-PP.benefit.ProfitPlusGuaranteedInterest(profits, rates, params, values)
+PP.benefit.ProfitPlusGuaranteedInterest(profits, rates, ...)
 
 PP.benefit.ProfitPlusTotalInterest(profits, rates, params, values)
 
-PP.benefit.ProfitPlusHalfTotalInterest(profits, rates, params, values)
+PP.benefit.ProfitPlusHalfTotalInterest(profits, ...)
 
-PP.benefit.ProfitPlusHalfGuaranteedInterest(profits, rates, params, values)
+PP.benefit.ProfitPlusHalfGuaranteedInterest(profits, rates, ...)
 
-PP.benefit.ProfitPlusInterestMinGuaranteeTotal(profits, rates, params,
-  values)
+PP.benefit.ProfitPlusInterestMinGuaranteeTotal(profits, rates, ...)
 
-PP.benefit.ProfitPlusHalfInterestMinGuaranteeTotal(profits, rates, params,
-  values)
+PP.benefit.ProfitPlusHalfInterestMinGuaranteeTotal(profits, rates, ...)
 
-PP.benefit.TerminalBonus5YearsProRata(profits, rates, params, values)
+PP.benefit.TerminalBonus5YearsProRata(profits, params, ...)
 }
 \description{
 Various helper functions for the \code{ProfitParticipation} class that
@@ -110,6 +118,8 @@ the rates and how the assigned profit is calculated.
 
 \item \code{PP.base.contractualReserve}: Basis for profit: Contractual reserve (including administration costs) at time t
 
+\item \code{PP.base.previousContractualReserve}: Basis for profit: Contractual reserve (including administration costs) at time t-1
+
 \item \code{PP.base.meanContractualReserve}: Basis for profit: Contractual reserve (including administration costs) averaged over t and t-1
 
 \item \code{PP.base.ZillmerRiskPremium}: Basis for risk/mortality profit: Zillmer Risk Premium of the past year
@@ -128,7 +138,9 @@ the rates and how the assigned profit is calculated.
 
 \item \code{PP.rate.terminalBonusFundRatio}: Returns the array of terminal bonus rates (keyed by year) as the terminal bonus fund ratio
 
-\item \code{PP.rate.interestProfitPlusGuarantee}: Rate for interest on past profits: total interest rate
+\item \code{PP.rate.interestProfitPlusGuarantee}: Rate for interest on past profits: total credited rate, but at least the guarantee
+
+\item \code{PP.rate.interestProfit2PlusGuarantee}: Rate for interest on past profits: total creditedrate2, but at least the guarantee
 
 \item \code{PP.rate.totalInterest}: Rate for interest on past profits: total interest rate
 
@@ -138,6 +150,8 @@ the rates and how the assigned profit is calculated.
 
 \item \code{PP.calculate.RateOnBase}: Calculate profit by a simple rate applied on the basis (with an optional waiting vector of values 0 or 1)
 
+\item \code{PP.calculate.RateOnBaseMin0}: Calculate profit by a simple rate applied on the basis (with an optional waiting vector of values 0 or 1), bound below by 0
+
 \item \code{PP.calculate.RatePlusGuaranteeOnBase}: Calculate profit by a rate + guaranteed interest applied on the basis (with an optional waiting vector of values 0 or 1)
 
 \item \code{PP.calculate.RateOnBaseSGFFactor}: Calculate profit by a simple rate applied on the basis (with only (1-SGFFactor) put into profit participation, and an optional waiting vector of values 0 or 1)