diff --git a/ckanext/odsh/controller.py b/ckanext/odsh/controller.py
index faba663a7c0072645f481bd04c6a6a2192d6bb1f..119d758250fce6182f9991efe6a7280b3a3a0654 100644
--- a/ckanext/odsh/controller.py
+++ b/ckanext/odsh/controller.py
@@ -1,13 +1,21 @@
 import ckan.lib.base as base
 from ckan.controllers.home import HomeController
 from ckan.controllers.user import UserController
+from ckan.controllers.api import ApiController
+from ckan.controllers.feed import FeedController
 from ckan.controllers.package import PackageController
 from ckan.controllers.feed import FeedController, ITEMS_LIMIT, _package_search, _create_atom_id
 import ckan.lib.helpers as h
 import ckan.authz as authz
+from ckan.common import c
+import logging
+import matomo 
+import ckan.logic as logic
 from ckan.common import c, request, config
+import hashlib
 
 abort = base.abort
+log = logging.getLogger(__name__)
 
 class OdshRouteController(HomeController):
     def info_page(self):
@@ -17,7 +25,6 @@ class OdshRouteController(HomeController):
     def not_found(self):
         abort(404)
 
-
 class OdshUserController(UserController):
     def me(self, locale=None):
         if not c.user:
@@ -57,8 +64,34 @@ class OdshUserController(UserController):
 class OdshPackageController(PackageController):
     pass
 
+class MamotoApiController(ApiController):
+    def action(self, logic_function, ver=None):
+        try:
+            function = logic.get_action(logic_function)
+            side_effect_free = getattr(function, 'side_effect_free', False)
+            request_data = self._get_request_data(
+                try_url_params=side_effect_free)
+            if isinstance(request_data, dict):
+                id = request_data.get('id', '')
+                if 'q' in request_data:
+                    id = request_data['q']
+                if 'query' in request_data:
+                    id = request_data['query']
+                userid=None
+                if c.user:
+                    userid=hashlib.md5(c.user).hexdigest()[:16]
+                matomo.create_matomo_request(userid)
+            else:
+                matomo.create_matomo_request()
+
+        except Exception, e:
+            log.error(e)
+        
+        return ApiController.action(self, logic_function, ver)
+
 class OdshFeedController(FeedController):
     def custom(self):
+        matomo.create_matomo_request()
         extra_fields=['ext_startdate', 'ext_enddate', 'ext_bbox', 'ext_prev_extent']
         q = request.params.get('q', u'')
         fq = ''
diff --git a/ckanext/odsh/helpers.py b/ckanext/odsh/helpers.py
index 6234d7eeb27383c6f03db5e834d6afe540e5fc90..fc8a830023bd4b132573e65b06f915e54713ab89 100644
--- a/ckanext/odsh/helpers.py
+++ b/ckanext/odsh/helpers.py
@@ -139,6 +139,11 @@ def odsh_upload_known_formats():
     value = toolkit.aslist(value)
     return value
 
+def odsh_tracking_id():
+    return config.get('ckanext.odsh.matomo_id')
+
+def odsh_tracking_url():
+    return config.get('ckanext.odsh.matomo_url')
 
 def odsh_encodeurl(url):
     return urllib.quote(url, safe='')
diff --git a/ckanext/odsh/matomo.py b/ckanext/odsh/matomo.py
new file mode 100644
index 0000000000000000000000000000000000000000..a3fd6fc1ae16564f5ad5eeed7de94e04f5d2c5a3
--- /dev/null
+++ b/ckanext/odsh/matomo.py
@@ -0,0 +1,24 @@
+from piwikapi.tracking import PiwikTracker
+from piwikapi.tests.request import FakeRequest
+from ckan.common import c, request
+from pylons import config
+import logging
+from ckan.plugins.toolkit import enqueue_job
+
+def create_matomo_request(userId=None):
+    headers = {
+        'HTTP_USER_AGENT': request.headers.get('User-Agent'),
+        'REMOTE_ADDR': request.headers.get('Host'),
+        # 'HTTP_REFERER': 'http://referer.com/somewhere/',
+        'HTTP_ACCEPT_LANGUAGE': request.headers.get('Accept-Language'),
+        'SERVER_NAME': config.get('ckan.site_url'),
+        'PATH_INFO': c.environ['PATH_INFO'],
+        # 'QUERY_STRING': 'something=bar',
+        'HTTPS': False,
+    }
+    fakerequest = FakeRequest(headers)
+    piwiktracker =PiwikTracker(config.get('ckanext.odsh.matomo_id'), fakerequest)
+    piwiktracker.set_api_url(config.get('ckanext.odsh.matomo_url'))
+    if userId:
+        piwiktracker.set_visitor_id(userId)
+    enqueue_job(piwiktracker.do_track_page_view,[request.path_qs], queue='tracking')
diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py
index 3e4efec3407a3966af4bf7666696c52b637ccf42..8214308f6ad3034736c807c029cf9b3574302118 100644
--- a/ckanext/odsh/plugin.py
+++ b/ckanext/odsh/plugin.py
@@ -112,7 +112,9 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
                 'odsh_extract_error_new': odsh_helpers.odsh_extract_error_new,
                 'odsh_extract_value_from_extras': odsh_helpers.odsh_extract_value_from_extras,
                 'odsh_create_checksum': odsh_helpers.odsh_create_checksum,
