diff --git a/docs/blueprints/application/application_domain_model.txt b/docs/blueprints/application/application_domain_model.txt
index b27c87682e05104845dbc9ac7d4284d72f9b94e3..c6278860893027aaaf0026112e701c73a8cda850 100644
--- a/docs/blueprints/application/application_domain_model.txt
+++ b/docs/blueprints/application/application_domain_model.txt
@@ -1,4 +1,22 @@
 @startuml
+entity ApplicationDateReported {
+    id: Integer
+	date_reported:  String
+    year_week:  String
+    datum: Date
+    year: Integer
+    month: Integer
+    day_of_month: Integer
+    day_of_week: Integer
+    week_of_year: Integer
+	get_name_for_weekday()
+	{classifier} get_names_for_weekday()
+	{classifier} get_datum_parts(my_date_rep: String)
+	{classifier} get_datum(my_year: Integer, my_month: Integer, my_day: Integer)
+	{classifier} get_datum_as_str(my_year: Integer, my_month: Integer, my_day: Integer)
+	{classifier} my_year_week(my_iso_year: Integer, week_number: Integer)
+	{classifier} create_new_object_factory(my_date_rep: String)
+}
 entity Course {
     id: Integer
     dateiname: String
diff --git a/docs/blueprints/ecdc/ecdc_domain_model.txt b/docs/blueprints/ecdc/ecdc_domain_model.txt
index b27c87682e05104845dbc9ac7d4284d72f9b94e3..c6278860893027aaaf0026112e701c73a8cda850 100644
--- a/docs/blueprints/ecdc/ecdc_domain_model.txt
+++ b/docs/blueprints/ecdc/ecdc_domain_model.txt
@@ -1,4 +1,22 @@
 @startuml
+entity ApplicationDateReported {
+    id: Integer
+	date_reported:  String
+    year_week:  String
+    datum: Date
+    year: Integer
+    month: Integer
+    day_of_month: Integer
+    day_of_week: Integer
+    week_of_year: Integer
+	get_name_for_weekday()
+	{classifier} get_names_for_weekday()
+	{classifier} get_datum_parts(my_date_rep: String)
+	{classifier} get_datum(my_year: Integer, my_month: Integer, my_day: Integer)
+	{classifier} get_datum_as_str(my_year: Integer, my_month: Integer, my_day: Integer)
+	{classifier} my_year_week(my_iso_year: Integer, week_number: Integer)
+	{classifier} create_new_object_factory(my_date_rep: String)
+}
 entity Course {
     id: Integer
     dateiname: String
diff --git a/docs/blueprints/owid/owid_domain_model.txt b/docs/blueprints/owid/owid_domain_model.txt
index b27c87682e05104845dbc9ac7d4284d72f9b94e3..c99b945cce9b112fe0a396a4cb3d6101362a5376 100644
--- a/docs/blueprints/owid/owid_domain_model.txt
+++ b/docs/blueprints/owid/owid_domain_model.txt
@@ -1,26 +1,105 @@
 @startuml
-entity Course {
+entity OwidImport {
     id: Integer
-    dateiname: String
-    parent_dir: String
-    title: String
-    path_relative: String
-    get_absolute_path()
-    get_relative_path()
+	iso_code:  String
+    continent:  String
+    location:  String
+    date:  String
+    total_cases:  String
+    new_cases:  String
+    new_cases_smoothed:  String
+    total_deaths:  String
+    new_deaths:  String
+    new_deaths_smoothed:  String
+    total_cases_per_million:  String
+    new_cases_per_million:  String
+    new_cases_smoothed_per_million:  String
+    total_deaths_per_million:  String
+    new_deaths_per_million:  String
+    new_deaths_smoothed_per_million:  String
+    reproduction_rate:  String
+    icu_patients:  String
+    icu_patients_per_million:  String
+    hosp_patients:  String
+    hosp_patients_per_million:  String
+    weekly_icu_admissions:  String
+    weekly_icu_admissions_per_million:  String
+    weekly_hosp_admissions:  String
+    weekly_hosp_admissions_per_million:  String
+    new_tests:  String
+    total_tests:  String
+    total_tests_per_thousand:  String
+    new_tests_per_thousand:  String
+    new_tests_smoothed:  String
+    new_tests_smoothed_per_thousand:  String
+    positive_rate:  String
+    tests_per_case:  String
+    tests_units:  String
+    total_vaccinations:  String
+    people_vaccinated:  String
+    people_fully_vaccinated:  String
+    new_vaccinations:  String
+    new_vaccinations_smoothed:  String
+    total_vaccinations_per_hundred:  String
+    people_vaccinated_per_hundred:  String
+    people_fully_vaccinated_per_hundred:  String
+    new_vaccinations_smoothed_per_million:  String
+    stringency_index:  String
+    population:  String
+    population_density:  String
+    median_age:  String
+    aged_65_older:  String
+    aged_70_older:  String
+    gdp_per_capita:  String
+    extreme_poverty:  String
+    cardiovasc_death_rate:  String
+    diabetes_prevalence:  String
+    female_smokers:  String
+    male_smokers:  String
+    handwashing_facilities:  String
+    hospital_beds_per_thousand:  String
+    life_expectancy:  String
+    human_development_index:  String
     {classifier} remove_all()
     {classifier} get_all_as_page(page: Integer)
     {classifier} get_all()
-    {classifier} get_all_as_dict()
     {classifier} get_by_id(other_id: Integer)
     {classifier} find_by_id(other_id: Integer)
-    {classifier} get_kurse_all()
+    {classifier} get_dates()
+    {classifier} get_for_one_day(day: String)
+    {classifier} get_dates_reported_as_array()
+    {classifier} get_new_dates_reported_as_array()
+    {classifier} get_continents(page: Integer)
+    {classifier} get_all_continents()
 }
-entity Workflow {
+entity ApplicationDateReported {
     id: Integer
-    dateiname: String
-    parent_dir: String
-    get_absolute_path()
-    get_relative_path()
+	date_reported:  String
+    year_week:  String
+    datum: Date
+    year: Integer
+    month: Integer
+    day_of_month: Integer
+    day_of_week: Integer
+    week_of_year: Integer
+	get_name_for_weekday()
+	{classifier} get_names_for_weekday()
+	{classifier} get_datum_parts(my_date_rep: String)
+	{classifier} get_datum(my_year: Integer, my_month: Integer, my_day: Integer)
+	{classifier} get_datum_as_str(my_year: Integer, my_month: Integer, my_day: Integer)
+	{classifier} my_year_week(my_iso_year: Integer, week_number: Integer)
+	{classifier} create_new_object_factory(my_date_rep: String)
+}
+entity OwidDateReported {
+    id: Integer
+	date_reported:  String
+    year_week:  String
+    datum: Date
+    year: Integer
+    month: Integer
+    day_of_month: Integer
+    day_of_week: Integer
+    week_of_year: Integer
     {classifier} remove_all()
     {classifier} get_all_as_page(page: Integer)
     {classifier} get_all()
@@ -29,13 +108,68 @@ entity Workflow {
     {classifier} find_by_id(other_id: Integer)
     {classifier} get_workflow_for_id(workflow_id: Integer)
 }
-entity Lektion {
+entity OwidData {
     id: Integer
-    dateiname: String
-    parent_dir: String
-    title: String
-    lektion_nr: Integer
-    verified: Boolean
+    id: Integer
+	iso_code:  String
+    continent:  String
+    location:  String
+    date:  String
+    total_cases:  String
+    new_cases:  String
+    new_cases_smoothed:  String
+    total_deaths:  String
+    new_deaths:  String
+    new_deaths_smoothed:  String
+    total_cases_per_million:  String
+    new_cases_per_million:  String
+    new_cases_smoothed_per_million:  String
+    total_deaths_per_million:  String
+    new_deaths_per_million:  String
+    new_deaths_smoothed_per_million:  String
+    reproduction_rate:  String
+    icu_patients:  String
+    icu_patients_per_million:  String
+    hosp_patients:  String
+    hosp_patients_per_million:  String
+    weekly_icu_admissions:  String
+    weekly_icu_admissions_per_million:  String
+    weekly_hosp_admissions:  String
+    weekly_hosp_admissions_per_million:  String
+    new_tests:  String
+    total_tests:  String
+    total_tests_per_thousand:  String
+    new_tests_per_thousand:  String
+    new_tests_smoothed:  String
+    new_tests_smoothed_per_thousand:  String
+    positive_rate:  String
+    tests_per_case:  String
+    tests_units:  String
+    total_vaccinations:  String
+    people_vaccinated:  String
+    people_fully_vaccinated:  String
+    new_vaccinations:  String
+    new_vaccinations_smoothed:  String
+    total_vaccinations_per_hundred:  String
+    people_vaccinated_per_hundred:  String
+    people_fully_vaccinated_per_hundred:  String
+    new_vaccinations_smoothed_per_million:  String
+    stringency_index:  String
+    population:  String
+    population_density:  String
+    median_age:  String
+    aged_65_older:  String
+    aged_70_older:  String
+    gdp_per_capita:  String
+    extreme_poverty:  String
+    cardiovasc_death_rate:  String
+    diabetes_prevalence:  String
+    female_smokers:  String
+    male_smokers:  String
+    handwashing_facilities:  String
+    hospital_beds_per_thousand:  String
+    life_expectancy:  String
+    human_development_index:  String
     get_absolute_path()
     get_relative_path()
     {classifier} remove_all()
@@ -49,102 +183,109 @@ entity Lektion {
     {classifier} get_folien_for_lektion_id(lektion_id: Integer)
     {classifier} get_all_verified()
 }
-entity FolienSatz {
-    id: Integer
-    dateiname: String
-    parent_dir: String
-    title: String
-    lektion_nr: Integer
-    foliensatz_nr_in_lektion: Integer
-    get_absolute_path()
-    get_relative_path()
-    {classifier} get_foliensaetze_for_lektion(lektion: Lektion)
-    {classifier} remove_all()
-    {classifier} get_all_as_page(page: Integer)
-    {classifier} get_all()
-    {classifier} get_all_as_dict()
-    {classifier} get_by_id(other_id: Integer)
-    {classifier} find_by_id(other_id: Integer)
+OwidData "1" *--> "*" OwidDateReported: date_reported
+ApplicationDateReported <|-- OwidDateReported
+class OwidServiceImport {
+	import_file()
 }
-entity Folie {
-    id: Integer
-    title: String
-    lektion_nr: Integer
-    folien_nr_in_lektion: Integer
-    folien_nr_in_foliensatz: Integer
-    foliensatz_nr_in_lektion: Integer
-    {classifier} get_folien_for_foliensatz(lektion: FolienSatz)
-    {classifier} getFolienKey(lektion_nr: Integer, folien_nr_in_lektion: Integer)
-    {classifier} remove_all()
-    {classifier} get_all_as_page(page: Integer)
-    {classifier} get_all()
-    {classifier} get_all_as_dict()
-    {classifier} get_by_id(other_id: Integer)
-    {classifier} find_by_id(other_id: Integer)
-    {classifier} get_folien_for_lektion(lektion: Lektion)
+class OwidServiceUpdate {
+	update_dimension_tables_only()
+	update_fact_table_incremental_only()
+	update_fact_table_initial_only()
+	update_star_schema_incremental()
+	update_star_schema_initial()
+	-update_dimension_tables()
+	-update_fact_table_initial()
+	-update_fact_table_incremental()
+	-update_date_reported()
 }
-entity Abbildung {
-    id: Integer
-    dateiname: String
-    parent_dir: String
-    title: String
-    abbildung_nr_in_lektion: Integer
-    abbildung_nr_in_foliensatz: Integer
-    folien_nr_in_lektion: Integer
-    folien_nr_in_foliensatz: Integer
-    folien_satz_nr: Integer
-    lektion_nr: Integer
-    bildnachweis: Integer
-    get_absolute_path()
-    get_relative_path()
-    {classifier} remove_all()
-    {classifier} get_all_as_page(page: Integer)
-    {classifier} get_all()
-    {classifier} get_all_as_dict()
-    {classifier} get_by_id(other_id: Integer)
-    {classifier} find_by_id(other_id: Integer)
+class OwidService {
+    pretask_database_drop_create()
+    task_database_drop_create()
+    run_download_only()
+    run_import_only()
+    run_update_dimension_tables_only()
+    run_update_fact_table_incremental_only()
+    run_update_fact_table_initial_only()
+    run_update_star_schema_incremental()
+    run_update_star_schema_initial()
+    download_all_files()
+    task_import_all_files()
+    update_dimension_tables_only()
+    update_fact_table_initial_only()
+    update_fact_table_incremental_only()
+}
+class ApplicationServiceDownload {
+	-log_error()
+	-log_success()
+	-prepare_download()
+	-download_with_wget()
+	-download_with_subprocess_and_os_native_wget()
+	download_file()
+}
+class ApplicationServiceConfig {
+	limit_nr: Integer
+    data_path: String
+    slug: String
+    category: String
+    sub_category: String
+    tablename: String
+    cvsfile_name: String
+    url_src: String
+    cvsfile_path: String
+    msg_job: String
+    msg_ok: String
+    msg_error: String
+	create_config_for_who()
+	create_config_for_rki_vaccination()
+	create_config_for_owid()
+	create_config_for_ecdc()
+	create_config_for_rki_bundeslaender()
+	create_config_for_rki_landkreise()
+}
+ApplicationServiceConfig : SQLAlchemy database
+ApplicationServiceDownload : ApplicationServiceConfig cfg
+ApplicationServiceDownload : SQLAlchemy database
+OwidServiceUpdate : ApplicationServiceConfig cfg
+OwidServiceUpdate : SQLAlchemy database
+OwidServiceImport : ApplicationServiceConfig cfg
+OwidServiceImport : SQLAlchemy database
+OwidService : ApplicationServiceConfig cfg
+OwidService : SQLAlchemy database
+OwidService : OwidServiceUpdate service_update
+OwidService : OwidServiceImport service_import
+OwidService : ApplicationServiceDownload service_download
+class owid_views_frontend {
+    url_owid_info()
+    url_owid_tasks()
+    url_owid_test()
+    url_owid_imported()
+    url_owid_date_reported_all()
+    url_owid_date_reported()
+    url_owid_date_reported_cases_new()
+    url_owid_date_reported_cases_cumulative()
+    url_owid_date_reported_deaths_new()
+    url_owid_date_reported_deaths_cumulative()
 }
-Course "1" *--> "*" Workflow: workflows
-Workflow "*" --> "1" Course:  course
-Workflow "1" *--> "*" Lektion: lektionen
-Lektion "*" --> "1" Workflow: course_workflow
-Lektion "1" o--> "*" Abbildung: abbildungen
-Abbildung "*" --> "1" Lektion: lektion
-Lektion "1" *--> "*" FolienSatz: foliensaetze
-FolienSatz "*" --> "1" Lektion: lektion
-FolienSatz "1" *--> "*" Folie: folien
-FolienSatz "1" *--> "*" Abbildung: abbildungen
-Folie "*" --> "1" FolienSatz: foliensatz
-Folie "1" o--> "*" Abbildung: abbildungen
-Abbildung "*" --> "1" Folie: folie
-Abbildung "*" --> "1" FolienSatz: foliensatz
-class ArtefactContentService {
-    rename_src_files()
-    prepare_data_update()
-    run_data_update()
-    run_db_dump()
-    run_db_reimport()
-    parse_file_name(datei: String)
-    create_or_fetch_folie(file_name_dict, lektion: Lektion)
-    get_abbbildung_for_id(abbbildung_id: Integer)
+class owid_views_tasks {
+    url_task_owid_download_only()
+    url_task_owid_import_only()
+    url_task_owid_update_dimension_tables_only()
+    url_task_owid_update_fact_table_incremental_only()
+    url_task_owid_update_fact_table_initial_only()
+    url_task_owid_update_star_schema_initial()
+    url_task_owid_update_star_schema_incremental()
 }
-ArtefactContentService : SQLAlchemy database
-ArtefactContentService : String[] courses
-ArtefactContentService : String[] workflows
-ArtefactContentService : String[] lektionen
-ArtefactContentService : String[] course_names
-class artefact_content_views {
-    url_root()
-    url_home()
-    url_update_data()
-    url_rename()
-    url_kurse_all()
-    url_kurse_workflow_lektionen(workflow_id: Integer)
-    url_kurse_workflow_lektion_folien(lektion_id: Integer)
-    url_abbbildung_id(abbildung_id: Integer)
-    url_db_dump()
-    url_db_reimport()
-    task_data_update()
-    task_rename_src_files()
+class owid_celery_tasks {
+    task_owid_download_only()
+    task_owid_import_only()
+    task_owid_update_dimension_tables_only()
+    task_owid_update_fact_table_incremental_only()
+    task_owid_update_fact_table_initial_only()
+    task_owid_update_star_schema_incremental()
+    task_owid_update_star_schema_initial()
 }
+owid_views_frontend : OwidService owid_service
+owid_views_tasks : OwidService owid_service
+owid_celery_tasks : OwidService owid_service
 @enduml
diff --git a/docs/blueprints/rki_vaccination/rki_vaccination_domain_model.txt b/docs/blueprints/rki_vaccination/rki_vaccination_domain_model.txt
index b27c87682e05104845dbc9ac7d4284d72f9b94e3..c6278860893027aaaf0026112e701c73a8cda850 100644
--- a/docs/blueprints/rki_vaccination/rki_vaccination_domain_model.txt
+++ b/docs/blueprints/rki_vaccination/rki_vaccination_domain_model.txt
@@ -1,4 +1,22 @@
 @startuml
+entity ApplicationDateReported {
+    id: Integer
+	date_reported:  String
+    year_week:  String
+    datum: Date
+    year: Integer
+    month: Integer
+    day_of_month: Integer
+    day_of_week: Integer
+    week_of_year: Integer
+	get_name_for_weekday()
+	{classifier} get_names_for_weekday()
+	{classifier} get_datum_parts(my_date_rep: String)
+	{classifier} get_datum(my_year: Integer, my_month: Integer, my_day: Integer)
+	{classifier} get_datum_as_str(my_year: Integer, my_month: Integer, my_day: Integer)
+	{classifier} my_year_week(my_iso_year: Integer, week_number: Integer)
+	{classifier} create_new_object_factory(my_date_rep: String)
+}
 entity Course {
     id: Integer
     dateiname: String
diff --git a/docs/blueprints/who/who_domain_model.txt b/docs/blueprints/who/who_domain_model.txt
index 3387f57f880087f46bb94087fd97faf35d818698..48edda156a34c60eb66a48cdabdf2365a1f7b98d 100644
--- a/docs/blueprints/who/who_domain_model.txt
+++ b/docs/blueprints/who/who_domain_model.txt
@@ -1,4 +1,22 @@
 @startuml
+entity ApplicationDateReported {
+    id: Integer
+	date_reported:  String
+    year_week:  String
+    datum: Date
+    year: Integer
+    month: Integer
+    day_of_month: Integer
+    day_of_week: Integer
+    week_of_year: Integer
+	get_name_for_weekday()
+	{classifier} get_names_for_weekday()
+	{classifier} get_datum_parts(my_date_rep: String)
+	{classifier} get_datum(my_year: Integer, my_month: Integer, my_day: Integer)
+	{classifier} get_datum_as_str(my_year: Integer, my_month: Integer, my_day: Integer)
+	{classifier} my_year_week(my_iso_year: Integer, week_number: Integer)
+	{classifier} create_new_object_factory(my_date_rep: String)
+}
 entity WhoDateReported {
     id: Integer
 	date_reported: String
@@ -76,21 +94,6 @@ entity WhoImport {
     {classifier} countries()
 }
 
-Course "1" *--> "*" Workflow: workflows
-Workflow "*" --> "1" Course:  course
-Workflow "1" *--> "*" Lektion: lektionen
-Lektion "*" --> "1" Workflow: course_workflow
-Lektion "1" o--> "*" Abbildung: abbildungen
-Abbildung "*" --> "1" Lektion: lektion
-Lektion "1" *--> "*" FolienSatz: foliensaetze
-FolienSatz "*" --> "1" Lektion: lektion
-FolienSatz "1" *--> "*" Folie: folien
-FolienSatz "1" *--> "*" Abbildung: abbildungen
-Folie "*" --> "1" FolienSatz: foliensatz
-Folie "1" o--> "*" Abbildung: abbildungen
-Abbildung "*" --> "1" Folie: folie
-Abbildung "*" --> "1" FolienSatz: foliensatz
-
 class WhoService {
     pretask_database_drop_create()
     task_database_drop_create()
@@ -111,18 +114,26 @@ class WhoServiceImport {
     import_file()
 }
 class WhoServiceUpdate {
-    __update_date_reported()
-    __update_region()
-    __update_country()
-    __update_data_incremental()
-    __update_data_initial()
-    __update_dimension_tables()
+    -update_date_reported()
+    -update_region()
+    -update_country()
+    -update_data_incremental()
+    -update_data_initial()
+    -update_dimension_tables()
     update_dimension_tables_only()
     update_fact_table_incremental_only()
     update_fact_table_initial_only()
     update_star_schema_incremental()
     update_star_schema_initial()
 }
+class ApplicationServiceDownload {
+	-log_error()
+	-log_success()
+	-prepare_download()
+	-download_with_wget()
+	-download_with_subprocess_and_os_native_wget()
+	download_file()
+}
 class ApplicationServiceConfig {
 	limit_nr: Integer
     data_path: String
@@ -148,7 +159,35 @@ ArtefactContentService : String[] courses
 ArtefactContentService : String[] workflows
 ArtefactContentService : String[] lektionen
 ArtefactContentService : String[] course_names
-class who_views {
+class who_views_frontends {
+    url_root()
+    url_home()
+    url_update_data()
+    url_rename()
+    url_kurse_all()
+    url_kurse_workflow_lektionen(workflow_id: Integer)
+    url_kurse_workflow_lektion_folien(lektion_id: Integer)
+    url_abbbildung_id(abbildung_id: Integer)
+    url_db_dump()
+    url_db_reimport()
+    task_data_update()
+    task_rename_src_files()
+}
+class who_celery_tasks {
+    url_root()
+    url_home()
+    url_update_data()
+    url_rename()
+    url_kurse_all()
+    url_kurse_workflow_lektionen(workflow_id: Integer)
+    url_kurse_workflow_lektion_folien(lektion_id: Integer)
+    url_abbbildung_id(abbildung_id: Integer)
+    url_db_dump()
+    url_db_reimport()
+    task_data_update()
+    task_rename_src_files()
+}
+class who_views_tasks {
     url_root()
     url_home()
     url_update_data()
diff --git a/src/covid19/blueprints/owid/owid_model_import.py b/src/covid19/blueprints/owid/owid_model_import.py
index a32ca3852b8e891494d87b818bacceb7e5861820..44e31de34fcdd8d525d9c76722b3f652ef848ceb 100644
--- a/src/covid19/blueprints/owid/owid_model_import.py
+++ b/src/covid19/blueprints/owid/owid_model_import.py
@@ -90,6 +90,12 @@ class OwidImport(db.Model):
             .filter(cls.id == other_id)\
             .one()
 
+    @classmethod
+    def find_by_id(cls, other_id):
+        return db.session.query(cls)\
+            .filter(cls.id == other_id)\
+            .one()
+
     @classmethod
     def get_dates(cls):
         return db.session.query(cls.date)\