diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..ff641b51b52bc38ecdf057d73c2123b39d0c841f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,40 @@
+# Packages
+
+## Supported
+
+Only Apt and Debian Stretch.
+
+Other versions might work but are not tested.
+
+## Parameters and defaults
+
+packages:
+  pkg: {}
+  repos: {}
+
+All configuration is to be placed inside the `packages` dict.
+
+```
+# dictionary of package names to install. The key is the name of the packages, value musst be != none as none is used as knock out.
+pkg: {}
+
+# dictionary of repositories to setup, the key is used as name for the repository. See **repo** for definition for the content
+repos: {}
+```
+
+**repo**:
+```
+# url to repo, example: "http://www.deb-multimedia.org stretch main non-free"
+url: ''
+
+# only set either key or keyid + keyserver
+
+# gpg key to add for this repo
+key: ''
+
+# key id of the key to add, for example "36A1D7869245C8950F966E92D8576A8BA88D21E9"
+keyid: ''
+
+# key server to get the key from, for example "keyserver.ubuntu.com"
+keyserver:
+```
diff --git a/handlers/main.yml b/handlers/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d17e5fdb02f07a692e0a7fd9369215db58376f51
--- /dev/null
+++ b/handlers/main.yml
@@ -0,0 +1,2 @@
+- name: update apt cache
+  apt: update_cache=yes
diff --git a/tasks/main.yml b/tasks/main.yml
index f04d33e1302201b435712d32f373d028ddfad2d7..9ced492a2b095e3e8274916bc3ce3c4e3e124eb4 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -1,11 +1,24 @@
 - set_fact:
     pkgs: "{{ packages.pkg | dict2items | rejectattr('value', 'none') | map(attribute='key') | list }}"
 
+- name: list repositories to setup
+  debug:
+    var: packages.repos
+    verbosity: 1
 - name: list packages to install
   debug:
     var: pkgs
+    verbosity: 1
+
+- name: install apt-transport-https
+  apt: pkg=apt-transport-https
+
+- name: setup repositories
+  include_tasks: repo.yml
+  with_items: "{{ packages.repos }}"
+
+- meta: flush_handlers
 
 - name: install packages
   apt:
     pkg: "{{ pkgs }}" 
-    update_cache: yes
diff --git a/tasks/repo.yml b/tasks/repo.yml
new file mode 100644
index 0000000000000000000000000000000000000000..64946cf4a14a816df8d0837cf196579599d81c83
--- /dev/null
+++ b/tasks/repo.yml
@@ -0,0 +1,19 @@
+- set_fact:
+    repo: "{{ packages.repos[item] }}"
+
+- name: "setup repo key for {{ item }}"
+  apt_key:
+    data: "{{ repo.key }}"
+  when: repo.key|d(false)
+
+- name: "setup repo key for {{ item }}"
+  apt_key:
+    id: "{{ repo.keyid }}"
+    keyserver: "{{ repo.keyserver }}"
+  when:
+    - repo.keyid|d(false)
+    - repo.keyserver|d(false)
+
+- name: "add repo {{ item }}"
+  apt_repository:
+    repo: "{{ repo.url }}"