diff --git a/src/emuvim/api/rest/rest_api_endpoint.py b/src/emuvim/api/rest/rest_api_endpoint.py
index b5f29d4..3cb737e 100755
--- a/src/emuvim/api/rest/rest_api_endpoint.py
+++ b/src/emuvim/api/rest/rest_api_endpoint.py
@@ -127,17 +127,21 @@
             self.__class__.__name__, self.ip, self.port))
 
     def start(self):
-        thread = threading.Thread(target=self._start_flask, args=())
-        thread.daemon = True
-        thread.start()
+        self.thread = threading.Thread(target=self._start_flask, args=())
+        self.thread.daemon = True
+        self.thread.start()
         logging.info("Started API endpoint @ http://%s:%d" % (self.ip, self.port))
 
+    def stop(self):
+        if self.http_server:
+            self.http_server.close()
+
     def _start_flask(self):
         #self.app.run(self.ip, self.port, debug=False, use_reloader=False)
         #this should be a more production-fit http-server
         #self.app.logger.setLevel(logging.ERROR)
-        http_server = WSGIServer((self.ip, self.port),
+        self.http_server = WSGIServer((self.ip, self.port),
                                  self.app,
                                  log=open("/dev/null", "w")  # This disables HTTP request logs to not mess up the CLI when e.g. the auto-updated dashboard is used
         )
-        http_server.serve_forever()
+        self.http_server.serve_forever()
diff --git a/src/emuvim/examples/simple_topology_restapi.py b/src/emuvim/examples/simple_topology_restapi.py
deleted file mode 100755
index eabec44..0000000
--- a/src/emuvim/examples/simple_topology_restapi.py
+++ /dev/null
@@ -1,129 +0,0 @@
-"""
-Copyright (c) 2015 SONATA-NFV
-ALL RIGHTS RESERVED.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-Neither the name of the SONATA-NFV [, ANY ADDITIONAL AFFILIATION]
-nor the names of its contributors may be used to endorse or promote
-products derived from this software without specific prior written
-permission.
-
-This work has been performed in the framework of the SONATA project,
-funded by the European Commission under Grant number 671517 through
-the Horizon 2020 and 5G-PPP programmes. The authors would like to
-acknowledge the contributions of their colleagues of the SONATA
-partner consortium (www.sonata-nfv.eu).
-"""
-import logging
-from mininet.log import setLogLevel
-from emuvim.dcemulator.net import DCNetwork
-from emuvim.api.rest.rest_api_endpoint import RestApiEndpoint
-
-from emuvim.api.zerorpc.compute import ZeroRpcApiEndpoint
-from emuvim.api.zerorpc.network import ZeroRpcApiEndpointDCNetwork
-
-logging.basicConfig(level=logging.INFO)
-
-
-def create_topology1():
-    """
-    1. Create a data center network object (DCNetwork)
-    """
-    net = DCNetwork(monitor=True, enable_learning=True)
-
-    """
-    1b. add a monitoring agent to the DCNetwork
-    """
-    #keep old zeroRPC interface to test the prometheus metric query
-    mon_api = ZeroRpcApiEndpointDCNetwork("0.0.0.0", 5151)
-    mon_api.connectDCNetwork(net)
-    mon_api.start()
-    """
-    2. Add (logical) data centers to the topology
-       (each data center is one "bigswitch" in our simplified
-        first prototype)
-    """
-    dc1 = net.addDatacenter("datacenter1")
-    dc2 = net.addDatacenter("datacenter2")
-    dc3 = net.addDatacenter("long_data_center_name3")
-    dc4 = net.addDatacenter(
-        "datacenter4",
-        metadata={"mydata": "we can also add arbitrary metadata to each DC"})
-
-    """
-    3. You can add additional SDN switches for data center
-       interconnections to the network.
-    """
-    s1 = net.addSwitch("s1")
-
-    """
-    4. Add links between your data centers and additional switches
-       to define you topology.
-       These links can use Mininet's features to limit bw, add delay or jitter.
-    """
-    net.addLink(dc1, dc2)
-    net.addLink("datacenter1", s1)
-    net.addLink(s1, dc3)
-    net.addLink(s1, "datacenter4")
-
-    """
-    5. We want to access and control our data centers from the outside,
-       e.g., we want to connect an orchestrator to start/stop compute
-       resources aka. VNFs (represented by Docker containers in the emulated)
-
-       So we need to instantiate API endpoints (e.g. a zerorpc or REST
-       interface). Depending on the endpoint implementations, we can connect
-       one or more data centers to it, which can then be controlled through
-       this API, e.g., start/stop/list compute instances.
-    """
-    # keep the old zeroRPC interface for the prometheus metric query test
-    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()
-
-    # create a new instance of a endpoint implementation
-    api1 = RestApiEndpoint("127.0.0.1", 5001)
-    # connect data centers to this endpoint
-    api1.connectDatacenter(dc1)
-    api1.connectDatacenter(dc2)
-    api1.connectDatacenter(dc3)
-    api1.connectDatacenter(dc4)
-    # connect total network also, needed to do the chaining and monitoring
-    api1.connectDCNetwork(net)
-    # run API endpoint server (in another thread, don't block)
-    api1.start()
-
-    """
-    6. Finally we are done and can start our network (the emulator).
-       We can also enter the Mininet CLI to interactively interact
-       with our compute resources (just like in default Mininet).
-       But we can also implement fully automated experiments that
-       can be executed again and again.
-    """
-    net.start()
-    net.CLI()
-    # when the user types exit in the CLI, we stop the emulator
-    net.stop()
-
-
-def main():
-    setLogLevel('info')  # set Mininet loglevel
-    create_topology1()
-
-
-if __name__ == '__main__':
-    main()
diff --git a/src/emuvim/examples/sonata_y1_demo_topology_1.py b/src/emuvim/examples/sonata_y1_demo_topology_1.py
index 4098855..a21fef8 100755
--- a/src/emuvim/examples/sonata_y1_demo_topology_1.py
+++ b/src/emuvim/examples/sonata_y1_demo_topology_1.py
@@ -68,6 +68,7 @@
     # start the emulation platform
     net.start()
     net.CLI()
+    rapi1.stop()
     net.stop()
 
 
diff --git a/src/emuvim/test/api_base.py b/src/emuvim/test/api_base.py
index 3464f45..0d994ca 100755
--- a/src/emuvim/test/api_base.py
+++ b/src/emuvim/test/api_base.py
@@ -97,6 +97,9 @@
     def startApi(self):
         self.api.start()
 
+    def stopApi(self):
+        self.api.stop()
+        
     def startNet(self):
         self.net.start()
 
@@ -131,4 +134,4 @@
                 "sudo docker rm -f $(sudo docker ps --filter 'label=com.containernet' -a -q)",
                 stdout=devnull,
                 stderr=devnull,
-                shell=True)
\ No newline at end of file
+                shell=True)
diff --git a/src/emuvim/test/unittests/test_restapi.py b/src/emuvim/test/unittests/test_restapi.py
index 268b12b..5bc071a 100755
--- a/src/emuvim/test/unittests/test_restapi.py
+++ b/src/emuvim/test/unittests/test_restapi.py
@@ -141,7 +141,7 @@
         output = subprocess.check_output("son-emu-cli datacenter status -d datacenter0", shell=True)
         # check datacenter status result
         self.assertTrue("datacenter0" in output)
-
+        self.stopApi()
         self.stopNet()
 
 
