diff --git a/inst/extdata/Germany_Census_BRD.csv b/TODO/Germany_Census_BRD.csv
similarity index 100%
rename from inst/extdata/Germany_Census_BRD.csv
rename to TODO/Germany_Census_BRD.csv
diff --git a/inst/extdata/Germany_Census_DeutschesReich.csv b/TODO/Germany_Census_DeutschesReich.csv
similarity index 100%
rename from inst/extdata/Germany_Census_DeutschesReich.csv
rename to TODO/Germany_Census_DeutschesReich.csv
diff --git a/inst/extdata/MortalityTables_Germany_Census.R b/TODO/MortalityTables_Germany_Census.R
similarity index 100%
rename from inst/extdata/MortalityTables_Germany_Census.R
rename to TODO/MortalityTables_Germany_Census.R
diff --git a/inst/extdata/MortalityTables_USA_Annuities.R b/TODO/MortalityTables_USA_Annuities.R
similarity index 100%
rename from inst/extdata/MortalityTables_USA_Annuities.R
rename to TODO/MortalityTables_USA_Annuities.R
diff --git a/inst/extdata/MortalityTables_USA_Annuities_1971IAM.R b/TODO/MortalityTables_USA_Annuities_1971IAM.R
similarity index 100%
rename from inst/extdata/MortalityTables_USA_Annuities_1971IAM.R
rename to TODO/MortalityTables_USA_Annuities_1971IAM.R
diff --git a/inst/extdata/MortalityTables_USA_Annuities_1983a.R b/TODO/MortalityTables_USA_Annuities_1983a.R
similarity index 100%
rename from inst/extdata/MortalityTables_USA_Annuities_1983a.R
rename to TODO/MortalityTables_USA_Annuities_1983a.R
diff --git a/inst/extdata/MortalityTables_USA_Annuities_1994GAR.R b/TODO/MortalityTables_USA_Annuities_1994GAR.R
similarity index 100%
rename from inst/extdata/MortalityTables_USA_Annuities_1994GAR.R
rename to TODO/MortalityTables_USA_Annuities_1994GAR.R
diff --git a/inst/extdata/MortalityTables_USA_Annuities_2012IAM.R b/TODO/MortalityTables_USA_Annuities_2012IAM.R
similarity index 100%
rename from inst/extdata/MortalityTables_USA_Annuities_2012IAM.R
rename to TODO/MortalityTables_USA_Annuities_2012IAM.R
diff --git a/inst/extdata/MortalityTables_USA_Annuities_Annuity2000.R b/TODO/MortalityTables_USA_Annuities_Annuity2000.R
similarity index 100%
rename from inst/extdata/MortalityTables_USA_Annuities_Annuity2000.R
rename to TODO/MortalityTables_USA_Annuities_Annuity2000.R
diff --git a/TODO/PensionTables_Austria_AVOe1999P.R b/TODO/PensionTables_Austria_AVOe1999P.R
new file mode 100644
index 0000000000000000000000000000000000000000..a027006b68888c6dfc7628a7e8bac3b696dc85b6
--- /dev/null
+++ b/TODO/PensionTables_Austria_AVOe1999P.R
@@ -0,0 +1,143 @@
+#' @import MortalityTables
+NULL
+
+stopifnot(require(methods), require(utils), require(MortalityTables)) # MortalityTable classes; new; Excel reader
+
+
+###############################################################################
+# AVÖ 1999P exact (Male, Female)
+###############################################################################
+
+
+AVOe1999P.generate = function(file, name="P", collar = "Angestellte") {
+    table99 = function(name, data, agevar = "x", probvar, trendvar = NULL, dim = list(), ..., baseyear = 1982) {
+        if (is.null(trendvar)) {
+            mortalityTable.period(
+                name = name, ages = data[[agevar]], baseYear = baseyear,
+                deathProbs = data[[probvar]], data = list(dim = dim))
+        } else {
+            mortalityTable.trendProjection(
+                name = name, ages = data[[agevar]], baseYear = baseyear,
+                deathProbs = data[[probvar]], trend = data[[trendvar]],
+                data = list(dim = dim))
+        }
+    }
+    name99p = function(name, desc) {
+        paste("AVÖ 1999-", name, ", ", desc, sep = "")
+    }
+
+    data = utils::read.csv(
+        system.file("extdata", file, package = "MortalityTablesPrivate"),
+        skip = 4,
+        header = FALSE,
+        col.names = c(
+            "x",
+            "qaax", "qix", "qpx", "qgx", "qwy", "ix", "hx", "yx",
+            "SPACER",
+            "qaay", "qiy", "qpy", "qgy", "qwx", "iy", "hy", "xy",
+            "SPACER", "lambdax", "lambday")
+    );
+
+
+    male = pensionTable(
+        name = name99p(name, "Männer"),
+        baseYear = 1982,
+        qx =  table99(name99p(name, "qax, active males"), data, "x", "qaax", "lambdax",
+                      dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")),
+        ix =  table99(name99p(name, "ix, probability of invalidity"), data, "x", "ix",
+                      dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Invalidisierung")),
+        qgx = table99(name99p(name, "qgx, total males"), data, "x", "qgx", "lambdax",
+                      dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")),
+        qix = table99(name99p(name, "qix, disabled males"), data, "x", "qix", "lambdax",
+                      dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")),
+        rx =  mortalityTable.zeroes(name = "No reactivation", ages = data[["x"]]),
+        apx = mortalityTable.once(transitionAge = 65 - 1, name = "Pensionsalter 65", ages = data[["x"]]),
+        qpx = table99(name99p(name, "qpx, retired males"), data, "x", "qpx", "lambdax",
+                      dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")),
+        hx =  table99(name99p(name, "hx, marriage probability"), data, "x", "hx",
+                      dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Partnerwahrscheinlichkeit im Tod")),
+        qwy = table99(name99p(name, "qwy, widows"), data, "x", "qwy", "lambday",
+                      dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")),
+        yx =  table99(name99p(name, "y(x), age of widow"), data, "x", "yx",
+                      dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "mittl. Hinterbliebenenalter")),
+        invalids.retire = FALSE,
+        data = list(
+            Geschlecht = "Männer",
+            Bestand = if (endsWith(name, "Arb./Ang.")) "Mischbestand" else "Angestellte",
+            Invalidisierung = "Invaliditätspension"
+        )
+    )
+
+    female = pensionTable(
+        name = name99p(name, "Frauen"),
+        baseYear = 1982,
+        qx =  table99(name99p(name, "qay, active females"), data, "x", "qaay", "lambday",
+                      dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")),
+        ix =  table99(name99p(name, "ix, probability of invalidity"), data, "x", "iy",
+                      dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Invalidisierung")),
+        qgx = table99(name99p(name, "qgy, total females"), data, "x", "qgx", "lambday",
+                      dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")),
+        qix = table99(name99p(name, "qiy, disabled females"), data, "x", "qix", "lambday",
+                      dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")),
+        rx =  mortalityTable.zeroes(name = "No reactivation", ages = data[["x"]]),
+        apx = mortalityTable.once(transitionAge = 60 - 1, name = "Pensionsalter 60", ages = data[["x"]]),
+        qpx = table99(name99p(name, "qpy, retired females"), data, "x", "qpx", "lambday",
+                      dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")),
+        hx =  table99(name99p(name, "hy, marriage probability"), data, "x", "hy",
+                      dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Partnerwahrscheinlichkeit im Tod")),
+        qwy = table99(name99p(name, "qwx, widowers"), data, "x", "qwx", "lambdax",
+                      dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")),
+        yx =  table99(name99p(name, "x(y), age of widower"), data, "x", "xy",
+                      dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "mittl. Hinterbliebenenalter")),
+        invalids.retire = FALSE,
+        data = list(
+            Geschlecht = "Frauen",
+            Bestand = if (endsWith(name, "Arb./Ang.")) "Mischbestand" else "Angestellte",
+            Invalidisierung = "Invaliditätspension"
+        )
+    )
+
+    list(male = male, female = female)
+}
+
+AVOe1999P.tmp = AVOe1999P.generate("Austria_Pensions_AVOe1999P_Angestellte.csv", "P", collar = "Angestellte")
+AVOe1999P.male = AVOe1999P.tmp$male
+AVOe1999P.female = AVOe1999P.tmp$female
+
+AVOe1999P.tmp = AVOe1999P.generate("Austria_Pensions_AVOe1999P_ArbeiterAngestellte.csv", "P Arb./Ang.", collar = "Mischbestand")
+AVOe1999P.male.ArbAng = AVOe1999P.tmp$male
+AVOe1999P.female.ArbAng = AVOe1999P.tmp$female
+
+AVOe1999P.tmp = AVOe1999P.generate("Austria_Pensions_AVOe1999P_Angestellte.csv", "PK", collar = "Angestellte")
+AVOe1999P.male.PK = AVOe1999P.tmp$male
+AVOe1999P.female.PK = AVOe1999P.tmp$female
+
+AVOe1999P.tmp = AVOe1999P.generate("Austria_Pensions_AVOe1999P_ArbeiterAngestellte.csv", "PK Arb./Ang.", collar = "Mischbestand")
+AVOe1999P.male.ArbAng.PK = AVOe1999P.tmp$male
+AVOe1999P.female.ArbAng.PK = AVOe1999P.tmp$female
+
+
+############################################################################## #
+# Die Tafel als Array ----
+############################################################################## #
+
+AVOe1999P = array(
+    data = c(mortalityTable.NA),
+    dim = c(2, 2, 1, 2),
+    dimnames = list(Geschlecht = c("m", "w"), Bestand = c("Angestellte", "Mischbestand"), Invalidisierung = c("IP"), Typ = c("P", "PK"))
+)
+
+AVOe1999P[["m", "Angestellte", "IP", "P"]] = AVOe1999P.male
+AVOe1999P[["w", "Angestellte", "IP", "P"]] = AVOe1999P.female
+AVOe1999P[["m", "Mischbestand", "IP", "P"]] = AVOe1999P.male.ArbAng
+AVOe1999P[["w", "Mischbestand", "IP", "P"]] = AVOe1999P.female.ArbAng
+
+AVOe1999P[["m", "Angestellte", "IP", "PK"]] = AVOe1999P.male.PK
+AVOe1999P[["w", "Angestellte", "IP", "PK"]] = AVOe1999P.female.PK
+AVOe1999P[["m", "Mischbestand", "IP", "PK"]] = AVOe1999P.male.ArbAng.PK
+AVOe1999P[["w", "Mischbestand", "IP", "PK"]] = AVOe1999P.female.ArbAng.PK
+
+
+
+
+rm(AVOe1999P.generate, AVOe1999P.tmp)
diff --git a/TODO/PensionTables_Austria_AVOe2008P.R b/TODO/PensionTables_Austria_AVOe2008P.R
new file mode 100644
index 0000000000000000000000000000000000000000..40ce73a2ce9d9ddb7882c1eb0b5a220ac82b8957
--- /dev/null
+++ b/TODO/PensionTables_Austria_AVOe2008P.R
@@ -0,0 +1,214 @@
+#' @import MortalityTables
+NULL
+
+stopifnot(require(methods), require(utils), require(MortalityTables)) # MortalityTable classes; new; Excel reader
+
+my.natrim <- function(v, ...) {
+    # Add a NA at the beginning and end, so the first and last entry of the rle
+    # call will always be for a NA => Use them to call head and tail accordingly:
+    vv = c(NA, v, NA);
+    r = rle(!is.na(vv));
+    tail(head(vv, -tail(r$lengths, 1)), -head(r$lengths, 1))
+}
+
+###############################################################################
+# AVÖ 2008P exact (Male, Female)
+###############################################################################
+
+
+#' Modification function to add certain loading or special effect ending at a given age.
+#'
+#' Example: In the AVÖ 2008-P table, ix has a biological, fixed component, and
+#' a surcharge that applies only during the last 7 years before the pension age
+#'
+#' @param effect The surcharge (numeric vector) to add. The last entry will
+#'               be aligned to apply to the given end age, all previous values
+#'               will apply to ages below.
+#' @param pensionAge The age to which to align the end of the effect
+#' @param ages The ages of the table (default: 0:100). Needed to properly
+#'                 align the effect.
+#' @export
+modArbeitsmarkteffekt = function(effect, pensionAge = 65, ages = 0:100) {
+    function(probs) {
+        # cut off the effect to a maximum of pensionAge+1 entries (starting at age 0):
+        effect = tail(effect, pensionAge + 1)
+
+        # properly pad with 0 to cover the full age range from 0 to max(ages)
+        surcharge = c(
+            rep(0, pensionAge + 1 - length(effect)),
+            effect,
+            rep(0, max(ages) - pensionAge)
+        );
+
+        # Use the proper ages as dimnames, so we can later subset with the
+        # required ages (not all tables start with age 0!)
+        names(surcharge) = 0:max(ages);
+
+        # Set all base probabilities above the pensionAge to 0:
+        probs[ages > pensionAge] = 0;
+
+        # Add the surcharge to the original probabilities
+        probs + surcharge[as.character(ages)]
+    }
+}
+
+if (FALSE) {
+    mA = modArbeitsmarkteffekt(effect = 0:7/8, pensionAge = 30, ages = 10:20*2)
+    mA(10:20*2)
+    mA = modArbeitsmarkteffekt(effect = 0:7/8, pensionAge = 30, ages = 20:40)
+    mA(20:40)
+}
+
+
+AVOe2008P.generate = function(file, name="P", collar = "Angestellte") {
+    table08 = function(name, data, agevar = "x", probvar, trendvar = NULL, dim = list(), ..., baseyear = 1982) {
+        if (is.null(trendvar)) {
+            mortalityTable.period(
+                name = name, ages = data[[agevar]], baseYear = baseyear,
+                deathProbs = data[[probvar]], ...,
+                data = list(dim = dim))
+        } else {
+            mortalityTable.trendProjection(
+                name = name, ages = data[[agevar]], baseYear = baseyear,
+                deathProbs = data[[probvar]],
+                trend = data[[trendvar]],
+                dampingFunction = function(x) max(x, 0),
+                data = list(dim = dim),
+                ...)
+        }
+    }
+    name08p = function(name, desc) {
+        paste("AVÖ 2008-", name, ", ", desc, sep = "")
+    }
+
+    data = utils::read.csv(
+        system.file("extdata", file, package = "MortalityTablesPrivate"),
+        skip = 4,
+        header = FALSE,
+        col.names = c(
+            "x",
+            "qaax", "qix", "qpx", "qgx", "qwy", "ix", "hx", "yx",
+            "SPACER",
+            "qaay", "qiy", "qpy", "qgy", "qwx", "iy", "hy", "xy",
+            "SPACER", "lambdax", "lambday",
+            "SPACER", "SPACER", "Arbeitsmarkt_M", "Arbeitsmarkt_F")
+        , colClasses = c(qpx = "numeric", qgx = "numeric", qpy = "numeric", qgy = "numeric")
+    );
+
+    male = pensionTable(
+        name = name08p(name, "Männer"),
+        baseYear = 1982,
+        qx =  table08(name08p(name, "qax, active males"), data, "x", "qaax", "lambdax",
+                      dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")),
+        # ix has a biological, fixed component, and a surcharge that depends
+        # on the pension age => use a modification
+        ix =  table08(
+            name08p(name, "ix, probability of invalidity"), data, "x", "ix",
+            modification = modArbeitsmarkteffekt(
+                my.natrim(data[["Arbeitsmarkt_M"]]),
+                pensionAge = 65,
+                ages = data[["x"]]
+                ),
+            dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Invalidisierung")),
+        qgx = table08(name08p(name, "qgx, total males"), data, "x", "qgx", "lambdax",
+                      dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")),
+        qix = table08(name08p(name, "qix, disabled males"), data, "x", "qix", "lambdax",
+                      dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")),
+        rx =  mortalityTable.zeroes(name = "No reactivation", ages = data[["x"]]),
+        apx = mortalityTable.onceAndFuture(transitionAge = 65 - 1, name = "Pensionsalter 65", ages = data[["x"]]),
+        qpx = table08(name08p(name, "qpx, retired males"), data, "x", "qpx", "lambdax",
+                      dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")),
+        hx =  table08(name08p(name, "hx, marriage probability"), data, "x", "hx",
+                      dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Partnerwahrscheinlichkeit im Tod")),
+        qwy = table08(name08p(name, "qwy, widows"), data, "x", "qwy", "lambday",
+                      dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")),
+        yx =  table08(name08p(name, "y(x), age of widow"), data, "x", "yx",
+                      dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "mittl. Hinterbliebenenalter")),
+        invalids.retire = FALSE,
+        data = list(
+            Geschlecht = "Männer",
+            Bestand = if (endsWith(name, "Arb./Ang.")) "Mischbestand" else "Angestellte",
+            Invalidisierung = "Invaliditätspension"
+        )
+    )
+
+    pensionAge = 65
+    female = pensionTable(
+        name = name08p(name, "Frauen"),
+        baseYear = 1982,
+        qx =  table08(name08p(name, "qay, active females"), data, "x", "qaay", "lambday",
+                      dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")),
+        # ix has a biological, fixed component, and a surcharge that depends
+        # on the pension age => use a modification
+        ix =  table08(
+            name08p(name, "iy, probability of invalidity"), data, "x", "iy",
+            modification = modArbeitsmarkteffekt(
+                my.natrim(data[["Arbeitsmarkt_F"]]),
+                pensionAge = pensionAge,
+                ages = data[["x"]]
+                ),
+            dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Invalidisierung")),
+        qgx = table08(name08p(name, "qgy, total females"), data, "x", "qgy", "lambday",
+                      dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")),
+        qix = table08(name08p(name, "qiy, disabled females"), data, "x", "qiy", "lambday",
+                      dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")),
+        rx =  mortalityTable.zeroes(name = "No reactivation", ages = data[["x"]]),
+        apx = mortalityTable.once(transitionAge = pensionAge - 1, name = "Pensionsalter 65", ages = data[["x"]]),
+        qpx = table08(name08p(name, "qpy, retired females"), data, "x", "qpy", "lambday",
+                      dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")),
+        hx =  table08(name08p(name, "hy, marriage probability"), data, "x", "hy",
+                      dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Partnerwahscheinlichkeit im Tod")),
+        qwy = table08(name08p(name, "qwx, widowers"), data, "x", "qwx", "lambdax",
+                      dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")),
+        yx =  table08(name08p(name, "x(y), age of widower"), data, "x", "xy",
+                      dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "mittl. Hinterbliebenenalter")),
+        invalids.retire = FALSE,
+        data = list(
+            Geschlecht = "Frauen",
+            Bestand = if (endsWith(name, "Arb./Ang.")) "Mischbestand" else "Angestellte",
+            Invalidisierung = "Invaliditätspension"
+        )
+    )
+
+    list(male = male, female = female)
+}
+
+AVOe2008P.tmp = AVOe2008P.generate("Austria_Pensions_AVOe2008P_Angestellte.csv", "P", collar = "Angestellte")
+AVOe2008P.male = AVOe2008P.tmp$male
+AVOe2008P.female = AVOe2008P.tmp$female
+
+AVOe2008P.tmp = AVOe2008P.generate("Austria_Pensions_AVOe2008P_ArbeiterAngestellte.csv", "P Arb./Ang.", collar = "Mischbestand")
+AVOe2008P.male.ArbAng = AVOe2008P.tmp$male
+AVOe2008P.female.ArbAng = AVOe2008P.tmp$female
+
+AVOe2008P.tmp = AVOe2008P.generate("Austria_Pensions_AVOe2008P_Angestellte.csv", "PK", collar = "Angestellte")
+AVOe2008P.male.PK = AVOe2008P.tmp$male
+AVOe2008P.female.PK = AVOe2008P.tmp$female
+
+AVOe2008P.tmp = AVOe2008P.generate("Austria_Pensions_AVOe2008P_ArbeiterAngestellte.csv", "PK Arb./Ang.", collar = "Mischbestand")
+AVOe2008P.male.ArbAng.PK = AVOe2008P.tmp$male
+AVOe2008P.female.ArbAng.PK = AVOe2008P.tmp$female
+
+
+############################################################################## #
+# Die Tafel als Array ----
+############################################################################## #
+
+AVOe2008P = array(
+    data = c(mortalityTable.NA),
+    dim = c(2, 2, 1, 2),
+    dimnames = list(Geschlecht = c("m", "w"), Bestand = c("Angestellte", "Mischbestand"), Invalidisierung = c("IP"), Typ = c("P", "PK"))
+)
+
+AVOe2008P[["m", "Angestellte", "IP", "P"]] = AVOe2008P.male
+AVOe2008P[["w", "Angestellte", "IP", "P"]] = AVOe2008P.female
+AVOe2008P[["m", "Mischbestand", "IP", "P"]] = AVOe2008P.male.ArbAng
+AVOe2008P[["w", "Mischbestand", "IP", "P"]] = AVOe2008P.female.ArbAng
+
+AVOe2008P[["m", "Angestellte", "IP", "PK"]] = AVOe2008P.male.PK
+AVOe2008P[["w", "Angestellte", "IP", "PK"]] = AVOe2008P.female.PK
+AVOe2008P[["m", "Mischbestand", "IP", "PK"]] = AVOe2008P.male.ArbAng.PK
+AVOe2008P[["w", "Mischbestand", "IP", "PK"]] = AVOe2008P.female.ArbAng.PK
+
+
+rm(AVOe2008P.generate, AVOe2008P.tmp)
diff --git a/TODO/PensionTables_Austria_AVOe2018P.R b/TODO/PensionTables_Austria_AVOe2018P.R
new file mode 100644
index 0000000000000000000000000000000000000000..e6863511ad75bf9a4567f5248036204cac1c33d9
--- /dev/null
+++ b/TODO/PensionTables_Austria_AVOe2018P.R
@@ -0,0 +1,222 @@
+stopifnot(require(methods), require(utils), require(MortalityTables), require(dplyr), require(readxl)) # MortalityTable classes; new; Excel reader
+
+# TODO:
+#   - Save correction factor for ix (reactivation) inside the table
+#   - Provide functions to adjust table for given pension age (correction factor for ix)
+#   - Provide function to switch to qp at the pension age
+
+############################################################################### #
+# Pension Table AVÖ 2018-P                                                   ----
+############################################################################### #
+
+AVOe2018P = array(
+  data = c(mortalityTable.NA),
+  dim = c(3, 2, 2),
+  dimnames = list(Geschlecht = c("m", "w", "u"), Bestand = c("Angestellte", "Mischbestand"), Invalidisierung = c("IP", "IPRG"))
+)
+
+{
+  AVOe2018P.file.Ang = getOption("MortalityTables.AVOe2018PAng")
+  AVOe2018P.file.Misch = getOption("MortalityTables.AVOe2018PMisch")
+
+  if (is.null(AVOe2018P.file.Ang)) {
+    warning("The pension table AVOe2018P requires the Excel file 'AVOe2018P_Pensionstafeln_Angestellte.xlsx'. Please set the paths to it with options(\"MortalityTables.AVOe2018PAng\" = \"/path/to/AVOe2018P_Pensionstafeln_Angestellte.xlsx\"")
+  }
+  if (is.null(AVOe2018P.file.Misch)) {
+    warning("The pension table AVOe2018P requires the Excel file 'AVOe2018P_Pensionstafeln_Mischbestand.xlsx'. Please set the paths to it with options(\"MortalityTables.AVOe2018PMisch\" = \"/path/to/AVOe2018P_Pensionstafeln_Mischbestand.xlsx\"")
+  }
+
+  if (!is.null(AVOe2018P.file.Ang) && !is.null(AVOe2018P.file.Misch)) {
+
+
+
+    #------------------------------------------------------------------------------- -
+    # Functions to load the tables (raw base tables and trend) and the additional info ----
+    #------------------------------------------------------------------------------- -
+
+    AVOe2018P.trend.damping.fun = function(baseYear = 2008, eta = 1/200, zeta = 0) function(t){
+      # 1/eta * atan(((t + baseYear) - 2016) * eta)
+      1/eta * atan((t - zeta) * eta)
+    }
+    # AVOe2018P.trend.damping = AVOe2018P.trend.damping.fun()
+    AVOe2018P.trend.damping = function(t) t
+
+
+
+    loadAVOe2018P.data = function(file, sex = "M", collar = "Angestellte", IPtype = "IP") {
+      if (!sex %in% c("M", "F", "U")) {
+        warning("Invalid sex given in call to loadAVOe2018P.table: ", sex, "; Allowed values are M, F and U.")
+        return
+      }
+      if (!collar %in% c("Angestellte", "Mischbestand")) {
+        warning("Invalid collar given in call to loadAVOe2018P.table: ", collar, "; Allowed values are Angestellte and Mischbestand.")
+        return
+      }
+      if (!IPtype %in% c("IP", "IPRG")) {
+        warning("Invalid type given in call to loadAVOe2018P.table: ", IPtype, "; Allowed values are IP and IPRG.")
+        return
+      }
+
+      sheet = recode(sex, "M" = "Männer", "F" = "Frauen", "U" = "Unisex")
+      if (IPtype == "IPRG") {
+        sheet = paste(sheet, "RG")
+      }
+      basedata = read_excel(
+          file, sheet = sheet, skip = 2, n_max = 1, #col_names = FALSE,
+          col_types = c("skip", "text", "skip", "skip", "text", "skip", "skip", "text", "skip", "skip", "numeric", "skip", "skip", "numeric"),
+          col_names = c("sex", "collar", "IPtype", "baseyear", "trend")
+          )
+
+      baseYear = basedata$baseyear
+      trendReduction = basedata$trend
+      dataSex = basedata$sex
+      dataCollar = basedata$collar
+      dataIP = basedata$IPtype
+
+      data = read_excel(
+        file, sheet = sheet, skip = 5,
+        col_names = c("Alter", "qa", "lambda.a", "qi", "lambda.i", "qg", "lambda.g", "qp", "lambda.p", "qw", "lambda.w", "ix", "hx", "yx")
+      )
+      # data = utils::read.csv(
+      #   system.file("extdata", filename, package = "PensionTablesAVOe2018P"),
+      #   skip = 4,
+      #   encoding = "UTF-8",
+      #   header = TRUE, check.names = FALSE,
+      # )
+
+
+      table18p = function(name, data, agevar = "x", probvar, trendvar = NULL, dim = list(), ..., baseYear = 2008, projectionFunction = projection.Heubeck05) {
+        tbl = mortalityTable.period(
+          name = name, ages = data[[agevar]], baseYear = baseYear,
+          deathProbs = data[[probvar]],
+          ...,
+          data = list(dim = dim)
+        )
+        if (!is.null(trendvar)) {
+          tbl = tbl %>%
+            mT.addTrend(trend = data[[trendvar]], dampingFunction = AVOe2018P.trend.damping.fun(baseYear = baseYear, eta = trendReduction))
+        }
+        tbl
+      }
+      name18p = function(prob = "", sex = "m", collar = "Angestellte", IPtype = NULL) {
+        if (!is.null(IPtype)) {
+          IPtype = paste0(" (", IPtype, ")")
+        } else {
+          IPtype = ""
+        }
+        sprintf("AVÖ 2018-P %s%s %s %s",
+                recode(prob,
+                       "qx"   = "Aktivensterblichkeit",
+                       "qix"  = "Invalidensterblichkeit",
+                       "ix"   = "Invalidisierung",
+                       "qpx"  = "Pensionistensterblichkeit",
+                       "qgx"  = "Gesamtsterblichkeit",
+                       "hx"   = "Partnerwahrscheinlichkeit im Tod",
+                       "yx"   = "mittl. Hinterbliebenenalter",
+                       "qwy"  = "Witwensterblichkeit",
+                       "qwx"  = "Witwersterblichkeit",
+                       "lambda"    = "Sterblichkeitstrend",
+                       "lambda.wx" = "Sterblichkeitstrend Witwer",
+                       "lambda.wy" = "Sterblichkeitstrend Witwen"
+                ),
+                IPtype,
+                recode(sex, "m" = "Männer", "w" = "Frauen", "u" = "Unisex",
+                       "M" = "Männer", "F" = "Frauen", "U" = "Unisex"),
+                recode(collar, "Angestellte" = "Ang.", "Mischbestand" = "Mischb.", "Arbeiter" = "Arb.")
+        )
+      }
+
+
+      defaultDims = list(
+        table = "AVÖ 2018-P",
+        type = "Pensionstafel Österreich",
+        data = "official",
+        year = "2018",
+        sex = sex,
+        collar = collar,
+        IPtype = IPtype
+      )
+
+      pensionTable(
+        name = name18p("Pensionstafel", collar = collar, sex = sex, IPtype = IPtype),
+        baseYear = baseYear,
+        qx = table18p(
+          name18p("qx", sex, collar, IPtype),
+          data, "Alter", "qa", "lambda.a",
+          dim = c(defaultDims, list(
+            probability = "qx",
+            risk = "Tod"
+          ))),
+        ix = table18p(
+          name18p("ix", sex, collar, IPtype),
+          data, "Alter", "ix", NULL,
+          dim = c(defaultDims, list(
+            probability = "ix",
+            risk = "Invalidisierung"
+          ))),
+        qgx = table18p(
+          name18p("qgx", sex, collar, IPtype),
+          data, "Alter", "qg", "lambda.g",
+          dim = c(defaultDims, list(
+            probability = "qgx",
+            risk = "Tod"
+          ))),
+        qix = table18p(
+          name18p("qix", sex, collar, IPtype),
+          data, "Alter", "qi", "lambda.i",
+          dim = c(defaultDims, list(
+            probability = "qix",
+            risk = "Tod"
+          ))),
+        rx =  mortalityTable.zeroes(name = "No reactivation", ages = data$Alter),
+        apx = mortalityTable.onceAndFuture(transitionAge = 65 - 1, name = "Pensionsalter 65", ages = data$Alter),
+        qpx = table18p(
+          name18p("qpx", sex, collar, IPtype),
+          data, "Alter", "qp", "lambda.p",
+          dim = c(defaultDims, list(
+            probability = "qpx",
+            risk = "Tod"
+          ))),
+        hx = table18p(
+          name18p("hx", sex, collar, IPtype),
+          data, "Alter", "hx", NULL,
+          dim = c(defaultDims, list(
+            probability = "hx",
+            risk = "Partnerwahrscheinlichkeit im Tod"
+          ))),
+        qwy = table18p(
+          name18p("qwy", sex, collar, IPtype),
+          data, "Alter", "qw", "lambda.w",
+          dim = c(defaultDims, list(
+            probability = "qwy",
+            risk = "Tod"
+          ))),
+        yx = table18p(
+          name18p("yx", sex, collar, IPtype),
+          data, "Alter", "yx", NULL,
+          dim = c(defaultDims, list(
+            probability = "yx",
+            risk = "mittl. Hinterbliebenenalter"
+          ))),
+
+        invalids.retire = FALSE,
+        data = list(
+          Geschlecht = sex,
+          Bestand = collar,
+          Invalidisierung = IPtype
+        )
+      )
+    }
+
+
+    for (sex in dimnames(AVOe2018P)$Geschlecht) {
+      for (collar in dimnames(AVOe2018P)$Bestand) {
+        for (IPtype in dimnames(AVOe2018P)$Invalidisierung) {
+          fl = if(collar == "Mischbestand") AVOe2018P.file.Misch else AVOe2018P.file.Ang
+          AVOe2018P[[sex, collar, IPtype]] = loadAVOe2018P.data(file = fl, sex = recode(sex, "m" = "M", "w" = "F", "u" = "U"), collar = collar, IPtype = IPtype)
+        }
+      }
+    }
+
+  }
+}
diff --git a/TODO/PensionTables_Austria_EttlPagler.R b/TODO/PensionTables_Austria_EttlPagler.R
new file mode 100644
index 0000000000000000000000000000000000000000..1a4a0fcc256afd545767ecea24e6fe7cd898744d
--- /dev/null
+++ b/TODO/PensionTables_Austria_EttlPagler.R
@@ -0,0 +1,193 @@
+#' @import MortalityTables
+NULL
+
+stopifnot(require(methods), require(utils), require(MortalityTables)) # MortalityTable classes; new; Excel reader
+
+
+###############################################################################
+# Ettl/Pagler Male
+###############################################################################
+
+EttlPagler.data.M = utils::read.csv(
+    system.file(
+        "extdata",
+        "Austria_Pensions_EttlPagler_M.csv",
+        package = "MortalityTablesPrivate"),
+    skip = 5,
+    header = FALSE,
+    col.names = c("age", "qaax", "ix", "qix", "qgx", "qpx", "qwy", "hx", "yx", "x1")
+);
+EttlPaglerAges = EttlPagler.data.M[["age"]];
+
+EttlPagler.male = pensionTable(
+    name = "Ettl/Pagler 1989, Männer",
+    baseYear = 1989,
+    qx    = mortalityTable.period(
+        name = "Ettl/Pagler, qx",
+        ages = EttlPaglerAges,
+        deathProbs = EttlPagler.data.M[["qaax"]],
+        data = list(
+            dim = list(sex = "m", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod")
+        )
+    ),
+    ix    = mortalityTable.period(
+        name = "Ettl/Pagler, ix",
+        ages = EttlPaglerAges,
+        deathProbs = EttlPagler.data.M[["ix"]],
+        data = list(
+            dim = list(sex = "m", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Invalidisierung")
+        )
+    ),
+    qgx   = mortalityTable.period(
+        name = "Ettl/Pagler, qgx",
+        ages = EttlPaglerAges,
+        deathProbs = EttlPagler.data.M[["qgx"]],
+        data = list(
+            dim = list(sex = "m", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod")
+        )
+    ),
+    qix   = mortalityTable.period(
+        name = "Ettl/Pagler, qix",
+        ages = EttlPaglerAges,
+        deathProbs = EttlPagler.data.M[["qix"]],
+        data = list(
+            dim = list(sex = "m", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod")
+        )
+    ),
+    rx    = mortalityTable.zeroes(name = "No reactivation", ages = EttlPaglerAges),
+    apx   = mortalityTable.once(transitionAge = 65, name = "Pensionsalter 65", ages = EttlPaglerAges),
+    qpx = mortalityTable.period(
+        name = "Ettl/Pagler, qpx",
+        ages = EttlPaglerAges,
+        deathProbs = EttlPagler.data.M[["qpx"]],
+        data = list(
+            dim = list(sex = "m", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod")
+        )
+    ),
+    hx    = mortalityTable.period(
+        name = "Ettl/Pagler, hx",
+        ages = EttlPaglerAges,
+        deathProbs = EttlPagler.data.M[["hx"]],
+        data = list(
+            dim = list(sex = "m", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Partnerwahrscheinlichkeit im Tod")
+        )
+    ),
+    qwy   = mortalityTable.period(
+        name = "Ettl/Pagler, qwy",
+        ages = EttlPaglerAges,
+        deathProbs = EttlPagler.data.M[["qwy"]],
+        data = list(
+            dim = list(sex = "m", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod")
+        )
+    ),
+    yx    = mortalityTable.period(
+        name = "Ettl/Pagler, y(x)",
+        ages = EttlPaglerAges,
+        deathProbs = EttlPagler.data.M[["yx"]],
+        data = list(
+            dim = list(sex = "m", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Mittl. Hinterbliebenenalter")
+        )
+    ),
+    invalids.retire = TRUE,
+    data = list(
+        Geschlecht = "Männer",
+        Bestand = "Angestellte",
+        Invalidisierung = "Invaliditätspension"
+    )
+)
+
+###############################################################################
+# Ettl/Pagler Female
+###############################################################################
+
+EttlPagler.data.F = utils::read.csv(
+    system.file(
+        "extdata",
+        "Austria_Pensions_EttlPagler_F.csv",
+        package = "MortalityTablesPrivate"),
+    skip = 5,
+    header = FALSE,
+    col.names = c("age", "qaay", "iy", "qiy", "qgy", "qpy", "qwx", "hy", "xy", "y1")
+);
+EttlPaglerAges = EttlPagler.data.F[["age"]];
+
+EttlPagler.female = pensionTable(
+    name = "Ettl/Pagler 1989, Frauen",
+    baseYear = 1989,
+    qx    = mortalityTable.period(
+        name = "Ettl/Pagler, qy",
+        ages = EttlPaglerAges,
+        deathProbs = EttlPagler.data.F[["qaay"]],
+        data = list(
+            dim = list(sex = "w", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod")
+        )
+    ),
+    ix    = mortalityTable.period(
+        name = "Ettl/Pagler, iy",
+        ages = EttlPaglerAges,
+        deathProbs = EttlPagler.data.F[["iy"]],
+        data = list(
+            dim = list(sex = "w", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Invalidisierung")
+        )
+    ),
+    qgx   = mortalityTable.period(
+        name = "Ettl/Pagler, qgy",
+        ages = EttlPaglerAges,
+        deathProbs = EttlPagler.data.F[["qgy"]],
+        data = list(
+            dim = list(sex = "w", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod")
+        )
+    ),
+    qix   = mortalityTable.period(
+        name = "Ettl/Pagler, qiy",
+        ages = EttlPaglerAges,
+        deathProbs = EttlPagler.data.F[["qiy"]],
+        data = list(
+            dim = list(sex = "w", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod")
+        )
+    ),
+    rx    = mortalityTable.zeroes(name = "No reactivation", ages = EttlPaglerAges),
+    apx   = mortalityTable.once(transitionAge = 65, name = "Pensionsalter 60", ages = EttlPaglerAges),
+    qpx = mortalityTable.period(
+        name = "Ettl/Pagler, qpy",
+        ages = EttlPaglerAges,
+        deathProbs = EttlPagler.data.F[["qpy"]],
+        data = list(
+            dim = list(sex = "w", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod")
+        )
+    ),
+    hx    = mortalityTable.period(
+        name = "Ettl/Pagler, hy",
+        ages = EttlPaglerAges,
+        deathProbs = EttlPagler.data.F[["hy"]],
+        data = list(
+            dim = list(sex = "w", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Partnerwahrscheinlichkeit im Tod")
+        )
+    ),
+    qwy   = mortalityTable.period(
+        name = "Ettl/Pagler, qwx",
+        ages = EttlPaglerAges,
+        deathProbs = EttlPagler.data.F[["qwx"]],
+        data = list(
+            dim = list(sex = "w", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod")
+        )
+    ),
+    yx    = mortalityTable.period(
+        name = "Ettl/Pagler, x(y)",
+        ages = EttlPaglerAges,
+        deathProbs = EttlPagler.data.F[["xy"]],
+        data = list(
+            dim = list(sex = "w", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod")
+        )
+    ),
+    invalids.retire = TRUE,
+    data = list(
+        Geschlecht = "Männer",
+        Bestand = "Angestellte",
+        Invalidisierung = "Invaliditätspension"
+    )
+)
+
+
+
+rm(EttlPagler.data.F, EttlPagler.data.M, EttlPaglerAges)
diff --git a/TODO/PensionTables_Germany_DAV2005G.R b/TODO/PensionTables_Germany_DAV2005G.R
new file mode 100644
index 0000000000000000000000000000000000000000..28a2bdf6ea9e46b41a12780e90702572ef1a4e3b
--- /dev/null
+++ b/TODO/PensionTables_Germany_DAV2005G.R
@@ -0,0 +1,309 @@
+#' @import MortalityTables
+NULL
+
+stopifnot(require(methods), require(utils), require(MortalityTables)) # MortalityTable classes; new; Excel reader
+
+############################################################################### #
+# Heubeck Table DAV 2005-G (Male, Female) ----
+############################################################################### #
+
+
+#---------------------------------------------------------------------------------------------- -
+# Functions and classes to handle Heubeck's projection scales for individual probabilities ----
+#---------------------------------------------------------------------------------------------- -
+projection.Heubeck05 = function(object, projectionPeriod = 0) {
+  ages = ages(object)
+
+  # First 10 years use the short-term trend factor, for all other years the long-term trend factor is used
+  # Projection in the past works similar
+  shortTrendExponent = sign(projectionPeriod) * pmin(abs(projectionPeriod), 10)
+  longTrendExponent = sign(projectionPeriod) * pmax(abs(projectionPeriod) - 10, 0)
+
+  ((1 - object@trend)^(shortTrendExponent)) * ((1 - object@trend2)^(longTrendExponent))
+}
+
+
+projection.Heubeck05.qi = function(object, projectionPeriod = 0) {
+  ages = ages(object)
+
+  # First 10 years use the short-term trend factor, for all other years the long-term trend factor is used
+  # Projection in the past works similar
+  shortTrendExponent = sign(projectionPeriod) * pmin(abs(projectionPeriod), 10)
+  longTrendExponent = sign(projectionPeriod) * pmax(abs(projectionPeriod) - 10, 0)
+
+  cx = ((1 - object@trend)^(shortTrendExponent)) * ((1 - object@trend2)^(longTrendExponent))
+
+  # Trend applies only fully to ages above 65, not up to 55, and linearly between
+  (ages <= 55)*1 +
+    (55 < ages & ages <= 65) * ((65 - ages) + (10 - (65 - ages)) * cx) / 10 +
+    (ages > 65) * cx
+}
+
+mortalityTable.heubeck05 = setClass(
+  "mortalityTable.heubeck05",
+  slots = list(projectionFunction = "function"),
+  prototype = list(projectionFunction = projection.Heubeck05),
+  contains = "mortalityTable.trendProjection"
+)
+
+setMethod("periodDeathProbabilities", "mortalityTable.heubeck05",
+          function(object,  ..., ages = NULL, Period = 2018) {
+            qx = object@deathProbs * (1 + object@loading);
+            factors = object@projectionFunction(object, Period - object@baseYear)
+            finalqx = qx * factors
+
+            fillAges(
+              object@modification(finalqx),
+              givenAges = ages(object),
+              neededAges = ages)
+          })
+
+
+setMethod("deathProbabilities", "mortalityTable.heubeck05",
+          function(object,  ..., ages = NULL, YOB = 1975) {
+
+            # browser()
+            qx = object@deathProbs * (1 + object@loading);
+            givenAges = object@ages;
+            factors = object@projectionFunction(object, YOB + givenAges - object@baseYear)
+            finalqx = qx * factors
+
+            fillAges(
+              object@modification(finalqx),
+              givenAges = ages(object),
+              neededAges = ages)
+          })
+
+
+
+#---------------------------------------------------------------------------------------------- -
+# Functions and classes to handle Heubeck's table at pensionTable-level                    ----
+#---------------------------------------------------------------------------------------------- -
+
+pensionTableProbArrange.Heubeck05 = function(x, q, i, qi, r, ap, api, qp, h, qw, yx, qg, as.data.frame = TRUE, table, ...) {
+  # 1) Die obigen Ausscheidewahrscheinlichkeiten sind unabhänge Wahrscheinlichkeiten => Umrechnung auf abhängige
+  i.stern = i
+  q.stern = q
+  i = i.stern * (1 - 1/2 * q.stern)
+  q = q.stern * (1 - 1/2 * i.stern)
+
+
+  # 2) Herleitung der Gesamtsterblickeit aus den anderen Wahrscheinlichkeiten
+  #       -) Ausscheideordnungen:
+  la = head(Reduce('*', (1 - q - i), init = 100000, accumulate = TRUE), -1)
+  lg = la
+  for (idx in seq_along(lg)) {
+    qg[idx] = qi[idx] - la[idx]/lg[idx] * (qi[idx] - q[idx] - i[idx] * 1/2 * qi[idx] / (1 - 1/2*qi[idx]))
+    lg[idx + 1] = lg[idx] * (1 - qg[idx])
+  }
+  lg = head(lg, -1)
+
+
+  #       -) qg daraus bestimmen:
+  qg = qi - la/lg * (qi - q - i * 1/2 * qi/(1 - 1/2*qi))
+
+
+  # 3) Alterspensionistensterblichkeit ist qg bis Alter 73, danach normal extrapoliert
+  qp[x < 74] = qg[x < 74]
+
+
+  # TODO: Witwensterblichkeiten stimmen noch nicht!!!
+
+  if (as.data.frame) {
+    data.frame(x, q, i, qi, r, ap, api, qp, h, qw, yx, qg)
+  } else {
+    states = c("a", "i", "p", "d")
+    transProb = array(0, dim = c(length(states), length(states), length(x)), dimnames = list(states, states, x))
+
+    transProb["a", "a", ] = (1 - i - q) * (1 - ap);
+    transProb["a", "i", ] = i;
+    transProb["a", "p", ] = (1 - i - q) * ap;
+    transProb["a", "d", ] = q;
+
+    transProb["i", "a", ] = r;
+    transProb["i", "i", ] = (1 - qi - r) * (1 - api);
+    transProb["i", "p", ] = (1 - qi - r) * api;
+    transProb["i", "d", ] = qi;
+
+    transProb["p", "p", ] = 1 - qp;
+    transProb["p", "d", ] = qp;
+
+    transProb["d", "d", ] = 1;
+
+    list(transitionProbabilities = transProb, widows = data.frame(x, h, qw, yx))
+  }
+}
+
+pensionTable.Heubeck05 = setClass(
+  "pensionTable.Heubeck05",
+  slots = list(),
+  prototype = list(
+    probs.arrange = pensionTableProbArrange.Heubeck05
+  ),
+  contains = "pensionTable"
+)
+
+
+
+
+
+
+
+DAV2005G.generate = function(sex = "M") {
+  table05 = function(name, data, trenddata, agevar = "x", probvar, dim = list(), ..., baseyear = 2005, projectionFunction = projection.Heubeck05) {
+    if (is.null(trenddata)) {
+      mortalityTable.period(
+        name = name, ages = data[[agevar]], baseYear = baseyear,
+        deathProbs = data[[probvar]], ...,
+        data = list(dim = dim))
+    } else {
+      mortalityTable.heubeck05(
+        name = name, ages = data[[agevar]], baseYear = baseyear,
+        deathProbs = data[[probvar]],
+        trend = trenddata$fk,
+        trend2 = trenddata$fl,
+        # dampingFunction = function(x) max(x, 0),
+        data = list(dim = dim),
+        projectionFunction = projectionFunction,
+        ...)
+    }
+  }
+  name05 = function(desc) {
+    paste("DAV 2005-G, ", desc, sep = "")
+  }
+
+  basedata = utils::read.csv(
+    system.file("extdata", paste0("1_Basis2005", sex), package = "PensionTablesHeubeck05"),
+    # file.path("inst", "extdata", paste0("1_Basis2005", sex)),
+    skip = 4,
+    header = FALSE,
+    col.names = c("Alter", "qgp", "qi", "qa", "i", "h", "xy", "qw"),
+    dec = ",",
+    sep = ";"
+  )
+  loadTrendDAV05 = function(sex) {
+    utils::read.csv(
+      system.file("extdata", paste0("1_Trend", sex), package = "PensionTablesHeubeck05"),
+      # file.path("inst", "extdata", paste0("1_Trend", sex)),
+      skip = 4,
+      header = FALSE,
+      col.names = c("Alter", "fk", "fl"),
+      dec = ",",
+      sep = ";"
+    )
+  }
+  trenddata = loadTrendDAV05(sex)
+  trenddata.Widow = loadTrendDAV05(sex = if (sex == "M") "W" else "M")
+
+  # qa und ix in unabhängige Wahrscheinlichkeiten umrechnen
+  basedata$qa = with(
+    basedata,
+    1/2*(2 + qa - i) - sqrt(1/4 * (2 + qa - i)^2 - 2 * qa)
+  )
+  basedata$i = with(basedata, i / (1 - 1/2 * qa))
+
+  sex = tolower(sex)
+  sexName = if (sex == "m") "Männer" else "Frauen"
+  pensionTable.Heubeck05(
+    name = name05(paste0("Pensionstafel ", sexName)),
+    baseYear = 2005,
+    qx =  table05(name05("qax, active males"),
+                  basedata, trenddata,
+                  "Alter", "qa",
+                  dim = list(sex = sex,
+                             collar = "Mischbestand",
+                             type = "Pensionstafel Deutschland",
+                             data = "official",
+                             year = "DAV 2005-G",
+                             risk = "Tod")),
+    ix =  table05(name05("ix, probability of invalidity"),
+                  basedata, NULL,
+                  "Alter", "i",
+                  dim = list(sex = sex,
+                             collar = "Mischbestand",
+                             type = "Pensionstafel Deutschland",
+                             data = "official",
+                             year = "DAV 2005-G",
+                             risk = "Invalidisierung")),
+    qgx = table05(name05("qgx, total males"),
+                  basedata, trenddata,
+                  "Alter", "qgp",
+                  dim = list(sex = sex,
+                             collar = "Mischbestand",
+                             type = "Pensionstafel Deutschland",
+                             data = "official",
+                             year = "DAV 2005-G",
+                             risk = "Tod")),
+    qix = table05(name05("qix, disabled males"),
+                  basedata, trenddata,
+                  "Alter", "qi",
+                  projectionFunction = projection.Heubeck05.qi,
+                  dim = list(sex = sex,
+                             collar = "Mischbestand",
+                             type = "Pensionstafel Deutschland",
+                             data = "official",
+                             year = "DAV 2005-G",
+                             risk = "Tod")),
+    rx =  mortalityTable.zeroes(name = "No reactivation", ages = basedata$Alter),
+    apx = mortalityTable.onceAndFuture(transitionAge = 65 - 1, name = "Pensionsalter 65", ages = basedata$Alter),
+    qpx = table05(name05("qpx, retired males"),
+                  basedata, trenddata,
+                  "Alter", "qgp",
+                  dim = list(sex = sex,
+                             collar = "Mischbestand",
+                             type = "Pensionstafel Deutschland",
+                             data = "official",
+                             year = "DAV 2005-G",
+                             risk = "Tod")),
+    hx =  table05(name05("hx, marriage probability"),
+                  basedata, NULL,
+                  "Alter", "h",
+                  dim = list(sex = sex,
+                             collar = "Mischbestand",
+                             type = "Pensionstafel Deutschland",
+                             data = "official",
+                             year = "DAV 2005-G",
+                             risk = "Partnerwahrscheinlichkeit im Tod")),
+    qwy = table05(name05("qwy, widows"),
+                  basedata, trenddata.Widow,
+                  "Alter", "qw",
+                  dim = list(sex = sex,
+                             collar = "Mischbestand",
+                             type = "Pensionstafel Deutschland",
+                             data = "official",
+                             year = "DAV 2005-G",
+                             risk = "Tod")),
+    yx =  table05(name05("y(x), age of widow"),
+                  basedata, NULL,
+                  "Alter", "xy",
+                  dim = list(sex = sex,
+                             collar = "Mischbestand",
+                             type = "Pensionstafel Deutschland",
+                             data = "official",
+                             year = "DAV 2005-G",
+                             risk = "mittl. Hinterbliebenenalter")),
+    invalids.retire = FALSE,
+    data = list(
+      Geschlecht = sexName,
+      Bestand = "Mischbestand",
+      Invalidisierung = "Invaliditätspension"
+    )
+  )
+
+}
+
+DAV2005G.male = DAV2005G.generate("M")
+DAV2005G.female = DAV2005G.generate("W")
+DAV2005G = array(
+  data = c("m" = DAV2005G.male, "w" = DAV2005G.female),
+  dim = c(2,1),
+  dimnames = list("Geschlecht" = c("m", "w"), "Bestand" = c("Mischbestand"))
+)
+
+
+# probs = transitionProbabilities(DAV2005G.male, YOB = 1955)
+# # probs = transitionProbabilities(DAV2005G.female, YOB = 1955)
+#
+# View(round(probs,6))
+
+rm(DAV2005G.generate)
diff --git a/inst/extdata/PensionTables_USA_PensionPlan_RP2014.R b/TODO/PensionTables_USA_PensionPlan_RP2014.R
similarity index 100%
rename from inst/extdata/PensionTables_USA_PensionPlan_RP2014.R
rename to TODO/PensionTables_USA_PensionPlan_RP2014.R
diff --git a/inst/extdata/PensionTables_USA_PensionPlans.R b/TODO/PensionTables_USA_PensionPlans.R
similarity index 100%
rename from inst/extdata/PensionTables_USA_PensionPlans.R
rename to TODO/PensionTables_USA_PensionPlans.R
diff --git a/TODO/Privat/AVOe_2008_P.xls b/TODO/Privat/AVOe_2008_P.xls
new file mode 100644
index 0000000000000000000000000000000000000000..715adfa5a5ea554037c43e9011e8e262682dc6bc
Binary files /dev/null and b/TODO/Privat/AVOe_2008_P.xls differ
diff --git a/TODO/Privat/AVOe_2008_P_PK.xls b/TODO/Privat/AVOe_2008_P_PK.xls
new file mode 100644
index 0000000000000000000000000000000000000000..d530c038697c75e76d73fd7dc414825beb101b4a
Binary files /dev/null and b/TODO/Privat/AVOe_2008_P_PK.xls differ
diff --git "a/TODO/Privat/AV\303\2261999P_Tafel.xlsx" "b/TODO/Privat/AV\303\2261999P_Tafel.xlsx"
new file mode 100644
index 0000000000000000000000000000000000000000..61e3ef191f674bbdd706d323be0e81289a740b8e
Binary files /dev/null and "b/TODO/Privat/AV\303\2261999P_Tafel.xlsx" differ
diff --git a/TODO/Privat/EttlPagler.xlsx b/TODO/Privat/EttlPagler.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..b5a85759499e229ae9c446e50ac36a26329ae817
Binary files /dev/null and b/TODO/Privat/EttlPagler.xlsx differ
diff --git a/data-raw/USA_Annuities.xls b/TODO/USA_Annuities.xls
similarity index 100%
rename from data-raw/USA_Annuities.xls
rename to TODO/USA_Annuities.xls
diff --git a/inst/extdata/USA_Annuities_1971IAM.csv b/TODO/USA_Annuities_1971IAM.csv
similarity index 100%
rename from inst/extdata/USA_Annuities_1971IAM.csv
rename to TODO/USA_Annuities_1971IAM.csv
diff --git a/inst/extdata/USA_Annuities_1983a_GAM.csv b/TODO/USA_Annuities_1983a_GAM.csv
similarity index 100%
rename from inst/extdata/USA_Annuities_1983a_GAM.csv
rename to TODO/USA_Annuities_1983a_GAM.csv
diff --git a/inst/extdata/USA_Annuities_1994GAR.csv b/TODO/USA_Annuities_1994GAR.csv
similarity index 100%
rename from inst/extdata/USA_Annuities_1994GAR.csv
rename to TODO/USA_Annuities_1994GAR.csv
diff --git a/TODO/USA_Annuities_2000CM.xlsx b/TODO/USA_Annuities_2000CM.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..4d7d7742cb95bf55f0b34b36b2a51c8d0d7ef489
Binary files /dev/null and b/TODO/USA_Annuities_2000CM.xlsx differ
diff --git a/inst/extdata/USA_Annuities_2012IAM.csv b/TODO/USA_Annuities_2012IAM.csv
similarity index 100%
rename from inst/extdata/USA_Annuities_2012IAM.csv
rename to TODO/USA_Annuities_2012IAM.csv
diff --git a/inst/extdata/USA_Annuities_Annuity2000.csv b/TODO/USA_Annuities_Annuity2000.csv
similarity index 100%
rename from inst/extdata/USA_Annuities_Annuity2000.csv
rename to TODO/USA_Annuities_Annuity2000.csv
diff --git a/inst/extdata/USA_PensionPlans_MP2014_Female.csv b/TODO/USA_PensionPlans_MP2014_Female.csv
similarity index 100%
rename from inst/extdata/USA_PensionPlans_MP2014_Female.csv
rename to TODO/USA_PensionPlans_MP2014_Female.csv
diff --git a/inst/extdata/USA_PensionPlans_MP2014_Male.csv b/TODO/USA_PensionPlans_MP2014_Male.csv
similarity index 100%
rename from inst/extdata/USA_PensionPlans_MP2014_Male.csv
rename to TODO/USA_PensionPlans_MP2014_Male.csv
diff --git a/inst/extdata/USA_PensionPlans_RP2014.csv b/TODO/USA_PensionPlans_RP2014.csv
similarity index 100%
rename from inst/extdata/USA_PensionPlans_RP2014.csv
rename to TODO/USA_PensionPlans_RP2014.csv
diff --git a/data-raw/USA_RP2014_MP2014_PensionPlan.xlsx b/TODO/USA_RP2014_MP2014_PensionPlan.xlsx
similarity index 100%
rename from data-raw/USA_RP2014_MP2014_PensionPlan.xlsx
rename to TODO/USA_RP2014_MP2014_PensionPlan.xlsx