diff --git a/.gitignore b/.gitignore
index a571867fc2e0ba82787e13f25183957108b55d58..7589096396a39df886f51ef29cef7fc9340ba838 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,7 +2,3 @@
 
 archive
 inventory
-plugins
-roles
-todo
-wiki
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000000000000000000000000000000000000..bc6dc870c9ab1e55188ec15bca7523b353624d35
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,81 @@
+[submodule "wiki"]
+	path = wiki
+	url = git@gitlab.paragon-es.de:ansible-playbooks/general.wiki.git
+[submodule "plugins/jiffybox"]
+	path = plugins/jiffybox
+	url = git@gitlab.paragon-es.de:ansible-plugins/jiffybox.git
+[submodule "plugins/serverdensity"]
+	path = plugins/serverdensity
+	url = git@gitlab.paragon-es.de:ansible-plugins/serverdensity.git
+[submodule "roles/commonauth"]
+	path = roles/commonauth
+	url = git@gitlab.paragon-es.de:ansible-roles/commonauth.git
+[submodule "roles/common"]
+	path = roles/common
+	url = git@gitlab.paragon-es.de:ansible-roles/common.git
+[submodule "roles/mysql"]
+	path = roles/mysql
+	url = git@gitlab.paragon-es.de:ansible-roles/mysql.git
+[submodule "roles/drupal"]
+	path = roles/drupal
+	url = git@gitlab.paragon-es.de:ansible-roles/drupal.git
+[submodule "roles/drush"]
+	path = roles/drush
+	url = git@gitlab.paragon-es.de:ansible-roles/drush.git
+[submodule "roles/serverdensity"]
+	path = roles/serverdensity
+	url = git@gitlab.paragon-es.de:ansible-roles/serverdensity.git
+[submodule "roles/apache"]
+	path = roles/apache
+	url = git@gitlab.paragon-es.de:ansible-roles/apache.git
+[submodule "roles/gitlab"]
+	path = roles/gitlab
+	url = git@gitlab.paragon-es.de:ansible-roles/gitlab.git
+[submodule "roles/nodejs"]
+	path = roles/nodejs
+	url = git@gitlab.paragon-es.de:ansible-roles/nodejs.git
+[submodule "roles/youtrack"]
+	path = roles/youtrack
+	url = git@gitlab.paragon-es.de:ansible-roles/youtrack.git
+[submodule "roles/haproxy"]
+	path = roles/haproxy
+	url = git@gitlab.paragon-es.de:ansible-roles/haproxy.git
+[submodule "roles/sftp"]
+	path = roles/sftp
+	url = git@gitlab.paragon-es.de:ansible-roles/sftp.git
+[submodule "roles/php"]
+	path = roles/php
+	url = git@gitlab.paragon-es.de:ansible-roles/php.git
+[submodule "roles/mysql-client"]
+	path = roles/mysql-client
+	url = git@gitlab.paragon-es.de:ansible-roles/mysql-client.git
+[submodule "roles/oracle"]
+	path = roles/oracle
+	url = git@gitlab.paragon-es.de:ansible-roles/oracle.git
+[submodule "roles/svnserver"]
+	path = roles/svnserver
+	url = git@gitlab.paragon-es.de:ansible-roles/svnserver.git
+[submodule "roles/redis"]
+	path = roles/redis
+	url = git@gitlab.paragon-es.de:ansible-roles/redis.git
+[submodule "roles/piwik"]
+	path = roles/piwik
+	url = git@gitlab.paragon-es.de:ansible-roles/piwik.git
+[submodule "roles/aptproxy"]
+	path = roles/aptproxy
+	url = git@gitlab.paragon-es.de:ansible-roles/aptproxy.git
+[submodule "roles/compass"]
+	path = roles/compass
+	url = git@gitlab.paragon-es.de:ansible-roles/compass.git
+[submodule "roles/openphoto"]
+	path = roles/openphoto
+	url = git@gitlab.paragon-es.de:ansible-roles/openphoto.git
+[submodule "roles/owncloud"]
+	path = roles/owncloud
+	url = git@gitlab.paragon-es.de:ansible-roles/owncloud.git
+[submodule "roles/user-management"]
+	path = roles/user-management
+	url = git@gitlab.paragon-es.de:ansible-roles/user-management.git
+[submodule "roles/composer"]
+	path = roles/composer
+	url = https://github.com/kosssi/ansible-role-composer.git
diff --git a/plugins/jiffybox b/plugins/jiffybox
new file mode 160000
index 0000000000000000000000000000000000000000..a6cf58d6e379a1ea7c97c9c7fcca335af9159bd6
--- /dev/null
+++ b/plugins/jiffybox
@@ -0,0 +1 @@
+Subproject commit a6cf58d6e379a1ea7c97c9c7fcca335af9159bd6
diff --git a/plugins/serverdensity b/plugins/serverdensity
new file mode 160000
index 0000000000000000000000000000000000000000..d10c6313000133c48bca4b289b6cd258ceacca98
--- /dev/null
+++ b/plugins/serverdensity
@@ -0,0 +1 @@
+Subproject commit d10c6313000133c48bca4b289b6cd258ceacca98
diff --git a/roles/apache b/roles/apache
new file mode 160000
index 0000000000000000000000000000000000000000..eb21cfe226cf0de520ecacd220140f2bf2c02560
--- /dev/null
+++ b/roles/apache
@@ -0,0 +1 @@
+Subproject commit eb21cfe226cf0de520ecacd220140f2bf2c02560
diff --git a/roles/aptproxy b/roles/aptproxy
new file mode 160000
index 0000000000000000000000000000000000000000..3b8ce40c3e9a0f93dfbe7973c34dcd72cf4e9faf
--- /dev/null
+++ b/roles/aptproxy
@@ -0,0 +1 @@
+Subproject commit 3b8ce40c3e9a0f93dfbe7973c34dcd72cf4e9faf
diff --git a/roles/common b/roles/common
new file mode 160000
index 0000000000000000000000000000000000000000..05bf8f0fd6fbfdfe68a5c8d9eddba2e85da6d891
--- /dev/null
+++ b/roles/common
@@ -0,0 +1 @@
+Subproject commit 05bf8f0fd6fbfdfe68a5c8d9eddba2e85da6d891
diff --git a/roles/commonauth b/roles/commonauth
new file mode 160000
index 0000000000000000000000000000000000000000..0c6c027e2b303950da7e26e93b8be975e2b07319
--- /dev/null
+++ b/roles/commonauth
@@ -0,0 +1 @@
+Subproject commit 0c6c027e2b303950da7e26e93b8be975e2b07319
diff --git a/roles/compass b/roles/compass
new file mode 160000
index 0000000000000000000000000000000000000000..57d5591ee0348b5351d6d44544f65f7843494f88
--- /dev/null
+++ b/roles/compass
@@ -0,0 +1 @@
+Subproject commit 57d5591ee0348b5351d6d44544f65f7843494f88
diff --git a/roles/composer b/roles/composer
new file mode 160000
index 0000000000000000000000000000000000000000..1bc89a0325dfabbf421d2811566a95c80721d5d8
--- /dev/null
+++ b/roles/composer
@@ -0,0 +1 @@
+Subproject commit 1bc89a0325dfabbf421d2811566a95c80721d5d8
diff --git a/roles/drupal b/roles/drupal
new file mode 160000
index 0000000000000000000000000000000000000000..b70e5391b5f9ff442929533de6db895440519c47
--- /dev/null
+++ b/roles/drupal
@@ -0,0 +1 @@
+Subproject commit b70e5391b5f9ff442929533de6db895440519c47
diff --git a/roles/drush b/roles/drush
new file mode 160000
index 0000000000000000000000000000000000000000..10677f03dc2311c821ac74bd12be16171f518d4e
--- /dev/null
+++ b/roles/drush
@@ -0,0 +1 @@
+Subproject commit 10677f03dc2311c821ac74bd12be16171f518d4e
diff --git a/roles/gitlab b/roles/gitlab
new file mode 160000
index 0000000000000000000000000000000000000000..88375878fab5f15c3f8604c6791a8fa2ba640291
--- /dev/null
+++ b/roles/gitlab
@@ -0,0 +1 @@
+Subproject commit 88375878fab5f15c3f8604c6791a8fa2ba640291
diff --git a/roles/haproxy b/roles/haproxy
new file mode 160000
index 0000000000000000000000000000000000000000..1a3288d27e6a289d24c3f00b32a31c0709acfea9
--- /dev/null
+++ b/roles/haproxy
@@ -0,0 +1 @@
+Subproject commit 1a3288d27e6a289d24c3f00b32a31c0709acfea9
diff --git a/roles/mysql b/roles/mysql
new file mode 160000
index 0000000000000000000000000000000000000000..7d1f77ca7ac88381f29d1fb7bdfc43eb7fcaff3e
--- /dev/null
+++ b/roles/mysql
@@ -0,0 +1 @@
+Subproject commit 7d1f77ca7ac88381f29d1fb7bdfc43eb7fcaff3e
diff --git a/roles/mysql-client b/roles/mysql-client
new file mode 160000
index 0000000000000000000000000000000000000000..eb4c0dce29757eb4185bfa763f62c9c69ab60d1d
--- /dev/null
+++ b/roles/mysql-client
@@ -0,0 +1 @@
+Subproject commit eb4c0dce29757eb4185bfa763f62c9c69ab60d1d
diff --git a/roles/nodejs b/roles/nodejs
new file mode 160000
index 0000000000000000000000000000000000000000..b32c1dc61ac41515a12cf9e7cd54582abd362075
--- /dev/null
+++ b/roles/nodejs
@@ -0,0 +1 @@
+Subproject commit b32c1dc61ac41515a12cf9e7cd54582abd362075
diff --git a/roles/openphoto b/roles/openphoto
new file mode 160000
index 0000000000000000000000000000000000000000..b5ac65e6397f20690837ef8cc9d0b71ac60aaa43
--- /dev/null
+++ b/roles/openphoto
@@ -0,0 +1 @@
+Subproject commit b5ac65e6397f20690837ef8cc9d0b71ac60aaa43
diff --git a/roles/oracle b/roles/oracle
new file mode 160000
index 0000000000000000000000000000000000000000..d49a82e57b6782b14c198856be32d76fc877ff53
--- /dev/null
+++ b/roles/oracle
@@ -0,0 +1 @@
+Subproject commit d49a82e57b6782b14c198856be32d76fc877ff53
diff --git a/roles/owncloud b/roles/owncloud
new file mode 160000
index 0000000000000000000000000000000000000000..edb85ac71f98e6bb1a4f7b68780750a3b5a7563a
--- /dev/null
+++ b/roles/owncloud
@@ -0,0 +1 @@
+Subproject commit edb85ac71f98e6bb1a4f7b68780750a3b5a7563a
diff --git a/roles/php b/roles/php
new file mode 160000
index 0000000000000000000000000000000000000000..9a9898f82958f2948a3a21145e3cffcd94f622ea
--- /dev/null
+++ b/roles/php
@@ -0,0 +1 @@
+Subproject commit 9a9898f82958f2948a3a21145e3cffcd94f622ea
diff --git a/roles/piwik b/roles/piwik
new file mode 160000
index 0000000000000000000000000000000000000000..50ae2f407b7e3f6b0dc8588ef7aaa313986a8cef
--- /dev/null
+++ b/roles/piwik
@@ -0,0 +1 @@
+Subproject commit 50ae2f407b7e3f6b0dc8588ef7aaa313986a8cef
diff --git a/roles/redis b/roles/redis
new file mode 160000
index 0000000000000000000000000000000000000000..3b4ebeb3c3ec4792dda7e6b81a21a7c12cd98175
--- /dev/null
+++ b/roles/redis
@@ -0,0 +1 @@
+Subproject commit 3b4ebeb3c3ec4792dda7e6b81a21a7c12cd98175
diff --git a/roles/serverdensity b/roles/serverdensity
new file mode 160000
index 0000000000000000000000000000000000000000..07e37b170cb43b6a768f53f20e5ea4fe49fabd31
--- /dev/null
+++ b/roles/serverdensity
@@ -0,0 +1 @@
+Subproject commit 07e37b170cb43b6a768f53f20e5ea4fe49fabd31
diff --git a/roles/sftp b/roles/sftp
new file mode 160000
index 0000000000000000000000000000000000000000..1d925cf36ed13eb4f81965fa3f7b166b756e1af5
--- /dev/null
+++ b/roles/sftp
@@ -0,0 +1 @@
+Subproject commit 1d925cf36ed13eb4f81965fa3f7b166b756e1af5
diff --git a/roles/svnserver b/roles/svnserver
new file mode 160000
index 0000000000000000000000000000000000000000..89171b6999b403e0cbe51e06c59fa12733542418
--- /dev/null
+++ b/roles/svnserver
@@ -0,0 +1 @@
+Subproject commit 89171b6999b403e0cbe51e06c59fa12733542418
diff --git a/roles/user-management b/roles/user-management
new file mode 160000
index 0000000000000000000000000000000000000000..d7032d976fe64aa9d53c31395eeac3f84c9c49b7
--- /dev/null
+++ b/roles/user-management
@@ -0,0 +1 @@
+Subproject commit d7032d976fe64aa9d53c31395eeac3f84c9c49b7
diff --git a/roles/youtrack b/roles/youtrack
new file mode 160000
index 0000000000000000000000000000000000000000..15f9c0ffa19d43a1a5c999b9ad2aea825dc7c89d
--- /dev/null
+++ b/roles/youtrack
@@ -0,0 +1 @@
+Subproject commit 15f9c0ffa19d43a1a5c999b9ad2aea825dc7c89d
diff --git a/setup_local.yml b/setup_local.yml
index 075c61002ab85e7c6386ece607ebd288f3899c01..4f31d17218384ff956fae33d7a8dc8b77c0dc9db 100644
--- a/setup_local.yml
+++ b/setup_local.yml
@@ -14,10 +14,8 @@
   vars:
     repo: "git@gitlab.paragon-es.de"
     plugins:
