diff --git a/docker-compose.yml b/docker-compose.yml
index 15c6a627cd65a98f5a3eb7bf51a2258c09655af4..239166099b752302ebe063d0055a5500fbcb0d09 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -8,6 +8,11 @@ services:
       - "7687:7687"
     volumes:
       - ./neo4j/plugins:/plugins
+      - ./neo4j/entrypoint:/var/lib/neo4j/data/graph.db
+
+    # Todo: Add command to seed the database while the container is starting
+    # Important: The Files of the Volume are stored in /data/graph.db
+
     environment:
       NEO4J_AUTH: none
       NEO4J_dbms_security_procedures_unrestricted: algo.*
diff --git a/neo4j/entrypoint/entrypoint.sh b/neo4j/entrypoint/entrypoint.sh
new file mode 100755
index 0000000000000000000000000000000000000000..dc7fa141c67ffa7d0b2b545082548a27330511b6
--- /dev/null
+++ b/neo4j/entrypoint/entrypoint.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+
+echo "Start waiting for Database to be ready ..."
+
+end="$((SECONDS+60))"
+while true; do
+    nc -w 2 localhost 7687 && break
+    [[ "${SECONDS}" -ge "${end}" ]] && exit 1
+    sleep 1
+done
+cypher-shell --fail-fast --debug --format verbose < /data/graph.db/neo4j-entrypoint.cql
diff --git a/neo4j/entrypoint/neo4j-entrypoint.cql b/neo4j/entrypoint/neo4j-entrypoint.cql
new file mode 100755
index 0000000000000000000000000000000000000000..05bea71a8b95f0c32849a7e216fcbf75028a6ef4
--- /dev/null
+++ b/neo4j/entrypoint/neo4j-entrypoint.cql
@@ -0,0 +1,42 @@
+:param db_skeleton => "SELECT arguments.uid as argument, arguments.is_supportive as support, arguments.conclusion_uid as conclusion_statement, arguments.argument_uid as conclusion_argument, premises.statement_uid as premise, arguments.issue_uid as issue, statements.is_position FROM arguments JOIN premises ON arguments.premisegroup_uid = premises.premisegroup_uid LEFT JOIN statements ON statements.uid = arguments.conclusion_uid";
+:param db_uri => "jdbc:postgresql://db/discussion?user=postgres&password=FooBar";
+
+CREATE INDEX ON :Statement(id);
+CREATE INDEX ON :Argument(id);
+CREATE INDEX ON :Issue(id);
+
+CALL apoc.load.jdbc($db_uri, $db_skeleton)
+YIELD row
+WITH DISTINCT row["issue"] AS issues, row
+MERGE (:Issue{id:issues})
+MERGE (:Argument{id: row["argument"], support: row["support"]})
+MERGE (:Statement{id: row["premise"]})
+WITH row
+WHERE exists(row["is_position"]) and row["is_position"]
+MERGE (:Statement:Position{id: row["conclusion_statement"]})
+WITH row
+WHERE exists(row["conclusion_statement"]) and (not exists(row["is_position"]) or not row["is_position"])
+MERGE (:Statement{id: row["conclusion_statement"]});
+
+CALL apoc.load.jdbc($db_uri, $db_skeleton)
+YIELD row
+MATCH (sp:Statement:Position{id: row["conclusion_statement"]}), (i:Issue{id: row["issue"]})
+WHERE exists(row["is_position"]) and row["is_position"]
+MERGE (sp)-[:REGARDING]->(i);
+
+CALL apoc.load.jdbc($db_uri, $db_skeleton)
+YIELD row
+MATCH (s:Statement{id: row.premise}), (a:Argument{id: row.argument})
+MERGE (s)-[:PREMISE_OF]->(a);
+
+CALL apoc.load.jdbc($db_uri, $db_skeleton)
+YIELD row
+MATCH (a:Argument{id: row.argument}), (c:Statement{id: row.conclusion_statement})
+WHERE EXISTS(row.conclusion_statement)
+MERGE (a)-[:CONCLUDES]->(c);
+
+CALL apoc.load.jdbc($db_uri, $db_skeleton)
+YIELD row
+MATCH (a:Argument{id: row.argument}), (c:Argument{id: row.conclusion_argument})
+WHERE NOT EXISTS(row.conclusion_statement)
+MERGE (a)-[:CONCLUDES]->(c);
\ No newline at end of file