diff --git a/R/.gitignore b/R/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..53c4b989bb955233675eb0d973b175dcadd9e5e8
--- /dev/null
+++ b/R/.gitignore
@@ -0,0 +1 @@
+TODO.txt
diff --git a/R/InsuranceContract.R b/R/InsuranceContract.R
index 79f0b41dc38556cead1b4e5694c2e63746d7f9d1..07dc9df0d315c9bddd88565f63737f5b2716dba3 100644
--- a/R/InsuranceContract.R
+++ b/R/InsuranceContract.R
@@ -49,7 +49,11 @@ InsuranceContract = R6Class(
       self$tarif = tarif;
       self$age = age;
       self$policyPeriod = policyPeriod;
-      self$premiumPeriod = premiumPeriod;
+      if (missing(premiumPeriod) && !is.na(self$tarif$premiumPeriod)) {
+        self$premiumPeriod = self$tarif$premiumPeriod;
+      } else {
+        self$premiumPeriod = premiumPeriod;
+      }
       self$sumInsured = sumInsured;
       if (!missing(deferral))     self$deferral = deferral;
       if (!missing(YOB))          self$YOB = YOB;
diff --git a/R/InsuranceTarif.R b/R/InsuranceTarif.R
index b43c8cb3b909519c54f091f11ae222f98b3bd733..034cdab8b3b1fb4e680a8d641f6e07939a32bc23 100644
--- a/R/InsuranceTarif.R
+++ b/R/InsuranceTarif.R
@@ -9,9 +9,9 @@ PaymentTimeEnum = setSingleEnum("PaymentTime", levels = c("in advance", "in arre
 
 
 # Initialize a cost matrix with dimensions: [CostType, Basis, Period], with:
-#     CostType: alpha, Zillmer, beta, gamma
+#     CostType: alpha, Zillmer, beta, gamma, gamma_nopremiums
 #     Basis:    SumInsured, SumPremiums, GrossPremium
-#     Period:   once, premiumPeriod, policyPeriod
+#     Period:   once, PremiumPeriod, PremiumFree, PolicyPeriod
 # TODO: gamma an Erlebensleistungen?
 initializeCosts = function() {
   dimnm=list(
@@ -46,6 +46,7 @@ InsuranceTarif = R6Class(
     benefitFrequencyOrder = 0,
     widowFactor = 0,
 
+    premiumPeriod = NA,
     premiumRefund = 0,
     premiumRefundLoading = 0,  # Mindesttodesfallrisiko soll damit erreicht werden, z.B. 105% der einbezahlten Prämien
 
@@ -67,7 +68,7 @@ InsuranceTarif = R6Class(
       ),
 
 
-    initialize = function(name = NA, mortalityTable = NA, i = NA, type = "wholelife", ..., premiumFrequencyOrder = 0, benefitFrequencyOrder = 0, costs) {
+    initialize = function(name = NA, mortalityTable = NA, i = NA, type = "wholelife", ..., premiumPeriod = NA, premiumFrequencyOrder = 0, benefitFrequencyOrder = 0, costs) {
       if (!missing(name))           self$name = name;
       if (!missing(mortalityTable)) self$mortalityTable = mortalityTable;
       if (!missing(i))              self$i = i;
@@ -75,6 +76,8 @@ InsuranceTarif = R6Class(
       self$costs = if (!missing(costs)) costs else initializeCosts();
       if (!missing(benefitFrequencyOrder)) self$benefitFrequencyOrder = benefitFrequencyOrder;
       if (!missing(premiumFrequencyOrder)) self$premiumFrequencyOrder = premiumFrequencyOrder;
+      # Set default premiumPeriod, e.g. single premium, to be used when the contract has no explicit premium period
+      if (!missing(premiumPeriod))  self$premiumPeriod = premiumPeriod;
 
       self$v = 1/(1+self$i);