-      - name: "jiffybox"
-        repo: "{{ repo }}:ansible-plugins/jiffybox.git"
-      - name: "serverdensity"
-        repo: "{{ repo }}:ansible-plugins/serverdensity.git"
+      - "jiffybox"
+      - "serverdensity"
   tasks:
     - name: "Get other repositories"
       git:
@@ -26,56 +24,9 @@
         dest: "{{ item.dest }}"
         force: "{{ item.force|default('yes') }}"
       with_items:
-        - repo: "{{ repo }}:ansible-playbooks/general.git"
-          dest: "."
         - repo: "{{ repo }}:ansible-inventories/{{ company }}.git"
           dest: "./inventory"
           force: no
-    - name: "Get roles"
-      git:
-        accept_hostkey: yes
-        repo: "{{ repo }}:ansible-roles/{{ item }}.git"
-        dest: "./roles/{{ item }}"
-        force: "yes"
-      with_items:
-        - "apache"
-        - "aptproxy"
-        - "common"
-        - "commonauth"
-        - "compass"
-        - "drupal"
-        - "drush"
-        - "gitlab"
-        - "haproxy"
-        - "mysql"
-        - "mysql-client"
-        - "nodejs"
-        - "openphoto"
-        - "oracle"
-        - "owncloud"
-        - "php"
-        - "piwik"
-        - "redis"
-        - "serverdensity"
-        - "sftp"
-        - "svnserver"
-        - "user-management"
-        - "youtrack"
-    - name: "Get 3rd party roles"
-      git:
-        accept_hostkey: yes
-        repo: "{{ item.repo }}"
-        dest: "./roles/{{ item.name }}"
-      with_items:
-        - name: "composer"
-          repo: "https://github.com/kosssi/ansible-role-composer.git"
-    - name: "Get plugins"
-      git:
-        accept_hostkey: yes
-        repo: "{{ item.repo }}"
-        dest: "./plugins/{{ item.name }}"
-        force: "{{ item.force|default('yes') }}"
-      with_items: "{{ plugins }}"
     - name: "Ensure plugins directory"
       file:
         dest="/usr/share/ansible_plugins/action_plugins"
@@ -83,8 +34,8 @@
       sudo: yes
     - name: "Install plugins"
       file:
-        src="{{ lookup('env','PWD') }}/plugins/{{ item.name }}/action_plugins/{{ item.name }}.py"
-        dest="/usr/share/ansible_plugins/action_plugins/{{ item.name }}.py"
+        src="{{ lookup('env','PWD') }}/plugins/{{ item }}/action_plugins/{{ item }}.py"
+        dest="/usr/share/ansible_plugins/action_plugins/{{ item }}.py"
         state="link"
       sudo: yes
       with_items: "{{ plugins }}"
@@ -115,3 +66,6 @@
         - option: "ssh_args"
           value: "-o IdentitiesOnly=yes"
           section: "ssh_connection"
+        - option: "pipelining"
+          value: "False"
+          section: "ssh_connection"
diff --git a/wiki b/wiki
new file mode 160000
index 0000000000000000000000000000000000000000..930c1fe2aa9ab3f47d226cda2a7ecd5deb6d159f
--- /dev/null
+++ b/wiki
@@ -0,0 +1 @@
+Subproject commit 930c1fe2aa9ab3f47d226cda2a7ecd5deb6d159f