diff --git a/src/emuvim/api/sonata/README.md b/src/emuvim/api/sonata/README.md
new file mode 100644
index 0000000..1845489
--- /dev/null
+++ b/src/emuvim/api/sonata/README.md
@@ -0,0 +1,71 @@
+# SONATA dummy gatekeeper API:
+
+## Upload a package (*.son) file:
+
+To upload the file `simplest-example.son` do:
+
+* `curl -i -X POST -F file=@simplest-example.son http://127.0.0.1:8000/api/packages/uploads`
+
+To list all uploaded packages do:
+
+* `curl http://127.0.0.1:8000/api/packages/uploads`
+
+To instantiate (start) a service do:
+
+* `curl ...`
+
+To list all running services do:
+
+* `curl ...`
+
+
+## API definition
+
+This page describes the dummy gatekeeper API. This gatekeeper fakes the original platform gatekeeper during development SDK tools like son-push. 
+
+It is also able to deploy our example service package (not any arbitrary service package!) in the emulator for the Y1 demo.
+
+_Note: This API should converge to the API of the original GK as much as possible!_
+
+## REST API:
+<table>
+<tr>
+<th>Endpoint:</th>
+<th>Method:</th>
+<th>Header:</th>
+<th>Body:</th>
+<th>Response:</th>
+</tr>
+<tr>
+<td>/api/packages/uploads</td>
+<td>POST</td>
+<td>-</td>
+<td>{file-content} as enctype=multipart/form-data</td>
+<td>{"service_uuid": "c880aaab-f3b9-43ac-ac6b-3d27b46146b7", size=456, sha1=49ee6468dfa4ecbad440d669b249d523a38651be, error: null}</td>
+</tr>
+<tr>
+<td>/api/packages/uploads</td>
+<td>GET</td>
+<td>-</td>
+<td></td>
+<td>{service_uuid_list: ["c880aaab-f3b9-43ac-ac6b-3d27b46146b7", "c880aaab-f3b9-43ac-ac6b-3d27b46146b8", "c880aaab-f3b9-43ac-ac6b-3d27b46146b9"]}</td>
+</tr>
+<tr>
+<td>/api/instantiations</td>
+<td>POST</td>
+<td>-</td>
+<td>{service_uuid: "c880aaab-f3b9-43ac-ac6b-3d27b46146b7"}</td>
+<td>{service_instance_uuid: "de4567-f3b9-43ac-ac6b-3d27b461123"}</td>
+</tr>
+<tr>
+<td>/api/instantiations</td>
+<td>GET</td>
+<td>-</td>
+<td></td>
+<td>{service_instance_uuid_list: ["de4567-f3b9-43ac-ac6b-3d27b461123", "de4567-f3b9-43ac-ac6b-3d27b461124", "de4567-f3b9-43ac-ac6b-3d27b461125"]}</td>
+</tr>
+</table>
+
+## Run REST API in standalone mode (without emulator):
+
+* `sudo python src/emuvim/api/sonata/dummygatekeeper.py`
\ No newline at end of file
diff --git a/src/emuvim/api/sonata/__init__.py b/src/emuvim/api/sonata/__init__.py
index e69de29..200337a 100644
--- a/src/emuvim/api/sonata/__init__.py
+++ b/src/emuvim/api/sonata/__init__.py
@@ -0,0 +1,36 @@
+"""
+This module implements a simple REST API that behaves like SONATA's gatekeeper.
+
+It is only used to support the development of SONATA's SDK tools and to demonstrate
+the year 1 version of the emulator until the integration with WP4's orchestrator is done.
+"""
+
+import logging
+import threading
+import dummygatekeeper as dgk
+
+
+class SonataDummyGatekeeperEndpoint(object):
+
+    def __init__(self, listenip, port):
+        self.dcs = {}
+        self.ip = listenip
+        self.port = port
+        logging.debug("Created API endpoint %s" % self)
+
+    def __repr__(self):
+        return "%s(%s:%d)" % (self.__class__.__name__, self.ip, self.port)
+
+    def connectDatacenter(self, dc):
+        self.dcs[dc.label] = dc
+        logging.info("Connected DC(%s) to API endpoint %s" % (
+            dc, self))
+
+    def start(self):
+        thread = threading.Thread(target=self._api_server_thread, args=())
+        thread.daemon = True
+        thread.start()
+        logging.debug("Started API endpoint %s" % self)
+
+    def _api_server_thread(self):
+        dgk.start_rest_api(self.ip, self.port)
diff --git a/src/emuvim/api/sonata/dummygatekeeper.py b/src/emuvim/api/sonata/dummygatekeeper.py
index e69de29..e89c007 100644
--- a/src/emuvim/api/sonata/dummygatekeeper.py
+++ b/src/emuvim/api/sonata/dummygatekeeper.py
@@ -0,0 +1,118 @@
+"""
+This module implements a simple REST API that behaves like SONATA's gatekeeper.
+
+It is only used to support the development of SONATA's SDK tools and to demonstrate
+the year 1 version of the emulator until the integration with WP4's orchestrator is done.
+"""
+
+import logging
+import os
+import uuid
+import hashlib
+from flask import Flask, request
+import flask_restful as fr
+
+logging.getLogger("werkzeug").setLevel(logging.WARNING)
+
+
+UPLOAD_FOLDER = "/tmp/son-dummy-gk/uploads/"
+CATALOG_FOLDER = "/tmp/son-dummy-gk/catalog/"
+
+
+class Gatekeeper(object):
+
+    def __init__(self):
+        self.packages = dict()
+        self.instantiations = dict()
+        logging.info("Create SONATA dummy gatekeeper.")
+
+    def unpack_service_package(self, service_uuid):
+        # TODO implement method
+        # 1. unzip *.son file and store contents in CATALOG_FOLDER/services/<service_uuid>/
+        pass
+
+    def start_service(self, service_uuid):
+        # TODO implement method
+        # 1. parse descriptors
+        # 2. do the corresponding dc.startCompute(name="foobar") calls
+        # 3. store references to the compute objects in self.instantiations
+        pass
+
+
+"""
+Resource definitions and API endpoints
+"""
+
+
+class Packages(fr.Resource):
+
+    def post(self):
+        """
+        We expect request with a *.son file and store it in UPLOAD_FOLDER
+        """
+        try:
+            # get file contents
+            file = request.files['file']
+            # generate a uuid to reference this package
+            service_uuid = str(uuid.uuid4())
+            hash = hashlib.sha1(str(file)).hexdigest()
+            # ensure that upload folder exists
+            ensure_dir(UPLOAD_FOLDER)
+            upload_path = os.path.join(UPLOAD_FOLDER, "%s.son" % service_uuid)
+            # store *.son file to disk
+            file.save(upload_path)
+            size = os.path.getsize(upload_path)
+            # store a reference to the uploaded package in our gatekeeper
+            GK.packages[service_uuid] = upload_path
+            # generate the JSON result
+            return {"service_uuid": service_uuid, "size": size, "sha1": hash, "error": None}
+        except Exception as ex:
+            logging.exception("Service package upload failed:")
+            return {"service_uuid": None, "size": 0, "sha1": None, "error": "upload failed"}
+
+    def get(self):
+        return {"service_uuid_list": list(GK.packages.iterkeys())}
+
+
+class Instantiations(fr.Resource):
+
+    def post(self):
+        # TODO implement method
+        pass
+
+    def get(self):
+        # TODO implement method
+        pass
+
+# create a single, global GK object
+GK = Gatekeeper()
+# setup Flask
+app = Flask(__name__)
+app.config['MAX_CONTENT_LENGTH'] = 512 * 1024 * 1024  # 512 MB max upload
+api = fr.Api(app)
+# define endpoints
+api.add_resource(Packages, '/api/packages/uploads')
+api.add_resource(Instantiations, '/api/instantiations')
+
+
+def start_rest_api(host, port):
+    # start the Flask server (not the best performance but ok for our use case)
+    app.run(host=host,
+            port=port,
+            debug=True,
+            use_reloader=False  # this is needed to run Flask in a non-main thread
+            )
+
+
+def ensure_dir(name):
+    if not os.path.exists(name):
+       os.makedirs(name)
+
+
+if __name__ == '__main__':
+    """
+    Lets allow to run the API in standalone mode.
+    """
+    logging.getLogger("werkzeug").setLevel(logging.INFO)
+    start_rest_api("0.0.0.0", 8000)
+
diff --git a/src/emuvim/dcemulator/node.py b/src/emuvim/dcemulator/node.py
index 74540ab..6030153 100755
--- a/src/emuvim/dcemulator/node.py
+++ b/src/emuvim/dcemulator/node.py
@@ -80,6 +80,9 @@
         self.switch = None  # first prototype assumes one "bigswitch" per DC
         self.containers = {}  # keep track of running containers
 
