diff --git a/mdproxy.py b/mdproxy.py
index 28816574661663a802f31161da61f337b0888c49..f1e779bced0d0630b223b593f2ac3d92729378fd 100755
--- a/mdproxy.py
+++ b/mdproxy.py
@@ -15,32 +15,32 @@ app = Flask(__name__)
 
 # Find all IdP's in edugain metadata
 cached = {}
-signer_url = 'http://localhost:5001/sign'
+signer_url = 'http://localhost:5001'
 
 
-@app.route('/cache/<path:eid>', methods=['GET'])
-def cache(eid):
-    global cached
+@app.route('/<domain>/entities/<path:eid>', methods=['GET'])
+def serve(domain, eid):
     entityID = unquote(eid)
     if entityID[:6] == "{sha1}":
         entityID = entityID[6:]
     else:
         entityID = hasher(entityID)
 
-    if entityID in cached:
-        if cached[entityID].valid_until > datetime.now(tz.tzutc()):
+    cached[domain] = cached.get(domain, {})
+    if entityID in cached[domain]:
+        if cached[domain][entityID].valid_until > datetime.now(tz.tzutc()):
             print(f"serve {entityID}")
-            return cached[entityID].md
+            return cached[domain][entityID].md
     else:
         print(f"request {entityID}")
-        result = requests.get(f"{signer_url}/{{sha1}}{entityID}").text
+        result = requests.get(f"{signer_url}/{domain}/entities/{{sha1}}{entityID}").text
         parsed = ET.fromstring(result)
         validUntil = parsed.get('validUntil')
         # cacheDuration = parsed.get('cacheDuration')
         cached_entity = Entity()
         cached_entity.md = result
         cached_entity.valid_until = parser.isoparse(validUntil)
-        cached[entityID] = cached_entity
+        cached[domain][entityID] = cached_entity
         return result
 
 
diff --git a/mdserver.py b/mdserver.py
index f0d9a654d2d5515c957b7195dd745f2db5e6c304..dbb2e50894cfb0ff467b9352269b4b9d11a2e9a9 100755
--- a/mdserver.py
+++ b/mdserver.py
@@ -8,13 +8,14 @@ from datetime import datetime
 
 import traceback
 from utils import read_config, read_domain, hasher, idps, \
-    signed, signer, Signers, Entity
+    signed, signer, Signers, Entity, event_notifier
 
+signers = Signers()
 app = Flask(__name__)
 
 
 @app.route('/<domain>/entities/<path:eid>', methods=['GET'])
-def sign(domain, eid):
+def serve(domain, eid):
     entityID = unquote(eid)
     if entityID[:6] == "{sha1}":
         sha1 = entityID[6:]
@@ -34,7 +35,7 @@ def sign(domain, eid):
             print(f"sign {domain} {sha1}")
             valid_until = idps[domain][sha1].valid_until
             if valid_until > datetime.now(tz.tzutc()):
-                signed_element = Signers()[signer[domain]](idps[domain][sha1].md)
+                signed_element = signers[signer[domain]](idps[domain][sha1].md)
                 signed_xml = ET.tostring(signed_element, pretty_print=True).decode()
                 signed_entity = Entity()
                 signed_entity.md = signed_xml
@@ -62,4 +63,6 @@ for domain, values in config.items():
     read_domain(domain, values)
     signer[domain] = values['signer']
 
+
 app.run(host='127.0.0.1', port=5001)
+event_notifier.start()
diff --git a/mdsigner.py b/mdsigner.py
index 352eb61ea2bf27b560c97ca497498aa75383e342..23c981d636f47a0daf4349606e2100aa5583cd9d 100755
--- a/mdsigner.py
+++ b/mdsigner.py
@@ -6,7 +6,7 @@ from concurrent.futures import ThreadPoolExecutor
 from lxml import etree as ET
 # import traceback
 
-from utils import hasher, signer
+from utils import hasher, Signers
 
 
 # Find all IdP's in edugain metadata
@@ -14,9 +14,7 @@ idps = []
 success = 0
 failed = 0
 maxthreads = 8
-
-cert = open("meta.crt").read()
-key = open("meta.key").read()
+signer = Signers()['normal_signer']
 
 
 def sign(xml, name):
@@ -24,7 +22,7 @@ def sign(xml, name):
     # print("Signer")
     try:
         sha1 = hasher(name)
-        signed = signer(xml, cert, key)
+        signed = signer(xml)
         out = ET.tostring(signed, pretty_print=True).decode()
         # XMLVerifier().verify(out, x509_cert=cert)
         with open(f'output/{sha1}.xml', 'w') as f:
diff --git a/utils.py b/utils.py
index aae3bbce3ae54919b26e1c81f2298774bc80964d..543982d13d05cf6f20c36c0ffd5805f3c8ff8a0c 100644
--- a/utils.py
+++ b/utils.py
@@ -21,6 +21,13 @@ signed = {}
 signer = {}
 
 
+def hasher(entity_id):
+    sha1 = hashlib.sha1()
+    sha1.update(entity_id.encode())
+    sha1_digest = sha1.hexdigest()
+    return sha1_digest
+
+
 class Entity(object):
     md = None
     valid_until = 0
@@ -112,13 +119,4 @@ def read_config():
     return config
 
 
-def hasher(entity_id):
-    sha1 = hashlib.sha1()
-    sha1.update(entity_id.encode())
-    sha1_digest = sha1.hexdigest()
-    return sha1_digest
-
-
-
 event_notifier = pyinotify.ThreadedNotifier(watch_manager, EventProcessor())
-event_notifier.start()