diff --git a/emuvim/api/zerorpcapi.py b/emuvim/api/zerorpcapi.py
index 28519c6..ecf822c 100644
--- a/emuvim/api/zerorpcapi.py
+++ b/emuvim/api/zerorpcapi.py
@@ -76,8 +76,17 @@
     def compute_list(self, dc_name):
         logging.info("RPC CALL: compute list")
         try:
-            return [(c.name, c.IP())
-                    for c in self.dcs.get(dc_name).listCompute()]
+            if dc_name is None:
+                # return list with all compute nodes in all DCs
+                all_containers = []
+                for dc in self.dcs.itervalues():
+                    all_containers += dc.listCompute()
+                return [(c.name, c.getStatus())
+                        for c in all_containers]
+            else:
+                # return list of compute nodes for specified DC
+                return [(c.name, c.getStatus())
+                        for c in self.dcs.get(dc_name).listCompute()]
         except Exception as ex:
             logging.exception("RPC error.")
             return ex.message
diff --git a/emuvim/cli/compute.py b/emuvim/cli/compute.py
index b75b043..c5f2231 100644
--- a/emuvim/cli/compute.py
+++ b/emuvim/cli/compute.py
@@ -1,9 +1,11 @@
 """
 son-emu compute CLI
+(c) 2016 by Manuel Peuster <manuel.peuster@upb.de>
 """
 
 import argparse
 import pprint
+from tabulate import tabulate
 import zerorpc
 
 
@@ -14,7 +16,7 @@
 
     def __init__(self):
         self.c = zerorpc.Client()
-        self.c.connect("tcp://127.0.0.1:4242")  # yes, hard coded for now. we'll change this later
+        self.c.connect("tcp://127.0.0.1:4242")  # TODO hard coded for now. we'll change this later
         self.cmds = {}
 
     def execute_command(self, args):
@@ -35,10 +37,38 @@
         pp.pprint(r)
 
     def list(self, args):
-        print "TODO: Not implemented"
+        r = self.c.compute_list(
+            args.get("datacenter"))
+        table = []
+        for c in r:
+            # for each container add a line to the output table
+            if len(c) > 1:
+                name = c[0]
+                status = c[1]
+                eth0ip = None
+                eth0status = "down"
+                if len(status.get("network")) > 0:
+                    eth0ip = status.get("network")[0][1]
+                    eth0status = "up" if status.get(
+                        "network")[0][3] else "down"
+                table.append([status.get("datacenter"),
+                              name,
+                              status.get("image"),
+                              eth0ip,
+                              eth0status,
+                              status.get("state").get("Status")])
+        headers = ["Datacenter",
+                   "Container",
+                   "Image",
+                   "eth0 IP",
+                   "eth0 status",
+                   "Status"]
+        print tabulate(table, headers=headers, tablefmt="grid")
 
     def status(self, args):
-        print "TODO: Not implemented"
+        r = self.c.compute_status(
+            args.get("datacenter"), args.get("name"))
+        pp.pprint(r)
 
 
 parser = argparse.ArgumentParser(description='son-emu compute')
diff --git a/emuvim/cli/network.py b/emuvim/cli/network.py
index 0c50dda..080b0ac 100644
--- a/emuvim/cli/network.py
+++ b/emuvim/cli/network.py
@@ -1,5 +1,6 @@
 """
 son-emu network CLI
+(c) 2016 by Manuel Peuster <manuel.peuster@upb.de>
 """
 
 
diff --git a/emuvim/cli/son-emu-cli b/emuvim/cli/son-emu-cli
index 57ae053..56fe58b 100755
--- a/emuvim/cli/son-emu-cli
+++ b/emuvim/cli/son-emu-cli
@@ -2,6 +2,8 @@
 """
  Simple CLI client to interact with a running emulator.
 
+ (c) 2016 by Manuel Peuster <manuel.peuster@upb.de>
+
  The CLI offers different tools, e.g., compute, network, ...
  Each of these tools is implemented as an independent Python
  module.
diff --git a/emuvim/dcemulator/node.py b/emuvim/dcemulator/node.py
index 87a5a6e..def1e2d 100644
--- a/emuvim/dcemulator/node.py
+++ b/emuvim/dcemulator/node.py
@@ -21,6 +21,7 @@
     def __init__(
             self, name, dimage, **kwargs):
         logging.debug("Create EmulatorCompute instance: %s" % name)
+        self.datacenter = None  # pointer to current DC
 
         # call original Docker.__init__
         Docker.__init__(self, name, dimage, **kwargs)
@@ -50,6 +51,8 @@
         status["memswap_limit"] = self.memswap_limit
         status["state"] = self.dcli.inspect_container(self.dc)["State"]
         status["id"] = self.dcli.inspect_container(self.dc)["Id"]
+        status["datacenter"] = (None if self.datacenter is None
+                                else self.datacenter.name)
         return status
 
 
@@ -104,7 +107,9 @@
         # create the container and connect it to the given network
         d = self.net.addDocker("%s" % (name), dimage=image)
         self.net.addLink(d, self.switch, params1=network)
+        # do bookkeeping
         self.containers[name] = d
+        d.datacenter = self
         return name  # we might use UUIDs for naming later on
 
     def stopCompute(self, name):