+    def __repr__(self):
+        return self.label
+
     def _get_next_dc_dpid(self):
         global DCDPID_BASE
         DCDPID_BASE += 1
diff --git a/src/emuvim/examples/sonata_y1_demo_topology_1.py b/src/emuvim/examples/sonata_y1_demo_topology_1.py
index 03a3fd0..ea33e80 100644
--- a/src/emuvim/examples/sonata_y1_demo_topology_1.py
+++ b/src/emuvim/examples/sonata_y1_demo_topology_1.py
@@ -8,6 +8,7 @@
 from mininet.log import setLogLevel
 from emuvim.dcemulator.net import DCNetwork
 from emuvim.api.zerorpc.compute import ZeroRpcApiEndpoint
+from emuvim.api.sonata import SonataDummyGatekeeperEndpoint
 
 logging.basicConfig(level=logging.INFO)
 
@@ -21,15 +22,19 @@
     net.addLink(dc1, s1, delay="10ms")
     net.addLink(dc2, s1, delay="20ms")
 
-    # create a new instance of a endpoint implementation
+    # add the command line interface endpoint to each DC
     zapi1 = ZeroRpcApiEndpoint("0.0.0.0", 4242)
-    # connect data centers to this endpoint
     zapi1.connectDatacenter(dc1)
     zapi1.connectDatacenter(dc2)
     # run API endpoint server (in another thread, don't block)
     zapi1.start()
 
-    # TODO add "fake gatekeeper" api endpoint and connect it to both dcs
+    # add the SONATA dummy gatekeeper to each DC
+    sdkg1 = SonataDummyGatekeeperEndpoint("0.0.0.0", 8000)
+    sdkg1.connectDatacenter(dc1)
+    sdkg1.connectDatacenter(dc2)
+    # run the dummy gatekeeper (in another thread, don't block)
+    sdkg1.start()
 
     # start the emulation platform
     net.start()
