diff --git a/access_node/controllers/arbor_controller.py b/access_node/controllers/arbor_controller.py
index a3a488c5eafe5952ee2512cdc5a4ac9b4916655c..aa3fe5b4a91017e01b9f0805f6a6fa2b6dea002e 100644
--- a/access_node/controllers/arbor_controller.py
+++ b/access_node/controllers/arbor_controller.py
@@ -10,6 +10,14 @@ from access_node import util
 
 from access_node.models.nodes import nodes
 import requests
+import psycopg2
+import numpy as np
+
+
+def connect_to_database():
+    return psycopg2.connect(database="postgres", user="postgres",
+                       password="docker", host="database", port="5432")
+
 
 def arbor_get_attributes():  # noqa: E501
     """Retrieves the list of all attributes.
@@ -19,7 +27,14 @@ def arbor_get_attributes():  # noqa: E501
 
     :rtype: List[str]
     """
-    return 'do some magic!'
+    con = connect_to_database()
+    cur = con.cursor()
+
+    cur.execute("SELECT NAME FROM ATTRIBUTES")
+    attributes = [i[0] for i in cur.fetchall()]
+
+    con.close()
+    return attributes
 
 
 def arbor_get_cell_ids():  # noqa: E501
@@ -30,7 +45,13 @@ def arbor_get_cell_ids():  # noqa: E501
 
     :rtype: List[int]
     """
-    cell_ids = requests.get(nodes.info_node+'/arbor/cell_ids').json()
+    con = connect_to_database()
+    cur = con.cursor()
+
+    cur.execute("SELECT CELL_ID FROM CELLS")
+    cell_ids = [i[0] for i in cur.fetchall()]
+
+    con.close()
     return cell_ids
 
 
@@ -44,7 +65,25 @@ def arbor_get_cell_properties(cell_ids=None):  # noqa: E501
 
     :rtype: List[ArborCellProperties]
     """
-    cell_properties = requests.get(nodes.info_node+'/arbor/cell_properties').json()
+    con = connect_to_database()
+    cur = con.cursor()
+
+    if cell_ids == None:
+        cur.execute("SELECT CELL_ID, PROPERTY FROM CELL_PROPERTIES")
+    else: 
+        cur.execute("SELECT CELL_ID, PROPERTY FROM CELL_PROPERTIES WHERE CELL_PROPERTIES.CELL_ID IN %s", (tuple(cell_ids),))
+
+    properties = np.array(cur.fetchall())
+    cell_ids = np.unique(properties[:,0])
+    cell_properties = []
+    for i in range(len(cell_ids)):
+        per_cell_properties = []
+        for prop in properties:
+            if prop[0] == cell_ids[i]:
+                per_cell_properties.append(prop)
+        cell_properties.append(ArborCellProperties(cell_ids[i], per_cell_properties))
+
+    con.close()
     return cell_properties
 
 
@@ -68,26 +107,26 @@ def arbor_get_measurements(attribute, probe_ids=None, _from=None, to=None, offse
 
     :rtype: ArborMeasurement
     """
-    if measurement_point_ids == None:
-        measurement_points = arbor_get_measurement_points()
-        measurement_point_ids = []
-        for point in measurement_points:
-               measurement_point_ids.append(point.id)
+    if probe_ids == None:
+        probes = arbor_get_probes()
+        probe_ids = []
+        for probe in probes:
+               probe_ids.append(probe.id)
 
     init = True
     sim_times = []
     measurement = ArborMeasurement([], [], [])
     for node in nodes.arbor_simulation_nodes:
         response = requests.get(
-            'http://'+node+'/arbor/measurements', params={"attribute": attribute, "measurement_point_ids": measurement_point_ids, "_from": _from, "to": to, "gids": gids}).json()
+            'http://'+node+'/arbor/measurements', params={"attribute": attribute, "probe_ids": probe_ids, "_from": _from, "to": to}).json()
         if init:
             sim_times = response['simulation_times']
             measurement = ArborMeasurement(
-                sim_times, measurement_point_ids, [None for x in range(0, (len(sim_times)*len(measurement_point_ids)))])
+                sim_times, probe_ids, [None for x in range(0, (len(sim_times)*len(probe_ids)))])
             init = False
-        for x in range(len(response['measurement_point_ids'])):
-            m_id = response['measurement_point_ids'][x]
-            index = measurement.measurement_point_ids.index(m_id)
+        for x in range(len(response['probe_ids'])):
+            m_id = response['probe_ids'][x]
+            index = measurement.probe_ids.index(m_id)
             index_offset = index * len(sim_times)
             for y in range(len(sim_times)):
                 measurement.values[index_offset +
@@ -96,9 +135,9 @@ def arbor_get_measurements(attribute, probe_ids=None, _from=None, to=None, offse
     # offset and limit
     if (offset is None):
         offset = 0
-    if (limit is None or (limit + offset) > len(measurement.measurement_point_ids)):
-        limit = len(measurement.measurement_point_ids) - offset
-    measurement.measurement_point_ids = measurement.measurement_point_ids[offset:offset+limit]
+    if (limit is None or (limit + offset) > len(measurement.probe_ids)):
+        limit = len(measurement.probe_ids) - offset
+    measurement.probe_ids = measurement.probe_ids[offset:offset+limit]
     measurement.values = measurement.values[offset *
                                             len(sim_times):(offset+limit)*len(sim_times)]
 
@@ -115,8 +154,18 @@ def arbor_get_probes(attribute=None):  # noqa: E501
 
     :rtype: List[Probe]
     """
-    probes = requests.get(nodes.info_node+'/arbor/probes').json()
-    return probes
+    con = connect_to_database()
+    cur = con.cursor()
+
+    # TODO Multiple Attributes per Probe possible? -  Complete this
+
+    if attribute == None:
+         cur.execute("SELECT PROBE_ID, CELL_ID, SEGMENT_ID, POSITION FROM PROBES")
+
+
+
+    con.close()
+    return 
 
 
 def arbor_get_simulation_time_info():  # noqa: E501
@@ -127,8 +176,17 @@ def arbor_get_simulation_time_info():  # noqa: E501
 
     :rtype: SimulationTimeInfo
     """
-    simulation_time_info = requests.get(nodes.info_node+'/arbor/simulation_time_info').json()
-    return simulation_time_info
+    con = connect_to_database()
+    cur = con.cursor()
+
+    cur.execute("SELECT MIN(CURRENT_SIM_TIME) FROM ARBOR_SIMULATION_NODES")
+    current_time = cur.fetchall()[0][0]
+
+    con.close()
+
+    # TODO Add Start and End time when available
+    time_info = SimulationTimeInfo(current=current_time)
+    return time_info
 
 
 def arbor_get_spikes(_from=None, to=None, cell_ids=None, segment_ids=None, offset=None, limit=None):  # noqa: E501
@@ -154,7 +212,7 @@ def arbor_get_spikes(_from=None, to=None, cell_ids=None, segment_ids=None, offse
     spikes = Spikes([], [])
     for node in nodes.arbor_simulation_nodes:
         response = requests.get(
-            'http://'+node+'/arbor/spikes', params={"from": _from, "to": to, "gids": gids}).json()
+            'http://'+node+'/arbor/spikes', params={"from": _from, "to": to, "cell_ids": cell_ids, "segment_ids": segment_ids}).json()
         for x in range(len(response['simulation_times'])):
             spikes.simulation_times.append(response['simulation_times'][x])
             spikes.gids.append(response['gids'][x])