diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index afc0bb3bfc11c4bd00554951b64dfd6556a1c3b1..b0005d57c93f75e02f6b81271afc407e6eb03b21 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -34,6 +34,43 @@ update(144.76.113.134):
     - php ~/MetaGer/artisan queue:restart
     - php ~/MetaGer/artisan migrate --force
     - php ~/MetaGer/artisan up
+   
+update(metager2):
+  tags:
+  - metager2
+  only:
+    - master
+  before_script:
+    # Abhängigkeiten überprüfen
+    - which composer
+    - which git
+    - which php7.0
+    - which sqlite3
+  script:
+    # Pfad zum neu geklonten Repo
+    - path=`pwd`
+    - cd ~/
+    - if [ -d MetaGer_neu ]; then rm -rf MetaGer_neu;fi
+    - git clone "$path" MetaGer_neu
+    - cd MetaGer_neu
+    - composer install
+    - scp metager@metager3.de:~/.env .
+    - scp metager@metager3.de:~/sumas.xml config/
+    - scp metager@metager3.de:~/sumasEn.xml config/
+    - scp metager@metager3.de:~/blacklistUrl.txt config/
+    - scp metager@metager3.de:~/blacklistDomains.txt config/
+    - touch storage/logs/laravel.log
+    - touch storage/logs/worker.log
+    - chmod 777 config/sumas.xml config/sumasEn.xml database/metager.sqlite
+    - chmod -R 777 storage
+    - chmod -R 777 bootstrap/cache
+    - if [ -f ~/MetaGer/artisan ]; then php ~/MetaGer/artisan down;fi
+    - cd ~/
+    - rm -rf MetaGer
+    - mv MetaGer_neu MetaGer
+    - php ~/MetaGer/artisan queue:restart
+    - php ~/MetaGer/artisan migrate --force
+    - php ~/MetaGer/artisan up
     
 update(metager3.de):
   tags:
