diff --git a/appinfo/info.xml b/appinfo/info.xml
index 8177160..6e4aa44 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -16,6 +16,6 @@
pgsql
sqlite
mysql
-
+
\ No newline at end of file
diff --git a/lib/Model/Organization.php b/lib/Model/Organization.php
new file mode 100644
index 0000000..56729eb
--- /dev/null
+++ b/lib/Model/Organization.php
@@ -0,0 +1,19 @@
+id;
+ }
+
+ public function getMembersGroup(): string {
+ return $this->membersGroup;
+ }
+}
\ No newline at end of file
diff --git a/lib/Model/OrganizationRole.php b/lib/Model/OrganizationRole.php
new file mode 100644
index 0000000..3358bfb
--- /dev/null
+++ b/lib/Model/OrganizationRole.php
@@ -0,0 +1,29 @@
+id;
+ }
+
+ public function getOrganizationId(): int {
+ return $this->organizationId;
+ }
+
+ public function getFriendlyName(): string {
+ return $this->friendlyName;
+ }
+
+ public function getMembersGroup(): string {
+ return $this->membersGroup;
+ }
+}
\ No newline at end of file
diff --git a/lib/OrganisationProvider/OrganisationProvider.php b/lib/OrganisationProvider/OrganisationProvider.php
deleted file mode 100644
index f94726e..0000000
--- a/lib/OrganisationProvider/OrganisationProvider.php
+++ /dev/null
@@ -1,15 +0,0 @@
-id;
- }
-
- // TODO: functions to access organisation structure
-}
\ No newline at end of file
diff --git a/lib/OrganisationProvider/OrganizationProvider.php b/lib/OrganisationProvider/OrganizationProvider.php
new file mode 100644
index 0000000..9266a84
--- /dev/null
+++ b/lib/OrganisationProvider/OrganizationProvider.php
@@ -0,0 +1,72 @@
+id;
+ }
+
+ /**
+ * Get specific role by its id (unique within OrganizationProvider)
+ * @return Organization
+ */
+ abstract public function getOrganization(int $id): Organization;
+
+ /**
+ * Return one level of the Organization Tree
+ *
+ * ┌────────────────────────────┐
+ * │ Root Node │
+ * │ (of Organization Provider) │
+ * └──┬──────────────────────┬──┘
+ * │ │
+ * │ │
+ * ┌── ── ── │── ── ── ── ── ── ── ─│─ ── ── ─┐
+ * │ │
+ * │ ▼ ▼ │
+ * ┌──────────────┐ ┌──────────────┐
+ * │ │ │ │ │ │
+ * │Organization 1│ │Organization 2│ ◄── ── ── getSubOrganizations();
+ * │ │ │ │ │ │
+ * └┬────────────┬┘ └┬────────────┬┘
+ * │ │ │ │ │ │
+ * │ │ │ │
+ * └── ├─ ── ── ── ─┤ ── ── ─┼ ── ── ── ──│── ┘
+ * │ │ │ │
+ * ▼ ▼ │ │
+ * ... ... ▼ ▼
+ * ┌── ── ── ── ── ── ── ── ── ── ─┐
+ * ┌────────────┐ ┌────────────┐
+ * │ │ │ │ │ │
+ * │ Suborg. 21 │ │ Suborg. 22 │ ◄── ── ── getSubOrganizations(2);
+ * │ │ │ │ │ │
+ * └────────────┘ └────────────┘
+ * └── ── ── ── ── ── ── ── ── ── ─┘
+ *
+ * @return Organization[]
+ */
+ abstract public function getSubOrganizations(?int $parentOrganizationId): array;
+
+ /**
+ * Get specific role by its id (unique within OrganizationProvider)
+ *
+ * @return OrganizationRole
+ */
+ abstract public function getRole(int $id): OrganizationRole;
+
+ /**
+ * Get all roles of a specific organization
+ *
+ * @return OrganizationRole[]
+ */
+ abstract public function getRolesOfOrganization(int $organizationId): array;
+
+}
\ No newline at end of file
diff --git a/lib/OrganisationProvider/OrganisationProviderManager.php b/lib/OrganisationProvider/OrganizationProviderManager.php
similarity index 100%
rename from lib/OrganisationProvider/OrganisationProviderManager.php
rename to lib/OrganisationProvider/OrganizationProviderManager.php