diff --git a/R/InsuranceParameters.R b/R/InsuranceParameters.R
index 06e5b13ba52889f9c3a1283aae686ef84d63d190..56e99a06ec80fed5fcfe8c7aed4bff5a8bf5c5e4 100644
--- a/R/InsuranceParameters.R
+++ b/R/InsuranceParameters.R
@@ -446,6 +446,8 @@ InsuranceContract.Values = list(
 #'     \item{\code{$surrenderIncludesCostsReserves}}{Whether (administration)
 #'               cost reserves are paid out on surrender (i.e. included in the
 #'               surrender value before surrender penalties are applied)}
+#'     \item{\code{$unitcostsInGross}}{Whether unit costs are included in the
+#'               gross premium calculation or added after gross premiums. (default: FALSE)}
 #' }
 #'
 #' ## Elements of sublist \code{InsuranceContract.ParameterDefault$ProfitParticipation}
@@ -567,7 +569,8 @@ InsuranceContract.ParameterDefaults = list(
         betaGammaInZillmer = FALSE,             # Whether beta and gamma-costs should be included in the Zillmer premium calculation
         alphaRefundLinear  = TRUE,              # Whether the refund of alpha-costs on surrender is linear in t or follows the NPV of an annuity
         useUnearnedPremiums = isRegularPremiumContract, # Whether unearned premiums should be calculated in the balance sheet reserves. Otherwise, a premium paid at the beginning of the period is added to the reserve for balance-sheet purposes.
-        surrenderIncludesCostsReserves = TRUE  # Whether (administration) cost reserves are paid out on surrender (i.e. included in the surrender value before surrender penalties are applied)
+        surrenderIncludesCostsReserves = TRUE,  # Whether (administration) cost reserves are paid out on surrender (i.e. included in the surrender value before surrender penalties are applied)
+        unitcostsInGross = FALSE
     ),
 
     ProfitParticipation = list(
diff --git a/R/InsuranceTarif.R b/R/InsuranceTarif.R
index 3a0b6d48d401d038a7f83c7130a2bb690f92b1c3..f63a0549e5a464f1b54190ad8510e602be5c1b8d 100644
--- a/R/InsuranceTarif.R
+++ b/R/InsuranceTarif.R
@@ -903,35 +903,25 @@ InsuranceTarif = R6Class(
       # coefficients for the costs
 
       if (type == "gross") {
-        coeff[["SumInsured"]][["costs"]]["alpha", "SumInsured",] = 1;
-        coeff[["SumInsured"]][["costs"]]["beta",  "SumInsured",] = 1;
-        coeff[["SumInsured"]][["costs"]]["gamma", "SumInsured",] = 1;
+        affected = c("alpha", "beta", "gamma")
+        if (params$Features$unitcostsInGross) {
+          affected = c(affected, "unitcosts")
+        }
+        coeff[["SumInsured"]][["costs"]][affected, "SumInsured",  ] = 1;
         # TODO: How to handle beta costs proportional to Sum Insured
-        coeff[["Premium"]][["costs"]]["alpha", "SumPremiums",] = -values$unitPremiumSum;
-        coeff[["Premium"]][["costs"]]["beta",  "SumPremiums",] = -values$unitPremiumSum;
-        coeff[["Premium"]][["costs"]]["gamma", "SumPremiums",] = -values$unitPremiumSum;
-
-        coeff[["Premium"]][["costs"]]["alpha", "GrossPremium",] = -1;
-        coeff[["Premium"]][["costs"]]["beta",  "GrossPremium",] = -1;
-        coeff[["Premium"]][["costs"]]["gamma", "GrossPremium",] = -1;
-
-        coeff[["SumInsured"]][["costs"]]["alpha", "Constant",] = 1 / params$ContractData$sumInsured;
-        coeff[["SumInsured"]][["costs"]]["beta",  "Constant",] = 1 / params$ContractData$sumInsured;
-        coeff[["SumInsured"]][["costs"]]["gamma", "Constant",] = 1 / params$ContractData$sumInsured;
+        coeff[["Premium"]]   [["costs"]][affected, "SumPremiums", ] = -values$unitPremiumSum;
+        coeff[["Premium"]]   [["costs"]][affected, "GrossPremium",] = -1;
+        coeff[["SumInsured"]][["costs"]][affected, "Constant",    ] = 1 / params$ContractData$sumInsured;
 
       } else if (type == "Zillmer") {
           # TODO: Include costs with basis NetPremium and fixed costs!
-        coeff[["SumInsured"]][["costs"]]["Zillmer","SumInsured",] = 1;
-        coeff[["SumInsured"]][["costs"]]["Zillmer","SumPremiums",] = values$unitPremiumSum * premiums[["unit.gross"]];
-        coeff[["SumInsured"]][["costs"]]["Zillmer","GrossPremium",] = premiums[["unit.gross"]];
+        affected = c("Zillmer")
         if (params$Features$betaGammaInZillmer) {
-          coeff[["SumInsured"]][["costs"]]["beta",  "SumInsured",] = 1;
-          coeff[["SumInsured"]][["costs"]]["gamma", "SumInsured",] = 1;
-          coeff[["SumInsured"]][["costs"]]["beta",  "SumPremiums",] = values$unitPremiumSum * premiums[["unit.gross"]];
-          coeff[["SumInsured"]][["costs"]]["gamma", "SumPremiums",] = values$unitPremiumSum * premiums[["unit.gross"]];
-          coeff[["SumInsured"]][["costs"]]["beta",  "GrossPremium",] = premiums[["unit.gross"]];
-          coeff[["SumInsured"]][["costs"]]["gamma", "GrossPremium",] = premiums[["unit.gross"]];
+          affected = c(affected, "beta", "gamma")
         }
+        coeff[["SumInsured"]][["costs"]][affected,"SumInsured",  ] = 1;
+        coeff[["SumInsured"]][["costs"]][affected,"SumPremiums", ] = values$unitPremiumSum * premiums[["unit.gross"]];
+        coeff[["SumInsured"]][["costs"]][affected,"GrossPremium",] = premiums[["unit.gross"]];
       }
 
       applyHook(params$Hooks$adjustPremiumCoefficients, coeff, type = type, premiums = premiums, params = params, values = values, premiumCalculationTime = premiumCalculationTime)
@@ -1022,7 +1012,10 @@ InsuranceTarif = R6Class(
 
 
       frequencyLoading = valueOrFunction(loadings$premiumFrequencyLoading, params = params, values = values);
-      premiumBeforeTax = (values$premiums[["unit.gross"]]*(1 + noMedicalExam.relative + extraChargeGrossPremium) + noMedicalExam - sumRebate - extraRebate) * sumInsured * (1 - advanceProfitParticipation) + premium.unitcosts;
+      premiumBeforeTax = (values$premiums[["unit.gross"]]*(1 + noMedicalExam.relative + extraChargeGrossPremium) + noMedicalExam - sumRebate - extraRebate) * sumInsured * (1 - advanceProfitParticipation);
+      if (params$Features$unitcostsInGross) {
+        premiumBeforeTax = premiumBeforeTax + premium.unitcosts;
+      }
       premiumBeforeTax = premiumBeforeTax * (1 - premiumRebate - advanceProfitParticipationUnitCosts - partnerRebate);
       # TODO / FIXME: Add a check that frequencyLoading has an entry for the premiumFrequency -> Otherwise do not add any loading (currently NULL is returned, basically setting all premiums to NULL)
       premiumBeforeTax.y = premiumBeforeTax * (1 + frequencyLoading[[toString(params$ContractData$premiumFrequency)]]);
diff --git a/man/InsuranceContract.ParameterDefaults.Rd b/man/InsuranceContract.ParameterDefaults.Rd
index f3c00be930e3c8e84b4fdca9e89334219f1144a1..b6d01ac2810c1cb021e5bbc02973bb4c0069a098 100644
--- a/man/InsuranceContract.ParameterDefaults.Rd
+++ b/man/InsuranceContract.ParameterDefaults.Rd
@@ -244,6 +244,8 @@ premium paid. In turn, no unearned premiums are applied.}
 \item{\code{$surrenderIncludesCostsReserves}}{Whether (administration)
 cost reserves are paid out on surrender (i.e. included in the
 surrender value before surrender penalties are applied)}
+\item{\code{$unitcostsInGross}}{Whether unit costs are included in the
+gross premium calculation or added after gross premiums. (default: FALSE)}
 }
 }