diff --git a/README.md b/README.md
index 0908f4269f67ead7a2080db2921b14154c8e7fd2..701f181fc7354a2dcdfa774b58f9fda254243f18 100644
--- a/README.md
+++ b/README.md
@@ -16,17 +16,21 @@ Example of Variables:
 yunohost:
   # Link to the install script
   install_script_url: https://raw.githubusercontent.com/YunoHost/install_script/master/install_yunohost
-  # The main domain
+  # The main domain, then a list of other domains.
   domain: example.com
+  extra_domains:
+    - example2.com
+    - example3.com
   # Yunohost admin password
   password: MYINSECUREPWD_PLZ_OVERRIDE_THIS
   # If you don't want to use a noho.st url
   ignore_dyndns: False
   # The list of apps you want to install.
   apps:
-    - link: ttrss # It can be the name of an official app or a github link
-      args: # Provide here args. Path and domain are mandatory, other args depend of the app.
-        path: /var/www/ttrss
+    - label: Tiny Tiny RSS # Label is important, it's a reference for the Playbook.
+      link: ttrss # It can be the name of an official app or a github link
+      args: # Provide here args. Path and domain are mandatory, other args depend of the app (cf manifest.json of app).
+        path: /ttrss
         domain: example.com
 ```
 
@@ -48,7 +52,7 @@ Example Playbook
         update_cache: yes
 
   roles:
-     - { role: ansible-yunohost }
+     - { role: sylvainar.yunohost }
 ```
 
 License
diff --git a/default/main.yml b/default/main.yml
index bb6a7d42469a3795b42b7b7169524fc5658e63e0..f344a86d0839594621036943c3ca439261f10994 100644
--- a/default/main.yml
+++ b/default/main.yml
@@ -1,15 +1,7 @@
 yunohost:
-  # Link to the install script
   install_script_url: https://raw.githubusercontent.com/YunoHost/install_script/master/install_yunohost
-  # The main domain
   domain: example.com
-  # Yunohost admin password
+  extra_domains: ~
   password: MYINSECUREPWD_PLZ_OVERRIDE_THIS
-  # If you don't want to use a noho.st url
   ignore_dyndns: False
-  # The list of apps you want to install.
-  apps:
-    - link: ttrss # It can be the name of an official app or a github link
-      args: # Provide here args. Path and domain are mandatory, other args depend of the app.
-        path: /var/www/ttrss
-        domain: example.com
+  apps: ~
diff --git a/tasks/app.yml b/tasks/app.yml
deleted file mode 100644
index 6978056f5136da887c7808a1dcaff713544e10f9..0000000000000000000000000000000000000000
--- a/tasks/app.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-- name: Test if this app is already installed
-  stat: path={{ app.args.path }}
-  register: yunohost_app_installed
-
-- name: Install app
-  shell: yunohost app install {{ app.link }} --args "{% for key, value in app.args.items() %}{{key}}={{value}}{% if not loop.last %}&{% endif %}{% endfor %}"
-  when: yunohost_app_installed.stat.exists == False
diff --git a/tasks/apps.yml b/tasks/apps.yml
new file mode 100644
index 0000000000000000000000000000000000000000..45a1f8bb8242540ef4e24ed4b19ef651416d754b
--- /dev/null
+++ b/tasks/apps.yml
@@ -0,0 +1,13 @@
+---
+- name: List currently installed apps
+  shell: yunohost app map --output-as json
+  register: yunohost_installed_apps_raw
+  changed_when: False
+
+- name: Format json of apps
+  set_fact: yunohost_installed_apps="{{ yunohost_installed_apps_raw.stdout | from_json }}"
+
+- name: Install apps
+  shell: yunohost app install {{ item.link }} --label "{{ item.label }}" --args "{% for key, value in item.args.items() %}{{key}}={{value}}{% if not loop.last %}&{% endif %}{% endfor %}"
+  with_items: "{{ yunohost.apps }}"
+  when: item.label not in yunohost_installed_apps.values()
diff --git a/tasks/domains.yml b/tasks/domains.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ea261c9bf7ed3617ad838f1d9c94b8e749e4b8b5
--- /dev/null
+++ b/tasks/domains.yml
@@ -0,0 +1,13 @@
+---
+- name: List currently installed domains
+  shell: yunohost domain list --output-as json
+  register: yunohost_installed_domains_raw
+  changed_when: False
+
+- name: Format json of domains
+  set_fact: yunohost_installed_domains="{{ yunohost_installed_domains_raw.stdout | from_json }}"
+
+- name: Create domains
+  shell: yunohost domain add {{ item }} --admin-password {{ yunohost.password }}
+  with_items: "{{ yunohost.extra_domains }}"
+  when: item not in yunohost_installed_domains.domains
diff --git a/tasks/main.yml b/tasks/main.yml
index b3b6f5a7d39149c0a2d58ebe35232918347c8e67..bdaf213f8cf3f5f467a0719cade008ffea3cd795 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -30,11 +30,14 @@
       "
   when: yunohost_file_install.stat.exists == False
 
+- name: Create domains
+  include: domains.yml
+  when: yunohost.extra_domains
+
 - name: Install certificates
-  shell: "yunohost domain cert-install"
-  when: yunohost_file_install.stat.exists == False
+  shell: yunohost domain cert-install
+  changed_when: False
 
 - name: Install apps
-  include: app.yml app={{item}}
-  with_items: "{{ yunohost.apps }}"
+  include: apps.yml
   when: yunohost.apps