diff --git a/config/trustedproxy.php b/config/trustedproxy.php
index 70885b4e4d1e70f47ba0c3431d70ae61c3fcd3bc..b18d7c5579091e55e94606ab5606c3d508dc65c3 100755
--- a/config/trustedproxy.php
+++ b/config/trustedproxy.php
@@ -17,6 +17,7 @@ return [
         '5.9.157.179',
         '144.76.113.134',
         '130.75.2.6',
+        '144.76.182.236',
     ],
 
     /*
diff --git a/readme.md b/readme.md
index 9d797c19c2decd427ddcdc73afe8bff05f7e054c..71413eb6d61a7452d6c8702118c02839caf60d09 100644
--- a/readme.md
+++ b/readme.md
@@ -8,6 +8,7 @@ MetaGer ist eine datenschutzfreundliche und freie Meta-Suchmaschine.
   * php7.0-mbstring
   * php7.0-dom
 * sqlite3
+* redis-server
 * Das Perl-Paket: Lingua::Identify (http://search.cpan.org/~ambs/Lingua-Identify-0.56/lib/Lingua/Identify.pm)
 
 ## MetaGer zu langsam?
diff --git a/resources/lang/de/websearch.php b/resources/lang/de/websearch.php
index 0834a7d25aecffac131ccfab3df919bdd7aeb777..73378e91fffec4b1e029c21616da92c0632e2abb 100644
--- a/resources/lang/de/websearch.php
+++ b/resources/lang/de/websearch.php
@@ -9,4 +9,7 @@ return [
 	'head.6' => 'all',
 	'head.7' => 'Code',
 	'head.8' => 'Suchen',
-];
\ No newline at end of file
+	'head.copy' => 'Kopieren',
+	'alert.success' => 'Kopieren erfolgreich!',
+	'alert.failure' => 'Kopieren fehlgeschlagen!'
+];
diff --git a/resources/lang/en/websearch.php b/resources/lang/en/websearch.php
index f705d97afaaa5fdbf562ebf83fb321a1043e07ae..0ae97b8376b8d33d65b0c50086875a17ddee3616 100644
--- a/resources/lang/en/websearch.php
+++ b/resources/lang/en/websearch.php
@@ -9,4 +9,7 @@ return [
 	'head.6' => 'en',
 	'head.7' => 'Code',
 	'head.8' => 'Search',
-];
\ No newline at end of file
+	'head.copy' => 'Copy',
+	'alert.success' => 'Copied!',
+        'alert.failure' => 'Something went wrong!'
+];
diff --git a/resources/views/widget/sitesearch.blade.php b/resources/views/widget/sitesearch.blade.php
index 9cf1756405d24c4cfd740d6035a9e3758f305eb7..d9660fb8863b12fb2171570941a1b55853067456 100644
--- a/resources/views/widget/sitesearch.blade.php
+++ b/resources/views/widget/sitesearch.blade.php
@@ -3,6 +3,20 @@
 @section('title', $title )
 
 @section('content')
+<script type="text/javascript">
+        function copyCode() {
+            $("#codesnippet").select();
+            try {
+                var successful = document.execCommand('copy');
+                if( successful )
+                    alert('{{ trans('websearch.alert.success') }}');
+                else
+                    alert('{{ trans('websearch.alert.failure') }}');
+            } catch (err) {
+                alert('{{ trans('websearch.alert.failure') }}');
+            }
+        }
+</script>
 <h1>{{ trans('sitesearch.head.1') }}</h1>
 <p>{{ trans('sitesearch.head.2') }}</p>
 <h2>{{ trans('sitesearch.head.3') }}</h2>
@@ -19,8 +33,8 @@
   <input type="hidden" name="encoding" value="utf8">
   <input type="hidden" name="site" value="{{ $site }}">
 </form>
-<h2>{{ trans('sitesearch.generated.5') }}</h2>
-<code>&lt;form class="metager-searchform" action="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "/") }}/meta/meta.ger3" method="get" accept-charset="UTF-8" &gt;
+<h2>{{ trans('sitesearch.generated.5') }} <button class="btn btn-default" type="submit" onclick="copyCode()"><span class="glyphicon glyphicon-paperclip" aria-hidden="true"></span> {{ trans('websearch.head.copy') }}</button></h2>
+<textarea id="codesnippet" readonly style="width:100%;height:500px">&lt;form class="metager-searchform" action="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "/") }}/meta/meta.ger3" method="get" accept-charset="UTF-8" &gt;
   &lt;style type="text/css" scoped&gt;
   .metager-searchinput {
   height: 30px;
@@ -63,6 +77,6 @@
   }
   &lt;/style&gt;
   &lt;a href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "/") }}"&gt;&lt;img class="metager-logo" title="{{ trans('sitesearch.generated.2') }}" alt="MetaGer" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAN8AAABGAgMAAAAx/qk0AAAADFBMVEX/wmn/3KL/6Mj+/vtPnQnhAAAC10lEQVRIx+2XMa7TQBCG1zaJkYwUGp5E5RbR+AJI9g2gQLQ0vDpHsMUJKB49DRIKBRdAco6wN8AFB7CQkfzEZod/Zu3ENgSkbRBStnDkt/uNZ/6ZnX2r6KvyGFujyIdTkVG9F6g+q9YPfKL2fuA9VfmBd1XhB95Rl3EZl/Evxur62dm5gAg7uqSxA613pw2+JqI358CQCD2EqBneEzr1ohLg4WyfJKwMT+CGqonNP4NaxfwYwaOrm7+DGzo6mJ5AeLojcw6M2ctMwNU13jM+GYIXzxUHrtWawQc3TsdXUzAhCJqzQkFNnbjXc3AavljMPxJxNdTvtrOvY2UH2wBhwgrYxUzjfThdMn4L6Rv1c/BTF9AXRMbiVykeLUyIjWbMNN5C+oEvzMCXfURbknnS2QgSPrQfVUCRROzKFEzpqUlsTgipj6l9THb3bnODzxf5oC++nNKewdn5ltHGpCZnz3QIm7Xhc4WzUg4nLwwkpGO4e38K5pQc8g5gCn1Yp36sg9qy+50qLbzRydxRgDa2dVseYEHNQVGE/2Ic2CxBrh04CMOgAjG8ZTlQbZhqA5iKqNnQ4iAuD5itANYsHjLTSlFA1QGUUic9KX43ahPyIqNkvgsZLEcw/EhN5MBJDY9ggBVwx4ERQMmoVVxx0QRcFDkjEpnMt1iJ1bcqhzHi5GsH7rPfgW14lDOS3akROoIuuB9ETs6cli0HOdccmQMZ4u6BoEv8TEC7bDmtKiuOjEtmXQxgCDCXXVaJXA/Z919A0YCrc1UDtB+Qa95SGTcAqli7qwP7vugc7eBgLjnAVjCSxs5lE3Hy04hDc7CRNqBda+KUY5eRBegyr8SiUcvmE0t7YzkiSZ6SIqDv7AjX0q1rdr2ixT+biYBSiLW07Yz3A70eKs8W0l7xs9wc08wcD4qV62rq6r2U2eptcTlGL+O/HN4XFu8rkvelzPsa6H3x9L7q+l6ufwK7PWV5kEbECQAAAABJRU5ErkJggg=="&gt;&lt;/a&gt;&lt;input class="metager-searchinput" name="eingabe" placeholder="{{ trans('sitesearch.generated.3') }}" required&gt;&lt;/input&gt;&lt;button class="metager-searchbutton" type="submit"&gt;{{ trans('sitesearch.generated.4') }}&lt;/button&gt;&lt;input type="hidden" name="encoding" value="utf8"&gt;&lt;/input&gt;&lt;input type="hidden" name="site" value="{{ $site }}"&gt;&lt;/input&gt;&lt;input type="hidden" name="lang" value="{{ trans('sitesearch.generated.6') }}"&gt;&lt;/input&gt;&lt;input type="hidden" name="wdgt-version" value="1"&gt;&lt;/input&gt;&lt;/form&gt;
-</code>
+</textarea>
 @endif
-@endsection
\ No newline at end of file
+@endsection
diff --git a/resources/views/widget/websearch.blade.php b/resources/views/widget/websearch.blade.php
index 579764de7da7b6275d568aa3a9e8d14c5d5f041c..b743ed22c20f2124d0c9be295761207d45ba1a8b 100644
--- a/resources/views/widget/websearch.blade.php
+++ b/resources/views/widget/websearch.blade.php
@@ -3,6 +3,20 @@
 @section('title', $title )
 
 @section('content')
+<script type="text/javascript">
+	function copyCode() {
+	    $("#codesnippet").select();
+            try {
+                var successful = document.execCommand('copy');
+                if( successful )
+                    alert('{{ trans('websearch.alert.success') }}');
+                else
+                    alert('{{ trans('websearch.alert.failure') }}');
+            } catch (err) {
+            	alert('{{ trans('websearch.alert.failure') }}');
+            }
+	}
+</script>
 <h1>{{ trans('websearch.head.1') }}</h1>
 <p>{{ trans('websearch.head.2') }}</p>
 <h2>{{ trans('websearch.head.3') }}</h2>
@@ -10,8 +24,8 @@
   <a href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "/") }}">
     <img class="metager-logo" title="{{ trans('websearch.head.4') }}" alt="MetaGer" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAN8AAABGAgMAAAAx/qk0AAAADFBMVEX/wmn/3KL/6Mj+/vtPnQnhAAAC10lEQVRIx+2XMa7TQBCG1zaJkYwUGp5E5RbR+AJI9g2gQLQ0vDpHsMUJKB49DRIKBRdAco6wN8AFB7CQkfzEZod/Zu3ENgSkbRBStnDkt/uNZ/6ZnX2r6KvyGFujyIdTkVG9F6g+q9YPfKL2fuA9VfmBd1XhB95Rl3EZl/Evxur62dm5gAg7uqSxA613pw2+JqI358CQCD2EqBneEzr1ohLg4WyfJKwMT+CGqonNP4NaxfwYwaOrm7+DGzo6mJ5AeLojcw6M2ctMwNU13jM+GYIXzxUHrtWawQc3TsdXUzAhCJqzQkFNnbjXc3AavljMPxJxNdTvtrOvY2UH2wBhwgrYxUzjfThdMn4L6Rv1c/BTF9AXRMbiVykeLUyIjWbMNN5C+oEvzMCXfURbknnS2QgSPrQfVUCRROzKFEzpqUlsTgipj6l9THb3bnODzxf5oC++nNKewdn5ltHGpCZnz3QIm7Xhc4WzUg4nLwwkpGO4e38K5pQc8g5gCn1Yp36sg9qy+50qLbzRydxRgDa2dVseYEHNQVGE/2Ic2CxBrh04CMOgAjG8ZTlQbZhqA5iKqNnQ4iAuD5itANYsHjLTSlFA1QGUUic9KX43ahPyIqNkvgsZLEcw/EhN5MBJDY9ggBVwx4ERQMmoVVxx0QRcFDkjEpnMt1iJ1bcqhzHi5GsH7rPfgW14lDOS3akROoIuuB9ETs6cli0HOdccmQMZ4u6BoEv8TEC7bDmtKiuOjEtmXQxgCDCXXVaJXA/Z919A0YCrc1UDtB+Qa95SGTcAqli7qwP7vugc7eBgLjnAVjCSxs5lE3Hy04hDc7CRNqBda+KUY5eRBegyr8SiUcvmE0t7YzkiSZ6SIqDv7AjX0q1rdr2ixT+biYBSiLW07Yz3A70eKs8W0l7xs9wc08wcD4qV62rq6r2U2eptcTlGL+O/HN4XFu8rkvelzPsa6H3x9L7q+l6ufwK7PWV5kEbECQAAAABJRU5ErkJggg=="></a><input class="metager-searchinput" name="eingabe" placeholder="{{ trans('websearch.head.5') }}" required=""><input type="hidden" name="lang" value="{{ trans('websearch.head.6') }}"><input type="hidden" name="encoding" value="utf8"><button class="metager-searchbutton" type="submit">{{ trans('websearch.head.8') }}</button>
 </form>
-<h2>{{ trans('websearch.head.7') }}</h2>
-<code>&lt;form class="metager-searchform" action="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "/") }}/meta/meta.ger3" method="get" accept-charset="UTF-8" &gt;
+<h2>{{ trans('websearch.head.7') }} <button class="btn btn-default" type="submit" onclick="copyCode()"><span class="glyphicon glyphicon-paperclip" aria-hidden="true"></span> {{ trans('websearch.head.copy') }}</button></h2>
+<textarea id="codesnippet" readonly style="width:100%;height:500px">&lt;form class="metager-searchform" action="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "/") }}/meta/meta.ger3" method="get" accept-charset="UTF-8" &gt;
   &lt;style type="text/css" scoped&gt;
   .metager-searchinput {
   height: 30px;
@@ -54,5 +68,5 @@
   }
   &lt;/style&gt;
   &lt;a href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "/") }}"&gt;&lt;img class="metager-logo" title="{{ trans('websearch.head.4') }}" alt="MetaGer" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAN8AAABGAgMAAAAx/qk0AAAADFBMVEX/wmn/3KL/6Mj+/vtPnQnhAAAC10lEQVRIx+2XMa7TQBCG1zaJkYwUGp5E5RbR+AJI9g2gQLQ0vDpHsMUJKB49DRIKBRdAco6wN8AFB7CQkfzEZod/Zu3ENgSkbRBStnDkt/uNZ/6ZnX2r6KvyGFujyIdTkVG9F6g+q9YPfKL2fuA9VfmBd1XhB95Rl3EZl/Evxur62dm5gAg7uqSxA613pw2+JqI358CQCD2EqBneEzr1ohLg4WyfJKwMT+CGqonNP4NaxfwYwaOrm7+DGzo6mJ5AeLojcw6M2ctMwNU13jM+GYIXzxUHrtWawQc3TsdXUzAhCJqzQkFNnbjXc3AavljMPxJxNdTvtrOvY2UH2wBhwgrYxUzjfThdMn4L6Rv1c/BTF9AXRMbiVykeLUyIjWbMNN5C+oEvzMCXfURbknnS2QgSPrQfVUCRROzKFEzpqUlsTgipj6l9THb3bnODzxf5oC++nNKewdn5ltHGpCZnz3QIm7Xhc4WzUg4nLwwkpGO4e38K5pQc8g5gCn1Yp36sg9qy+50qLbzRydxRgDa2dVseYEHNQVGE/2Ic2CxBrh04CMOgAjG8ZTlQbZhqA5iKqNnQ4iAuD5itANYsHjLTSlFA1QGUUic9KX43ahPyIqNkvgsZLEcw/EhN5MBJDY9ggBVwx4ERQMmoVVxx0QRcFDkjEpnMt1iJ1bcqhzHi5GsH7rPfgW14lDOS3akROoIuuB9ETs6cli0HOdccmQMZ4u6BoEv8TEC7bDmtKiuOjEtmXQxgCDCXXVaJXA/Z919A0YCrc1UDtB+Qa95SGTcAqli7qwP7vugc7eBgLjnAVjCSxs5lE3Hy04hDc7CRNqBda+KUY5eRBegyr8SiUcvmE0t7YzkiSZ6SIqDv7AjX0q1rdr2ixT+biYBSiLW07Yz3A70eKs8W0l7xs9wc08wcD4qV62rq6r2U2eptcTlGL+O/HN4XFu8rkvelzPsa6H3x9L7q+l6ufwK7PWV5kEbECQAAAABJRU5ErkJggg=="&gt;&lt;/a&gt;&lt;input class="metager-searchinput" name="eingabe" placeholder="{{ trans('websearch.head.5') }}" required&gt;&lt;/input&gt;&lt;input type="hidden" name="encoding" value="utf8"&gt;&lt;button class="metager-searchbutton" type="submit"&gt;{{ trans('websearch.head.8') }}&lt;/button&gt;&lt;input type="hidden" name="wdgt-version" value="1"&gt;&lt;/input&gt;&lt;input type="hidden" name="lang" value="{{ trans('websearch.head.6') }}"&gt;&lt;/form&gt;
-</code>
-@endsection
\ No newline at end of file
+</textarea>
+@endsection