-                'presorted_license_options': odsh_helpers.presorted_license_options
+                'presorted_license_options': odsh_helpers.presorted_license_options,
+                'odsh_tracking_id': odsh_helpers.odsh_tracking_id,
+                'odsh_tracking_url': odsh_helpers.odsh_tracking_url
                 }
 
     def after_map(self, map):
@@ -129,7 +131,7 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
         # /api ver 3 or none with matomo
         GET_POST = dict(method=['GET', 'POST'])
         with SubMapper(map, controller='ckanext.odsh.controller:MamotoApiController', path_prefix='/api{ver:/3|}', ver='/3') as m:
-            m.connect('/action2/{logic_function}', action='action', conditions=GET_POST)
+            m.connect('/action/{logic_function}', action='action', conditions=GET_POST)
 
         with SubMapper(map, controller='ckanext.odsh.controller:OdshFeedController') as m:
             m.connect('/feeds/custom.atom', action='custom')
diff --git a/ckanext/odsh/templates/base.html b/ckanext/odsh/templates/base.html
index e7d5bc3853bb5def3f75d03b32aa276bf14a6de2..5962c139dbd823b28c0289e0794ea1e724b245c9 100644
--- a/ckanext/odsh/templates/base.html
+++ b/ckanext/odsh/templates/base.html
@@ -10,8 +10,8 @@
 
 {% block head_extras %}
 {{ super() }}
-{% set matomo_url = 'https://phpefi.schleswig-holstein.de/gsb_analytics/'%}
-{% set matomo_id = 3%}
+{% set matomo_url = h.odsh_tracking_url()%}
+{% set matomo_id = h.odsh_tracking_id()%}
 <!-- Matomo -->
 <script type="text/javascript">
   var _paq = _paq || [];
@@ -19,11 +19,10 @@
   _paq.push(['trackPageView']);
   _paq.push(['enableLinkTracking']);
   (function() {
-    var u="{{matomo_url}}";
-    _paq.push(['setTrackerUrl', u+'piwik.php']);
+    _paq.push(['setTrackerUrl', '{{matomo_url}}']);
     _paq.push(['setSiteId', '{{matomo_id}}']);
     var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
-    g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
+    g.type='text/javascript'; g.async=true; g.defer=true; g.src='{{matomo_url|replace('piwik.php','piwik.js')}}'; s.parentNode.insertBefore(g,s);
   })();
 </script>
 <!-- End Matomo Code -->
diff --git a/ckanext/odsh/templates/page.html b/ckanext/odsh/templates/page.html
index 05e49c0821beea5d43648e25e274ceea68a6f8ad..525e8240c1ac1e427c88b2755a4fba2f736a10ce 100644
--- a/ckanext/odsh/templates/page.html
+++ b/ckanext/odsh/templates/page.html
@@ -3,9 +3,9 @@
 
 {%- block content %}
 {% block maintag %}<div role="main">{% endblock %}
-{% set matomo_url = 'https://phpefi.schleswig-holstein.de/gsb_analytics/'%}
-{% set matomo_id = 3%}
-<noscript><p><img src="{{matomo_url}}/piwik.php?idsite={{matomo_id}}&rec=1" style="border:0;" alt="" /></p></noscript>
+{% set matomo_url = h.odsh_tracking_url()%}
+{% set matomo_id = h.odsh_tracking_id()%}
+<noscript><p><img src="{{matomo_url}}?idsite={{matomo_id}}&rec=1" style="border:0;" alt="" /></p></noscript>
   <div id="content" class="container">
 <div id="testsystem">
       <p>TESTSYSTEM</p>