diff --git a/src/main/resources/database/mysql/alter_9_4_0_to_10_0_0.sql b/src/main/resources/database/mysql/alter_9_4_0_to_10_0_0.sql
new file mode 100644
index 0000000000000000000000000000000000000000..463235b6ff08ae6da3896b6c4e157ffcb30eba89
--- /dev/null
+++ b/src/main/resources/database/mysql/alter_9_4_0_to_10_0_0.sql
@@ -0,0 +1,374 @@
+alter table o_gp_business add column fk_group_id bigint;
+alter table o_gp_business modify businessgrouptype varchar(15) null default null;
+
+alter table o_repositoryentry modify softkey varchar(36) not null unique;
+alter table o_repositoryentry modify launchcounter bigint null default 0;
+alter table o_repositoryentry modify downloadcounter bigint null default 0;
+
+alter table o_ep_struct_el add column fk_group_id bigint;
+
+
+-- repository entry statistics table
+create table o_repositoryentry_stats (
+   id bigint not null,
+   creationdate datetime not null,
+   lastmodified datetime not null,
+   r_rating decimal(65,30),
+   r_num_of_ratings bigint not null default 0,
+   r_num_of_comments bigint not null default 0,
+   r_launchcounter bigint not null default 0,
+   r_downloadcounter bigint not null default 0,
+   r_lastusage datetime not null,
+   primary key (id)
+);
+
+alter table o_repositoryentry add column fk_stats bigint;
+alter table o_repositoryentry add column authors varchar(2048);
+
+insert into o_repositoryentry_stats (id, creationdate, lastmodified, r_rating, r_launchcounter, r_downloadcounter, r_lastusage)
+  select re.repositoryentry_id, now(), now(), null, re.launchcounter, re.downloadcounter, re.lastusage from o_repositoryentry as re where re.fk_stats is null;
+update o_repositoryentry set fk_stats=repositoryentry_id where fk_stats is null;
+
+alter table o_repositoryentry modify fk_stats bigint not null;
+alter table o_repositoryentry add constraint repoentry_stats_ctx foreign key (fk_stats) references o_repositoryentry_stats (id);
+
+-- base group
+create table o_bs_group (
+   id bigint not null,
+   creationdate datetime not null,
+   g_name varchar(36),
+   primary key (id)
+);
+
+create table o_bs_group_member (
+   id bigint not null,
+   creationdate datetime not null,
+   lastmodified datetime not null,
+   g_role varchar(50) not null,
+   fk_group_id bigint not null,
+   fk_identity_id bigint not null,
+   primary key (id)
+);
+
+create table o_re_to_group (
+   id bigint not null,
+   creationdate datetime not null,
+   r_defgroup boolean not null,
+   fk_group_id bigint not null,
+   fk_entry_id bigint not null,
+   primary key (id)
+);
+
+create table o_bs_grant (
+   id bigint not null,
+   creationdate datetime not null,
+   g_role varchar(32) not null,
+   g_permission varchar(32) not null,
+   fk_group_id bigint not null,
+   fk_resource_id bigint not null,
+   primary key (id)
+);
+
+alter table o_bs_group_member add constraint member_identity_ctx foreign key (fk_identity_id) references o_bs_identity (id);
+alter table o_bs_group_member add constraint member_group_ctx foreign key (fk_group_id) references o_bs_group (id);
+create index member_to_grp_role_idx on o_bs_group_member (g_role);
+
+alter table o_re_to_group add constraint re_to_group_group_ctx foreign key (fk_group_id) references o_bs_group (id);
+alter table o_re_to_group add constraint re_to_group_re_ctx foreign key (fk_entry_id) references o_repositoryentry (repositoryentry_id);
+
+alter table o_gp_business add constraint gp_to_group_business_ctx foreign key (fk_group_id) references o_bs_group (id);
+
+
+-- managed groups
+drop view o_gp_business_v;
+create or replace view o_gp_business_v  as (
+   select
+      gp.group_id as group_id,
+      gp.groupname as groupname,
+      gp.lastmodified as lastmodified,
+      gp.creationdate as creationdate,
+      gp.lastusage as lastusage,
+      gp.descr as descr,
+      gp.minparticipants as minparticipants,
+      gp.maxparticipants as maxparticipants,
+      gp.waitinglist_enabled as waitinglist_enabled,
+      gp.autocloseranks_enabled as autocloseranks_enabled,
+      gp.external_id as external_id,
+      gp.managed_flags as managed_flags,
+      (select count(part.id) from o_bs_group_member as part where part.fk_group_id = gp.fk_group_id and part.g_role='participant') as num_of_participants,
+      (select count(pending.reservation_id) from o_ac_reservation as pending where pending.fk_resource = gp.fk_resource) as num_of_pendings,
+      (select count(own.id) from o_bs_group_member as own where own.fk_group_id = gp.fk_group_id and own.g_role='coach') as num_of_owners,
+      (case when gp.waitinglist_enabled = true
+         then 
+           (select count(waiting.id) from o_bs_group_member as waiting where waiting.fk_group_id = gp.fk_group_id and waiting.g_role='waiting')
+         else
+           0
+      end) as num_waiting,
+      (select count(offer.offer_id) from o_ac_offer as offer 
+         where offer.fk_resource_id = gp.fk_resource
+         and offer.is_valid=true
+         and (offer.validfrom is null or offer.validfrom <= current_timestamp())
+         and (offer.validto is null or offer.validto >= current_timestamp())
+      ) as num_of_valid_offers,
+      (select count(offer.offer_id) from o_ac_offer as offer 
+         where offer.fk_resource_id = gp.fk_resource
+         and offer.is_valid=true
+      ) as num_of_offers,
+      (select count(relation.fk_entry_id) from o_re_to_group as relation 
+         where relation.fk_group_id = gp.fk_group_id
+      ) as num_of_relations,
+      gp.fk_resource as fk_resource,
+      gp.fk_group_id as fk_group_id
+   from o_gp_business as gp
+);
+
+drop view o_bs_gp_membership_v;
+create or replace view o_bs_gp_membership_v as (
+   select
+      membership.id as membership_id,
+      membership.fk_identity_id as fk_identity_id,
+      membership.lastmodified as lastmodified,
+      membership.creationdate as creationdate,
+      membership.g_role as g_role,
+      gp.group_id as group_id
+   from o_bs_group_member as membership
+   inner join o_gp_business as gp on (gp.fk_group_id=membership.fk_group_id)
+);
+
+drop view o_gp_member_v;
+create or replace view o_gp_member_v as (
+   select
+      gp.group_id as bg_id,
+      gp.groupname as bg_name,
+      gp.creationdate as bg_creationdate,
+      gp.managed_flags as bg_managed_flags,
+      gp.descr as bg_desc,
+      membership.fk_identity_id as member_id
+   from o_gp_business as gp
+   inner join o_bs_group_member as membership on (membership.fk_group_id = gp.fk_group_id and membership.g_role in ('coach','participant'))
+);
+
+drop view o_gp_business_to_repository_v;
+create or replace view o_gp_business_to_repository_v as (
+	select 
+		grp.group_id as grp_id,
+		repoentry.repositoryentry_id as re_id,
+		repoentry.displayname as re_displayname
+	from o_gp_business as grp
+	inner join o_re_to_group as relation on (relation.fk_group_id = grp.fk_group_id)
+	inner join o_repositoryentry as repoentry on (repoentry.repositoryentry_id = relation.fk_entry_id)
+);
+
+-- contacts
+drop view o_gp_contactkey_v;
+create view o_gp_contactkey_v as (
+   select
+      bg_member.id as membership_id,
+      bg_member.fk_identity_id as member_id,
+      bg_member.g_role as membership_role,
+      bg_me.fk_identity_id as me_id,
+      bgroup.group_id as bg_id
+   from o_gp_business as bgroup
+   inner join o_bs_group_member as bg_member on (bg_member.fk_group_id = bgroup.fk_group_id)
+   inner join o_bs_group_member as bg_me on (bg_me.fk_group_id = bgroup.fk_group_id)
+   where
+      (bgroup.ownersintern=true and bg_member.g_role='coach')
+      or
+      (bgroup.participantsintern=true and bg_member.g_role='participant')
+);
+
+drop view o_gp_contactext_v;
+create view o_gp_contactext_v as (
+   select
+      bg_member.id as membership_id,
+      bg_member.fk_identity_id as member_id,
+      bg_member.g_role as membership_role,
+      id_member.name as member_name,
+      first_member.propvalue as member_firstname,
+      last_member.propvalue as member_lastname,
+      bg_me.fk_identity_id as me_id,
+      bgroup.group_id as bg_id,
+      bgroup.group_id as bg_name
+   from o_gp_business as bgroup
+   inner join o_bs_group_member as bg_member on (bg_member.fk_group_id = bgroup.fk_group_id)
+   inner join o_bs_identity as id_member on (bg_member.fk_identity_id = id_member.id)
+   inner join o_user as us_member on (id_member.fk_user_id = us_member.user_id)
+   inner join o_userproperty as first_member on (first_member.fk_user_id = us_member.user_id and first_member.propname='firstName')
+   inner join o_userproperty as last_member on (last_member.fk_user_id = us_member.user_id and last_member.propname='lastName')
+   inner join o_bs_group_member as bg_me on (bg_me.fk_group_id = bgroup.fk_group_id)
+   where
+      (bgroup.ownersintern=true and bg_member.g_role='coach')
+      or
+      (bgroup.participantsintern=true and bg_member.g_role='participant')
+);
+
+drop view o_re_membership_v;
+create or replace view o_re_membership_v as (
+   select
+      bmember.id as membership_id,
+      bmember.creationdate as creationdate,
+      bmember.lastmodified as lastmodified,
+      bmember.fk_identity_id as fk_identity_id,
+      bmember.g_role as g_role,
+      re.repositoryentry_id as fk_entry_id
+   from o_repositoryentry as re
+   inner join o_re_to_group relgroup on (relgroup.fk_entry_id=re.repositoryentry_id)
+   inner join o_bs_group_member as bmember on (bmember.fk_group_id=relgroup.fk_group_id) 
+);
+
+-- coaching
+drop view o_as_eff_statement_students_v;
+create view o_as_eff_statement_students_v as (
+   select
+      sg_re.repositoryentry_id as re_id,
+      sg_coach.fk_identity_id as tutor_id,
+      sg_participant.fk_identity_id as student_id,
+      sg_statement.id as st_id,
+      (case when sg_statement.passed = true then 1 else 0 end) as st_passed,
+      (case when sg_statement.passed = false then 1 else 0 end) as st_failed,
+      (case when sg_statement.passed is null then 1 else 0 end) as st_not_attempted,
+      sg_statement.score as st_score,
+      pg_initial_launch.id as pg_id
+   from o_repositoryentry as sg_re
+   inner join o_re_to_group as togroup on (togroup.fk_entry_id = sg_re.repositoryentry_id)
+   inner join o_bs_group_member as sg_coach on (sg_coach.fk_group_id=togroup.fk_group_id and sg_coach.g_role='coach')
+   inner join o_bs_group_member as sg_participant on (sg_participant.fk_group_id=sg_coach.fk_group_id and sg_participant.g_role='participant')
+   left join o_as_eff_statement as sg_statement on (sg_statement.fk_identity = sg_participant.fk_identity_id and sg_statement.fk_resource_id = sg_re.fk_olatresource)
+   left join o_as_user_course_infos as pg_initial_launch on (pg_initial_launch.fk_resource_id = sg_re.fk_olatresource and pg_initial_launch.fk_identity = sg_participant.fk_identity_id)
+);
+
+drop view o_as_eff_statement_courses_v;
+create view o_as_eff_statement_courses_v as (
+   select
+      sg_re.repositoryentry_id as re_id,
+      sg_re.displayname as re_name,
+      sg_coach.fk_identity_id as tutor_id,
+      sg_participant.fk_identity_id as student_id,
+      sg_statement.id as st_id,
+      (case when sg_statement.passed = true then 1 else 0 end) as st_passed,
+      (case when sg_statement.passed = false then 1 else 0 end) as st_failed,
+      (case when sg_statement.passed is null then 1 else 0 end) as st_not_attempted,
+      sg_statement.score as st_score,
+      pg_initial_launch.id as pg_id
+   from o_repositoryentry as sg_re
+   inner join o_re_to_group as togroup on (togroup.fk_entry_id = sg_re.repositoryentry_id)
+   inner join o_bs_group_member as sg_coach on (sg_coach.fk_group_id=togroup.fk_group_id and sg_coach.g_role='coach')
+   inner join o_bs_group_member as sg_participant on (sg_participant.fk_group_id=sg_coach.fk_group_id and sg_participant.g_role='participant')
+   left join o_as_eff_statement as sg_statement on (sg_statement.fk_identity = sg_participant.fk_identity_id and sg_statement.fk_resource_id = sg_re.fk_olatresource)
+   left join o_as_user_course_infos as pg_initial_launch on (pg_initial_launch.fk_resource_id = sg_re.fk_olatresource and pg_initial_launch.fk_identity = sg_participant.fk_identity_id)
+);
+
+drop view o_as_eff_statement_groups_v;
+create view o_as_eff_statement_groups_v as (
+   select
+      sg_re.repositoryentry_id as re_id,
+      sg_re.displayname as re_name,
+      sg_bg.group_id as bg_id,
+      sg_bg.groupname as bg_name,
+      sg_coach.fk_identity_id as tutor_id,
+      sg_participant.fk_identity_id as student_id,
+      sg_statement.id as st_id,
+      (case when sg_statement.passed = true then 1 else 0 end) as st_passed,
+      (case when sg_statement.passed = false then 1 else 0 end) as st_failed,
+      (case when sg_statement.passed is null then 1 else 0 end) as st_not_attempted,
+      sg_statement.score as st_score,
+      pg_initial_launch.id as pg_id
+   from o_repositoryentry as sg_re
+   inner join o_re_to_group as togroup on (togroup.fk_entry_id = sg_re.repositoryentry_id)
+   inner join o_gp_business as sg_bg on (sg_bg.fk_group_id=togroup.fk_group_id)
+   inner join o_bs_group_member as sg_coach on (sg_coach.fk_group_id=togroup.fk_group_id and sg_coach.g_role='coach')
+   inner join o_bs_group_member as sg_participant on (sg_participant.fk_group_id=sg_coach.fk_group_id and sg_participant.g_role='participant')
+   left join o_as_eff_statement as sg_statement on (sg_statement.fk_identity = sg_participant.fk_identity_id and sg_statement.fk_resource_id = sg_re.fk_olatresource)
+   left join o_as_user_course_infos as pg_initial_launch on (pg_initial_launch.fk_resource_id = sg_re.fk_olatresource and pg_initial_launch.fk_identity = sg_participant.fk_identity_id)
+);
+
+-- new views
+drop view o_repositoryentry_my_v;
+create view o_repositoryentry_my_v as (
+   select
+      re.repositoryentry_id as re_id,
+      re.creationdate as re_creationdate,
+      re.lastmodified as re_lastmodified,
+      re.displayname as re_displayname,
+      re.description as re_description,
+      re.authors as re_authors,
+      re.accesscode as re_accesscode,
+      re.membersonly as re_membersonly,
+      re.statuscode as re_statuscode,
+      re.fk_lifecycle as fk_lifecycle,
+      re.fk_olatresource as fk_olatresource,
+      courseinfos.initiallaunchdate as ci_initiallaunchdate,
+      courseinfos.recentlaunchdate as ci_recentlaunchdate,
+      courseinfos.visit as ci_visit,
+      courseinfos.timespend as ci_timespend,
+      effstatement.score as eff_score,
+      effstatement.passed as eff_passed,
+      mark.mark_id as mark_id,
+      rating.rating as rat_rating,
+      stats.r_rating as stats_rating,
+      stats.r_num_of_ratings as stats_num_of_ratings,
+      stats.r_num_of_comments as stats_num_of_comments,
+      ident.id as member_id,
+      (select count(offer.offer_id) from o_ac_offer as offer 
+         where offer.fk_resource_id = re.fk_olatresource
+         and offer.is_valid=true
+         and (offer.validfrom is null or offer.validfrom <= current_timestamp())
+         and (offer.validto is null or offer.validto >= current_timestamp())
+      ) as num_of_valid_offers,
+      (select count(offer.offer_id) from o_ac_offer as offer 
+         where offer.fk_resource_id = re.fk_olatresource
+         and offer.is_valid=true
+      ) as num_of_offers
+   from o_repositoryentry as re
+   cross join o_bs_identity as ident
+   inner join o_repositoryentry_stats as stats on (re.fk_stats=stats.id)
+   left join o_mark as mark on (mark.creator_id=ident.id and re.repositoryentry_id=mark.resid and mark.resname='RepositoryEntry')
+   left join o_as_eff_statement as effstatement on (effstatement.fk_identity=ident.id and effstatement.fk_resource_id = re.fk_olatresource)
+   left join o_userrating as rating on (rating.creator_id=ident.id and re.repositoryentry_id=rating.resid and rating.resname='RepositoryEntry')
+   left join o_as_user_course_infos as courseinfos on (courseinfos.fk_identity=ident.id and re.fk_olatresource=courseinfos.fk_resource_id)
+);
+
+
+-- drop views
+drop view o_gp_visible_participant_v;
+drop view o_gp_contact_participant_v;
+drop view o_gp_visible_owner_v;
+drop view o_gp_contact_owner_v;
+drop view o_gp_contactkey_participant_v; 
+drop view o_gp_contactkey_owner_v;
+
+drop view o_re_tutor_v;
+drop view o_re_participant_v;
+
+drop view o_gp_contextresource_2_group_v;
+
+drop view o_as_eff_statement_grouped_v;
+drop view o_as_eff_statement_members_v;
+drop view o_as_eff_statement_members_strict_v;
+
+-- drop constraints and index
+alter table o_gp_business drop foreign key FKCEEB8A86DF6BCD14;
+alter table o_gp_business drop foreign key FKCEEB8A86A1FAC766;
+alter table o_gp_business drop foreign key FKCEEB8A86C06E3EF3;
+alter table o_gp_business drop foreign key idx_bgp_rsrc;
+alter table o_gp_business drop foreign key idx_bgp_waiting;
+
+alter table o_repositoryentry drop foreign key FK2F9C439888C31018;
+alter table o_repositoryentry drop foreign key FK2F9C4398A1FAC766;
+alter table o_repositoryentry drop foreign key repo_tutor_sec_group_ctx;
+alter table o_repositoryentry drop foreign key repo_parti_sec_group_ctx;
+
+alter table o_repositorymetadata drop foreign key FKDB97A6493F14E3EE;
+
+alter table o_bookmark drop foreign key FK68C4E30663219E27;
+
+alter table o_gp_business_to_resource drop foreign key idx_bgp_to_rsrc_rsrc;
+alter table o_gp_business_to_resource drop foreign key idx_bgp_to_rsrc_group;
+
+alter table o_gp_bgcontext drop foreign key FK1C154FC47E4A0638;
+alter table o_gp_bgcontextresource_rel drop foreign key FK9903BEAC9F9C3F1D;
+alter table o_gp_bgcontextresource_rel drop foreign key FK9903BEACDF6BCD14;
+
+alter table o_gp_bgarea drop foreign key FK9EFAF698DF6BCD14;
+
+alter table o_ep_struct_el drop foreign key FKF26C8375236F29X;
\ No newline at end of file
diff --git a/src/main/resources/database/mysql/setupDatabase.sql b/src/main/resources/database/mysql/setupDatabase.sql
index f98478c3e0c257e9b0cedf2d71804cc9e8d9f73b..c82dbfbcc10b97f73c102d4ad9896fc9a38306a1 100644
--- a/src/main/resources/database/mysql/setupDatabase.sql
+++ b/src/main/resources/database/mysql/setupDatabase.sql
@@ -29,13 +29,40 @@ create table if not exists o_bs_secgroup (
    creationdate datetime,
    primary key (id)
 );
+
+create table o_bs_group (
+   id bigint not null,
+   creationdate datetime not null,
+   g_name varchar(36),
+   primary key (id)
+);
+
+create table o_bs_group_member (
+   id bigint not null,
+   creationdate datetime not null,
+   lastmodified datetime not null,
+   g_role varchar(50) not null,
+   fk_group_id bigint not null,
+   fk_identity_id bigint not null,
+   primary key (id)
+);
+
+create table o_bs_grant (
+   id bigint not null,
+   creationdate datetime not null,
+   g_role varchar(32) not null,
+   g_permission varchar(32) not null,
+   fk_group_id bigint not null,
+   fk_resource_id bigint not null,
+   primary key (id)
+);
+
 create table if not exists o_gp_business (
    group_id bigint not null,
    version mediumint unsigned not null,
    lastmodified datetime,
    creationdate datetime,
    lastusage datetime,
-   businessgrouptype varchar(15) not null,
    groupname varchar(255),
    external_id varchar(64),
    managed_flags varchar(255),
@@ -51,21 +78,10 @@ create table if not exists o_gp_business (
    participantspublic bit not null default 0,
    waitingpublic bit not null default 0,
    downloadmembers bit not null default 0,
-   groupcontext_fk bigint,
    fk_resource bigint unique,
-   fk_ownergroup bigint unique,
-   fk_partipiciantgroup bigint unique,
-   fk_waitinggroup bigint unique,
+   fk_group_id bigint unique,
    primary key (group_id)
 );
-create table if not exists o_gp_business_to_resource (
-   g_id bigint not null,
-   version mediumint unsigned not null,
-   creationdate datetime,
-   fk_resource bigint not null,
-   fk_group bigint not null,
-   primary key (g_id)
-);
 create table if not exists o_temporarykey (
    reglist_id bigint not null,
    version mediumint unsigned not null,
@@ -175,17 +191,6 @@ create table if not exists o_note (
    notetext longtext,
    primary key (note_id)
 );
-create table if not exists o_gp_bgcontext (
-   groupcontext_id bigint not null,
-   version mediumint unsigned not null,
-   creationdate datetime,
-   name varchar(255) not null,
-   descr longtext,
-   grouptype varchar(15) not null,
-   ownergroup_fk bigint unique,
-   defaultcontext bit not null,
-   primary key (groupcontext_id)
-);
 create table if not exists o_references (
    reference_id bigint not null,
    version mediumint unsigned not null,
@@ -195,15 +200,6 @@ create table if not exists o_references (
    userdata varchar(64),
    primary key (reference_id)
 );
-create table if not exists o_repositorymetadata (
-   metadataelement_id bigint not null,
-   version mediumint unsigned not null,
-   creationdate datetime,
-   name varchar(255) not null,
-   value longtext not null,
-   fk_repositoryentry bigint not null,
-   primary key (fk_repositoryentry, metadataelement_id)
-);
 create table if not exists o_user (
    user_id bigint not null,
    version mediumint unsigned not null,
@@ -222,14 +218,6 @@ create table if not exists o_userproperty (
    propvalue varchar(255),
    primary key (fk_user_id, propname)
 );
-create table if not exists o_gp_bgcontextresource_rel (
-   groupcontextresource_id bigint not null,
-   version mediumint unsigned not null,
-   creationdate datetime,
-   oresource_id bigint not null,
-   groupcontext_fk bigint not null,
-   primary key (groupcontextresource_id)
-);
 create table if not exists o_message (
    message_id bigint not null,
    version mediumint unsigned not null,
@@ -299,7 +287,6 @@ create table if not exists o_gp_bgarea (
    creationdate datetime,
    name varchar(255) not null,
    descr longtext,
-   groupcontext_fk bigint,
    fk_resource bigint default null,
    primary key (area_id)
 );
@@ -308,18 +295,16 @@ create table if not exists o_repositoryentry (
    version mediumint unsigned not null,
    lastmodified datetime,
    creationdate datetime,
-   lastusage datetime,
    softkey varchar(30) not null unique,
    external_id varchar(64),
    external_ref varchar(64),
    managed_flags varchar(255),
    displayname varchar(110) not null,
    resourcename varchar(100) not null,
+   authors varchar(2048),
+   fk_stats bigint not null unique,
    fk_lifecycle bigint,
    fk_olatresource bigint unique,
-   fk_ownergroup bigint unique,
-   fk_tutorgroup bigint,
-   fk_participantgroup bigint,
    description longtext,
    initialauthor varchar(128) not null,
    accesscode integer not null default 0,
@@ -329,10 +314,16 @@ create table if not exists o_repositoryentry (
    candownload bit not null,
    cancopy bit not null,
    canreference bit not null,
-   launchcounter bigint not null,
-   downloadcounter bigint not null,
    primary key (repositoryentry_id)
 );
+create table o_re_to_group (
+   id bigint not null,
+   creationdate datetime not null,
+   r_defgroup boolean not null,
+   fk_group_id bigint not null,
+   fk_entry_id bigint not null,
+   primary key (id)
+);
 create table o_repositoryentry_cycle (
    id bigint not null,
    creationdate datetime not null,
@@ -344,18 +335,17 @@ create table o_repositoryentry_cycle (
    r_validto datetime,
    primary key (id)
 );
-create table if not exists o_bookmark (
-   bookmark_id bigint not null,
-   version mediumint unsigned not null,
-   creationdate datetime,
-   owner_id bigint not null,
-   title varchar(255) not null,
-   description longtext,
-   detaildata varchar(255),
-   displayrestype varchar(50) not null,
-   olatrestype varchar(50) not null,
-   olatreskey bigint,
-   primary key (bookmark_id)
+create table o_repositoryentry_stats (
+   id bigint not null,
+   creationdate datetime not null,
+   lastmodified datetime not null,
+   r_rating decimal(65,30),
+   r_num_of_ratings bigint not null default 0,
+   r_num_of_comments bigint not null default 0,
+   r_launchcounter bigint not null default 0,
+   r_downloadcounter bigint not null default 0,
+   r_lastusage datetime not null,
+   primary key (id)
 );
 create table if not exists o_bs_membership (
    id bigint not null,
@@ -367,6 +357,7 @@ create table if not exists o_bs_membership (
    primary key (id),
    unique (secgroup_id, identity_id)
 );
+
 create table if not exists o_plock (
     plock_id bigint not null,
 	version mediumint unsigned not null,
@@ -376,7 +367,7 @@ create table if not exists o_plock (
 );
 
 create table if not exists hibernate_unique_key (
-    next_hi integer 
+    next_hi integer
 );
 
 create table if not exists o_lifecycle (
@@ -402,8 +393,8 @@ create table if not exists oc_lock (
 
 create table if not exists o_readmessage (
 	id bigint not null, 
-	version mediumint unsigned not null, 
-	creationdate datetime,
+	version mediumint unsigned not null,
+    creationdate datetime,
 	identity_id bigint not null, 
 	forum_id bigint not null, 
 	message_id bigint not null, 
@@ -411,11 +402,9 @@ create table if not exists o_readmessage (
 );
 
 create table if not exists o_loggingtable (
-
 	log_id bigint not null,
 	creationdate datetime,
 	sourceclass varchar(255),
-
 	sessionid varchar(255) not null,
 	user_id bigint,
 	username varchar(255),
@@ -431,13 +420,11 @@ create table if not exists o_loggingtable (
 	userproperty10 varchar(255),
 	userproperty11 varchar(255),
 	userproperty12 varchar(255),
-
 	actioncrudtype varchar(1) not null,
 	actionverb varchar(16) not null,
 	actionobject varchar(32) not null,
 	simpleduration bigint not null,
 	resourceadminaction boolean not null,
-
 	businesspath varchar(2048),
 	greatgrandparentrestype varchar(32),
 	greatgrandparentresid varchar(64),
@@ -462,7 +449,6 @@ create table if not exists o_checklist (
    description longtext,
    primary key (checklist_id)
 );
-alter table o_checklist ENGINE = InnoDB;
 
 create table if not exists o_checkpoint (
    checkpoint_id bigint not null,
@@ -784,7 +770,7 @@ create table if not exists o_ep_struct_el (
   fk_struct_root_id bigint,
   fk_struct_root_map_id bigint,
   fk_map_source_id bigint,
-  fk_ownergroup bigint,
+  fk_group_id bigint,
   fk_olatresource bigint not null,
   primary key (structure_id)  
 );
@@ -1291,7 +1277,6 @@ create table o_ex_task_modifier (
    primary key (id)
 );
 
-
 -- user view
 create view o_bs_identity_short_v as (
    select
@@ -1310,27 +1295,7 @@ create view o_bs_identity_short_v as (
    left join o_userproperty as p_email on (us.user_id = p_email.fk_user_id and p_email.propName = 'email')
 );
 
-create view o_gp_contextresource_2_group_v as (
-   select
-      cg_bg2resource.groupcontextresource_id as groupcontextresource_id,
-      cg_bgcontext.groupcontext_id as groupcontext_id,
-      cg_bgroup.group_id as group_id,
-      cg_bg2resource.oresource_id as oresource_id,
-      cg_bgcontext.grouptype as grouptype,
-      cg_bgcontext.defaultcontext as defaultcontext,
-      cg_bgroup.groupname as groupname,
-      cg_bgroup.fk_ownergroup as fk_ownergroup,
-      cg_bgroup.fk_partipiciantgroup as fk_partipiciantgroup,
-      cg_bgroup.fk_waitinggroup as fk_waitinggroup
-   from o_gp_bgcontextresource_rel as cg_bg2resource
-   inner join o_gp_bgcontext as cg_bgcontext on (cg_bg2resource.groupcontext_fk = cg_bgcontext.groupcontext_id)
-   inner join o_gp_business as cg_bgroup on (cg_bg2resource.groupcontext_fk = cg_bgroup.groupcontext_fk)
-);
-
 -- eportfolio views
--- views
-
--- notifications for e-portfolio
 create or replace view o_ep_notifications_struct_v as (
    select
       struct.structure_id as struct_id,
@@ -1365,7 +1330,7 @@ create or replace view o_ep_notifications_art_v as (
    inner join o_ep_artefact as artefact on (artefact_link.fk_artefact_id = artefact.artefact_id)
    left join o_ep_struct_el as root_struct on (struct.fk_struct_root_id = root_struct.structure_id)
 );
- 
+
 create or replace view o_ep_notifications_rating_v as (
    select
       urating.rating_id as rating_id,
@@ -1397,54 +1362,41 @@ create or replace view o_ep_notifications_comment_v as (
    left join o_ep_struct_el as page on (page.fk_struct_root_map_id = map.structure_id and page.structure_id = ucomment.ressubpath)
 );
 
-create or replace view o_gp_business_to_repository_v as (
+create view o_gp_business_to_repository_v as (
 	select 
 		grp.group_id as grp_id,
 		repoentry.repositoryentry_id as re_id,
 		repoentry.displayname as re_displayname
 	from o_gp_business as grp
-	inner join o_gp_business_to_resource as relation on (relation.fk_group = grp.group_id)
-	inner join o_repositoryentry as repoentry on (repoentry.fk_olatresource = relation.fk_resource)
+	inner join o_re_to_group as relation on (relation.fk_group_id = grp.fk_group_id)
+	inner join o_repositoryentry as repoentry on (repoentry.repositoryentry_id = relation.fk_entry_id)
 );
 
-create or replace view o_bs_gp_membership_v as (
+create view o_bs_gp_membership_v as (
    select
       membership.id as membership_id,
-      membership.identity_id as identity_id,
+      membership.fk_identity_id as fk_identity_id,
       membership.lastmodified as lastmodified,
       membership.creationdate as creationdate,
-      owned_gp.group_id as owned_gp_id,
-      participant_gp.group_id as participant_gp_id,
-      waiting_gp.group_id as waiting_gp_id
-   from o_bs_membership as membership
-   left join o_gp_business as owned_gp on (membership.secgroup_id = owned_gp.fk_ownergroup)
-   left join o_gp_business as participant_gp on (membership.secgroup_id = participant_gp.fk_partipiciantgroup)
-   left join o_gp_business as waiting_gp on (membership.secgroup_id = waiting_gp.fk_waitinggroup)
-   where (owned_gp.group_id is not null or participant_gp.group_id is not null or waiting_gp.group_id is not null)
+      membership.g_role as g_role,
+      gp.group_id as group_id
+   from o_bs_group_member as membership
+   inner join o_gp_business as gp on (gp.fk_group_id=membership.fk_group_id)
 );
 
-create or replace view o_gp_member_v as
+create or replace view o_gp_member_v as (
    select
       gp.group_id as bg_id,
       gp.groupname as bg_name,
       gp.creationdate as bg_creationdate,
       gp.managed_flags as bg_managed_flags,
       gp.descr as bg_desc,
-      membership.identity_id as member_id
-   from o_bs_membership membership
-   inner join o_gp_business gp on (membership.secgroup_id = gp.fk_ownergroup) 
-   union select
-      gp.group_id as bg_id,
-      gp.groupname as bg_name,
-      gp.creationdate as bg_creationdate,
-      gp.managed_flags as bg_managed_flags,
-      gp.descr as bg_desc,
-      membership.identity_id as member_id
-   from o_bs_membership membership
-   inner join o_gp_business gp on (membership.secgroup_id = gp.fk_partipiciantgroup)
-;
+      membership.fk_identity_id as member_id
+   from o_gp_business as gp
+   inner join o_bs_group_member as membership on (membership.fk_group_id = gp.fk_group_id and membership.g_role in ('coach','participant'))
+);
 
-create or replace view o_gp_business_v  as (
+create view o_gp_business_v  as (
    select
       gp.group_id as group_id,
       gp.groupname as groupname,
@@ -1458,229 +1410,195 @@ create or replace view o_gp_business_v  as (
       gp.autocloseranks_enabled as autocloseranks_enabled,
       gp.external_id as external_id,
       gp.managed_flags as managed_flags,
-      (select count(part.id) from o_bs_membership as part where part.secgroup_id = gp.fk_partipiciantgroup) as num_of_participants,
+      (select count(part.id) from o_bs_group_member as part where part.fk_group_id = gp.fk_group_id and part.g_role='participant') as num_of_participants,
       (select count(pending.reservation_id) from o_ac_reservation as pending where pending.fk_resource = gp.fk_resource) as num_of_pendings,
-      (select count(own.id) from o_bs_membership as own where own.secgroup_id = gp.fk_ownergroup) as num_of_owners,
-      (case when gp.waitinglist_enabled = 1
+      (select count(own.id) from o_bs_group_member as own where own.fk_group_id = gp.fk_group_id and own.g_role='coach') as num_of_owners,
+      (case when gp.waitinglist_enabled = true
          then 
-           (select count(waiting.id) from o_bs_membership as waiting where waiting.secgroup_id = gp.fk_partipiciantgroup)
+           (select count(waiting.id) from o_bs_group_member as waiting where waiting.fk_group_id = gp.fk_group_id and waiting.g_role='waiting')
          else
            0
       end) as num_waiting,
       (select count(offer.offer_id) from o_ac_offer as offer 
          where offer.fk_resource_id = gp.fk_resource
-         and offer.is_valid=1
+         and offer.is_valid=true
          and (offer.validfrom is null or offer.validfrom <= current_timestamp())
          and (offer.validto is null or offer.validto >= current_timestamp())
       ) as num_of_valid_offers,
       (select count(offer.offer_id) from o_ac_offer as offer 
          where offer.fk_resource_id = gp.fk_resource
-         and offer.is_valid=1
+         and offer.is_valid=true
       ) as num_of_offers,
-      (select count(relation.fk_resource) from o_gp_business_to_resource as relation 
-         where relation.fk_group = gp.group_id
+      (select count(relation.fk_entry_id) from o_re_to_group as relation 
+         where relation.fk_group_id = gp.fk_group_id
       ) as num_of_relations,
       gp.fk_resource as fk_resource,
-      gp.fk_ownergroup as fk_ownergroup,
-      gp.fk_partipiciantgroup as fk_partipiciantgroup,
-      gp.fk_waitinggroup as fk_waitinggroup
+      gp.fk_group_id as fk_group_id
    from o_gp_business as gp
 );
 
 create or replace view o_re_membership_v as (
    select
-      membership.id as membership_id,
-      membership.identity_id as identity_id,
-      membership.lastmodified as lastmodified,
-      membership.creationdate as creationdate,
-      re_owner_member.repositoryentry_id as owner_re_id,
-      re_owner_member.fk_olatresource as owner_ores_id,
-      re_tutor_member.repositoryentry_id as tutor_re_id,
-      re_tutor_member.fk_olatresource as tutor_ores_id,
-      re_part_member.repositoryentry_id as participant_re_id,
-      re_part_member.fk_olatresource as participant_ores_id
-   from o_bs_membership as membership
-   left join o_repositoryentry as re_part_member on (membership.secgroup_id = re_part_member.fk_participantgroup)
-   left join o_repositoryentry as re_tutor_member on (membership.secgroup_id = re_tutor_member.fk_tutorgroup)
-   left join o_repositoryentry as re_owner_member on (membership.secgroup_id = re_owner_member.fk_ownergroup)
-);
-
-create or replace view o_re_participant_v as
-select
-   re1.repositoryentry_id as re1_id,
-   re2.repositoryentry_id as re2_id,
-   case when re1.repositoryentry_id is null then re2.repositoryentry_id else re1.repositoryentry_id end as re_id,
-   bs_member.identity_id as member_id
-  from o_bs_membership as bs_member
-  left join o_gp_business as bgroup on (bs_member.secgroup_id = bgroup.fk_partipiciantgroup)
-  left join o_gp_business_to_resource as bgroup_rel on (bgroup.group_id = bgroup_rel.fk_group)
-  left join o_repositoryentry as re1 on (bs_member.secgroup_id = re1.fk_participantgroup)
-  left join o_repositoryentry as re2 on (re2.fk_olatresource = bgroup_rel.fk_resource)
-  where re1.repositoryentry_id is not null or re2.repositoryentry_id is not null
-;
-
-create or replace view o_re_tutor_v as
-select
-   re1.repositoryentry_id as re1_id,
-   re2.repositoryentry_id as re2_id,
-   case when re1.repositoryentry_id is null then re2.repositoryentry_id else re1.repositoryentry_id end as re_id,
-   bs_member.identity_id as member_id
-  from o_bs_membership as bs_member
-  left join o_gp_business as bgroup on (bs_member.secgroup_id = bgroup.fk_ownergroup)
-  left join o_gp_business_to_resource as bgroup_rel on (bgroup.group_id = bgroup_rel.fk_group)
-  left join o_repositoryentry as re1 on (bs_member.secgroup_id = re1.fk_tutorgroup)
-  left join o_repositoryentry as re2 on (re2.fk_olatresource = bgroup_rel.fk_resource)
-  where re1.repositoryentry_id is not null or re2.repositoryentry_id is not null
-;
-
+      bmember.id as membership_id,
+      bmember.creationdate as creationdate,
+      bmember.lastmodified as lastmodified,
+      bmember.fk_identity_id as fk_identity_id,
+      bmember.g_role as g_role,
+      re.repositoryentry_id as fk_entry_id
+   from o_repositoryentry as re
+   inner join o_re_to_group relgroup on (relgroup.fk_entry_id=re.repositoryentry_id)
+   inner join o_bs_group_member as bmember on (bmember.fk_group_id=relgroup.fk_group_id) 
+);
+
+create view o_repositoryentry_my_v as (
+   select
+      re.repositoryentry_id as re_id,
+      re.creationdate as re_creationdate,
+      re.lastmodified as re_lastmodified,
+      re.displayname as re_displayname,
+      re.description as re_description,
+      re.authors as re_authors,
+      re.accesscode as re_accesscode,
+      re.membersonly as re_membersonly,
+      re.statuscode as re_statuscode,
+      re.fk_lifecycle as fk_lifecycle,
+      re.fk_olatresource as fk_olatresource,
+      courseinfos.initiallaunchdate as ci_initiallaunchdate,
+      courseinfos.recentlaunchdate as ci_recentlaunchdate,
+      courseinfos.visit as ci_visit,
+      courseinfos.timespend as ci_timespend,
+      effstatement.score as eff_score,
+      effstatement.passed as eff_passed,
+      mark.mark_id as mark_id,
+      rating.rating as rat_rating,
+      stats.r_rating as stats_rating,
+      stats.r_num_of_ratings as stats_num_of_ratings,
+      stats.r_num_of_comments as stats_num_of_comments,
+      ident.id as member_id,
+      (select count(offer.offer_id) from o_ac_offer as offer 
+         where offer.fk_resource_id = re.fk_olatresource
+         and offer.is_valid=true
+         and (offer.validfrom is null or offer.validfrom <= current_timestamp())
+         and (offer.validto is null or offer.validto >= current_timestamp())
+      ) as num_of_valid_offers,
+      (select count(offer.offer_id) from o_ac_offer as offer 
+         where offer.fk_resource_id = re.fk_olatresource
+         and offer.is_valid=true
+      ) as num_of_offers
+   from o_repositoryentry as re
+   cross join o_bs_identity as ident
+   inner join o_repositoryentry_stats as stats on (re.fk_stats=stats.id)
+   left join o_mark as mark on (mark.creator_id=ident.id and re.repositoryentry_id=mark.resid and mark.resname='RepositoryEntry')
+   left join o_as_eff_statement as effstatement on (effstatement.fk_identity=ident.id and effstatement.fk_resource_id = re.fk_olatresource)
+   left join o_userrating as rating on (rating.creator_id=ident.id and re.repositoryentry_id=rating.resid and rating.resname='RepositoryEntry')
+   left join o_as_user_course_infos as courseinfos on (courseinfos.fk_identity=ident.id and re.fk_olatresource=courseinfos.fk_resource_id)
+);
+  
 -- contacts
-create or replace view o_gp_contact_participant_v as
+create view o_gp_contactkey_v as (
    select
-      bg_part_member.id as membership_id,
-      bgroup.group_id as bg_id,
-      bgroup.groupname as bg_name,
-      bgroup.fk_partipiciantgroup as bg_part_sec_id,
-      bgroup.fk_ownergroup as bg_owner_sec_id,
-      bg_part_member.identity_id as bg_part_member_id,
-      ident.name as bg_part_member_name 
+      bg_member.id as membership_id,
+      bg_member.fk_identity_id as member_id,
+      bg_member.g_role as membership_role,
+      bg_me.fk_identity_id as me_id,
+      bgroup.group_id as bg_id
    from o_gp_business as bgroup
-   inner join o_bs_membership as bg_part_member on (bg_part_member.secgroup_id = bgroup.fk_partipiciantgroup)
-   inner join o_bs_identity as ident on (bg_part_member.identity_id = ident.id)
-   where bgroup.participantsintern=1
-;
-   
-create or replace view o_gp_contact_owner_v as
+   inner join o_bs_group_member as bg_member on (bg_member.fk_group_id = bgroup.fk_group_id)
+   inner join o_bs_group_member as bg_me on (bg_me.fk_group_id = bgroup.fk_group_id)
+   where
+      (bgroup.ownersintern=true and bg_member.g_role='coach')
+      or
+      (bgroup.participantsintern=true and bg_member.g_role='participant')
+);
+
+create view o_gp_contactext_v as (
    select
-      bg_owner_member.id as membership_id,
+      bg_member.id as membership_id,
+      bg_member.fk_identity_id as member_id,
+      bg_member.g_role as membership_role,
+      id_member.name as member_name,
+      first_member.propvalue as member_firstname,
+      last_member.propvalue as member_lastname,
+      bg_me.fk_identity_id as me_id,
       bgroup.group_id as bg_id,
-      bgroup.groupname as bg_name,
-      bgroup.fk_partipiciantgroup as bg_part_sec_id,
-      bgroup.fk_ownergroup as bg_owner_sec_id,
-      bg_owner_member.identity_id as bg_owner_member_id,
-      ident.name as bg_owner_member_name
+      bgroup.group_id as bg_name
    from o_gp_business as bgroup
-   inner join o_bs_membership as bg_owner_member on (bg_owner_member.secgroup_id = bgroup.fk_ownergroup)
-   inner join o_bs_identity as ident on (bg_owner_member.identity_id = ident.id)
-   where bgroup.ownersintern=1
-;
+   inner join o_bs_group_member as bg_member on (bg_member.fk_group_id = bgroup.fk_group_id)
+   inner join o_bs_identity as id_member on (bg_member.fk_identity_id = id_member.id)
+   inner join o_user as us_member on (id_member.fk_user_id = us_member.user_id)
+   inner join o_userproperty as first_member on (first_member.fk_user_id = us_member.user_id and first_member.propname='firstName')
+   inner join o_userproperty as last_member on (last_member.fk_user_id = us_member.user_id and last_member.propname='lastName')
+   inner join o_bs_group_member as bg_me on (bg_me.fk_group_id = bgroup.fk_group_id)
+   where
+      (bgroup.ownersintern=true and bg_member.g_role='coach')
+      or
+      (bgroup.participantsintern=true and bg_member.g_role='participant')
+);
 
-create or replace view o_gp_contactkey_participant_v as
-   select
-      bg_part_member.id as membership_id,
-      bgroup.fk_partipiciantgroup as bg_part_sec_id,
-      bgroup.fk_ownergroup as bg_owner_sec_id,
-      bg_part_member.identity_id as bg_part_member_id
-   from o_gp_business as bgroup
-   inner join o_bs_membership as bg_part_member on (bg_part_member.secgroup_id = bgroup.fk_partipiciantgroup)
-   where bgroup.participantsintern=1
-;
-   
-create or replace view o_gp_contactkey_owner_v as
+-- coaching
+create view o_as_eff_statement_students_v as (
    select
-      bg_owner_member.id as membership_id,
-      bgroup.fk_partipiciantgroup as bg_part_sec_id,
-      bgroup.fk_ownergroup as bg_owner_sec_id,
-      bg_owner_member.identity_id as bg_owner_member_id
-   from o_gp_business as bgroup
-   inner join o_bs_membership as bg_owner_member on (bg_owner_member.secgroup_id = bgroup.fk_ownergroup)
-   where bgroup.ownersintern=1
-;
+      sg_re.repositoryentry_id as re_id,
+      sg_coach.fk_identity_id as tutor_id,
+      sg_participant.fk_identity_id as student_id,
+      sg_statement.id as st_id,
+      (case when sg_statement.passed = true then 1 else 0 end) as st_passed,
+      (case when sg_statement.passed = false then 1 else 0 end) as st_failed,
+      (case when sg_statement.passed is null then 1 else 0 end) as st_not_attempted,
+      sg_statement.score as st_score,
+      pg_initial_launch.id as pg_id
+   from o_repositoryentry as sg_re
+   inner join o_re_to_group as togroup on (togroup.fk_entry_id = sg_re.repositoryentry_id)
+   inner join o_bs_group_member as sg_coach on (sg_coach.fk_group_id=togroup.fk_group_id and sg_coach.g_role='coach')
+   inner join o_bs_group_member as sg_participant on (sg_participant.fk_group_id=sg_coach.fk_group_id and sg_participant.g_role='participant')
+   left join o_as_eff_statement as sg_statement on (sg_statement.fk_identity = sg_participant.fk_identity_id and sg_statement.fk_resource_id = sg_re.fk_olatresource)
+   left join o_as_user_course_infos as pg_initial_launch on (pg_initial_launch.fk_resource_id = sg_re.fk_olatresource and pg_initial_launch.fk_identity = sg_participant.fk_identity_id)
+);
 
--- coaching
-create or replace view o_as_eff_statement_groups_v as (
+create view o_as_eff_statement_courses_v as (
    select
       sg_re.repositoryentry_id as re_id,
       sg_re.displayname as re_name,
-      sg_bg.group_id as bg_id,
-      sg_bg.groupname as bg_name,
-      sg_tutorMembership.identity_id as tutor_id,
-      sg_studentMembership.identity_id as student_id,
+      sg_coach.fk_identity_id as tutor_id,
+      sg_participant.fk_identity_id as student_id,
       sg_statement.id as st_id,
-      (case when sg_statement.passed = 1 then 1 else 0 end) as st_passed,
-      (case when sg_statement.passed = 0 then 1 else 0 end) as st_failed,
+      (case when sg_statement.passed = true then 1 else 0 end) as st_passed,
+      (case when sg_statement.passed = false then 1 else 0 end) as st_failed,
       (case when sg_statement.passed is null then 1 else 0 end) as st_not_attempted,
       sg_statement.score as st_score,
       pg_initial_launch.id as pg_id
    from o_repositoryentry as sg_re
-   inner join o_olatresource as sg_reResource on (sg_re.fk_olatresource = sg_reResource.resource_id and sg_reResource.resname = 'CourseModule')
-   inner join o_gp_business_to_resource as sg_bg2resource on (sg_bg2resource.fk_resource = sg_reResource.resource_id)
-   inner join o_gp_business as sg_bg on (sg_bg.group_id = sg_bg2resource.fk_group)
-   inner join o_bs_membership as sg_tutorMembership on (sg_bg.fk_ownergroup = sg_tutorMembership.secgroup_id)
-   inner join o_bs_membership as sg_studentMembership on (sg_bg.fk_partipiciantgroup = sg_studentMembership.secgroup_id)
-   left join o_as_eff_statement as sg_statement on (sg_statement.fk_resource_id = sg_reResource.resource_id and sg_statement.fk_identity = sg_studentMembership.identity_id)
-   left join o_as_user_course_infos as pg_initial_launch on (pg_initial_launch.fk_resource_id = sg_reResource.resource_id and pg_initial_launch.fk_identity = sg_studentMembership.identity_id)
-   group by sg_re.repositoryentry_id, sg_re.displayname, sg_bg.group_id, sg_bg.groupname, sg_tutorMembership.identity_id, 
-      sg_studentMembership.identity_id, sg_statement.id, sg_statement.score, pg_initial_launch.id
-);
-
-create or replace view o_as_eff_statement_grouped_v as (
+   inner join o_re_to_group as togroup on (togroup.fk_entry_id = sg_re.repositoryentry_id)
+   inner join o_bs_group_member as sg_coach on (sg_coach.fk_group_id=togroup.fk_group_id and sg_coach.g_role='coach')
+   inner join o_bs_group_member as sg_participant on (sg_participant.fk_group_id=sg_coach.fk_group_id and sg_participant.g_role='participant')
+   left join o_as_eff_statement as sg_statement on (sg_statement.fk_identity = sg_participant.fk_identity_id and sg_statement.fk_resource_id = sg_re.fk_olatresource)
+   left join o_as_user_course_infos as pg_initial_launch on (pg_initial_launch.fk_resource_id = sg_re.fk_olatresource and pg_initial_launch.fk_identity = sg_participant.fk_identity_id)
+);
+
+create view o_as_eff_statement_groups_v as (
    select
       sg_re.repositoryentry_id as re_id,
       sg_re.displayname as re_name,
-      sg_tutorMembership.identity_id as tutor_id,
-      sg_studentMembership.identity_id as student_id,
+      sg_bg.group_id as bg_id,
+      sg_bg.groupname as bg_name,
+      sg_coach.fk_identity_id as tutor_id,
+      sg_participant.fk_identity_id as student_id,
       sg_statement.id as st_id,
-      (case when sg_statement.passed = 1 then 1 else 0 end) as st_passed,
-      (case when sg_statement.passed = 0 then 1 else 0 end) as st_failed,
+      (case when sg_statement.passed = true then 1 else 0 end) as st_passed,
+      (case when sg_statement.passed = false then 1 else 0 end) as st_failed,
       (case when sg_statement.passed is null then 1 else 0 end) as st_not_attempted,
       sg_statement.score as st_score,
       pg_initial_launch.id as pg_id
    from o_repositoryentry as sg_re
-   inner join o_olatresource as sg_reResource on (sg_re.fk_olatresource = sg_reResource.resource_id and sg_reResource.resname = 'CourseModule')
-   inner join o_gp_business_to_resource as sg_bg2resource on (sg_bg2resource.fk_resource = sg_reResource.resource_id)
-   inner join o_gp_business as sg_bg on (sg_bg.group_id = sg_bg2resource.fk_group)
-   inner join o_bs_membership as sg_tutorMembership on (sg_bg.fk_ownergroup = sg_tutorMembership.secgroup_id)
-   inner join o_bs_membership as sg_studentMembership on (sg_bg.fk_partipiciantgroup = sg_studentMembership.secgroup_id)
-   left join o_as_eff_statement as sg_statement on (sg_statement.fk_resource_id = sg_reResource.resource_id and sg_statement.fk_identity = sg_studentMembership.identity_id)
-   left join o_as_user_course_infos as pg_initial_launch on (pg_initial_launch.fk_resource_id = sg_reResource.resource_id and pg_initial_launch.fk_identity = sg_studentMembership.identity_id)
-   group by sg_re.repositoryentry_id, sg_re.displayname, sg_tutorMembership.identity_id, 
-      sg_studentMembership.identity_id, sg_statement.id, sg_statement.score, pg_initial_launch.id
-);
-
-create or replace view o_as_eff_statement_members_v as (
-   select
-      sm_re.repositoryentry_id as re_id,
-      sm_re.displayname as re_name,
-      sm_tutorMembership.identity_id as tutor_id,
-      sm_studentMembership.identity_id as student_id,
-      sm_statement.id as st_id,
-      (case when sm_statement.passed = 1 then 1 else 0 end) as st_passed,
-      (case when sm_statement.passed = 0 then 1 else 0 end) as st_failed,
-      (case when sm_statement.passed is null then 1 else 0 end) as st_not_attempted,
-      sm_statement.score as st_score,
-      pm_initial_launch.id as pg_id
-   from o_repositoryentry as sm_re
-   inner join o_olatresource as sm_reResource on (sm_re.fk_olatresource = sm_reResource.resource_id and sm_reResource.resname = 'CourseModule')
-   inner join o_bs_membership as sm_tutorMembership on (sm_re.fk_tutorgroup = sm_tutorMembership.secgroup_id)
-   inner join o_bs_membership as sm_studentMembership on (sm_re.fk_participantgroup = sm_studentMembership.secgroup_id)
-   left join o_as_eff_statement as sm_statement on (sm_statement.fk_resource_id = sm_reResource.resource_id and sm_statement.fk_identity = sm_studentMembership.identity_id)
-   left join o_as_user_course_infos as pm_initial_launch on (pm_initial_launch.fk_resource_id = sm_reResource.resource_id and pm_initial_launch.fk_identity = sm_studentMembership.identity_id)
-);
-
-create or replace view o_as_eff_statement_members_strict_v as (
-   select
-      sm_re.repositoryentry_id as re_id,
-      sm_re.displayname as re_name,
-      sm_tutorMembership.identity_id as tutor_id,
-      sm_studentMembership.identity_id as student_id,
-      sm_statement.id as st_id,
-      (case when sm_statement.passed = 1 then 1 else 0 end) as st_passed,
-      (case when sm_statement.passed = 0 then 1 else 0 end) as st_failed,
-      (case when sm_statement.passed is null then 1 else 0 end) as st_not_attempted,
-      sm_statement.score as st_score,
-      pm_initial_launch.id as pg_id
-   from o_repositoryentry as sm_re
-   inner join o_olatresource as sm_reResource on (
-      sm_re.fk_olatresource = sm_reResource.resource_id
-      and sm_reResource.resname = 'CourseModule'
-      and not exists (select * from o_gp_business_to_resource as sm_re2group where sm_reResource.resource_id = sm_re2group.fk_resource)
-   )
-   inner join o_bs_membership as sm_tutorMembership on (sm_re.fk_tutorgroup = sm_tutorMembership.secgroup_id)
-   inner join o_bs_membership as sm_studentMembership on (sm_re.fk_participantgroup = sm_studentMembership.secgroup_id)
-   left join o_as_eff_statement as sm_statement on (sm_statement.fk_resource_id = sm_reResource.resource_id and sm_statement.fk_identity = sm_studentMembership.identity_id)
-   left join o_as_user_course_infos as pm_initial_launch on (pm_initial_launch.fk_resource_id = sm_reResource.resource_id and pm_initial_launch.fk_identity = sm_studentMembership.identity_id)
+   inner join o_re_to_group as togroup on (togroup.fk_entry_id = sg_re.repositoryentry_id)
+   inner join o_gp_business as sg_bg on (sg_bg.fk_group_id=togroup.fk_group_id)
+   inner join o_bs_group_member as sg_coach on (sg_coach.fk_group_id=togroup.fk_group_id and sg_coach.g_role='coach')
+   inner join o_bs_group_member as sg_participant on (sg_participant.fk_group_id=sg_coach.fk_group_id and sg_participant.g_role='participant')
+   left join o_as_eff_statement as sg_statement on (sg_statement.fk_identity = sg_participant.fk_identity_id and sg_statement.fk_resource_id = sg_re.fk_olatresource)
+   left join o_as_user_course_infos as pg_initial_launch on (pg_initial_launch.fk_resource_id = sg_re.fk_olatresource and pg_initial_launch.fk_identity = sg_participant.fk_identity_id)
 );
 
+-- instant messaging
 create or replace view o_im_roster_entry_v as (
    select
       entry.id as re_id,
@@ -1697,7 +1615,6 @@ create or replace view o_im_roster_entry_v as (
    inner join o_bs_identity as ident on (entry.fk_identity_id = ident.id)
 );
 
-
 -- views with rating
 create or replace view o_qp_item_v as (
    select
@@ -1889,8 +1806,7 @@ alter table hibernate_unique_key ENGINE = InnoDB;
 alter table o_forum ENGINE = InnoDB;
 alter table o_property ENGINE = InnoDB;
 alter table o_bs_secgroup ENGINE = InnoDB;
-alter table  o_repositoryentry_cycle ENGINE = InnoDB;
-alter table o_repositorymetadata ENGINE = InnoDB;
+alter table o_repositoryentry_cycle ENGINE = InnoDB;
 alter table o_lti_outcome ENGINE = InnoDB;
 alter table o_user ENGINE = InnoDB;
 alter table o_userproperty ENGINE = InnoDB;
@@ -1905,11 +1821,8 @@ alter table o_bs_policy ENGINE = InnoDB;
 alter table o_bs_namedgroup ENGINE = InnoDB;
 alter table o_bs_membership ENGINE = InnoDB;
 alter table o_repositoryentry ENGINE = InnoDB;
-alter table o_bookmark ENGINE = InnoDB;
 alter table o_references ENGINE = InnoDB;
 alter table o_gp_business ENGINE = InnoDB;
-alter table o_gp_bgcontextresource_rel ENGINE = InnoDB;
-alter table o_gp_bgcontext ENGINE = InnoDB;
 alter table o_gp_bgarea ENGINE = InnoDB;
 alter table o_gp_bgtoarea_rel ENGINE = InnoDB;
 alter table o_catentry ENGINE = InnoDB;
@@ -1970,6 +1883,7 @@ alter table o_im_roster_entry ENGINE = InnoDB;
 alter table o_im_preferences ENGINE = InnoDB;
 alter table o_ex_task ENGINE = InnoDB;
 alter table o_ex_task_modifier ENGINE = InnoDB;
+alter table o_checklist ENGINE = InnoDB;
 alter table o_cl_checkbox ENGINE = InnoDB;
 alter table o_cl_check ENGINE = InnoDB;
 
@@ -2006,33 +1920,26 @@ create index idx_prop_category_idx on o_property (category);
 create index idx_prop_name_idx on o_property (name);
 create index idx_prop_restype_idx on o_property (resourcetypename);
 
+-- group
+alter table o_bs_group_member add constraint member_identity_ctx foreign key (fk_identity_id) references o_bs_identity (id);
+alter table o_bs_group_member add constraint member_group_ctx foreign key (fk_group_id) references o_bs_group (id);
+create index member_to_grp_role_idx on o_bs_group_member (g_role);
+
+alter table o_re_to_group add constraint re_to_group_group_ctx foreign key (fk_group_id) references o_bs_group (id);
+alter table o_re_to_group add constraint re_to_group_re_ctx foreign key (fk_entry_id) references o_repositoryentry (repositoryentry_id);
+
+alter table o_gp_business add constraint gp_to_group_business_ctx foreign key (fk_group_id) references o_bs_group (id);
+
 -- business group
-alter table o_gp_business add constraint FKCEEB8A86DF6BCD14 foreign key (groupcontext_fk) references o_gp_bgcontext (groupcontext_id);
-alter table o_gp_business add constraint FKCEEB8A86A1FAC766 foreign key (fk_ownergroup) references o_bs_secgroup (id);
-alter table o_gp_business add constraint FKCEEB8A86C06E3EF3 foreign key (fk_partipiciantgroup) references o_bs_secgroup (id);
 alter table o_gp_business add constraint idx_bgp_rsrc foreign key (fk_resource) references o_olatresource (resource_id);
-alter table o_gp_business add constraint idx_bgp_waiting foreign key (fk_waitinggroup) references o_bs_secgroup (id);
 
 create index gp_name_idx on o_gp_business (groupname);
 create index idx_grp_lifecycle_soft_idx on o_gp_business (external_id);
 
-alter table o_gp_business_to_resource add constraint idx_bgp_to_rsrc_rsrc foreign key (fk_resource) references o_olatresource (resource_id);
-alter table o_gp_business_to_resource add constraint idx_bgp_to_rsrc_group foreign key (fk_group) references o_gp_business (group_id);
-
 alter table o_bs_namedgroup add constraint FKBAFCBBC4B85B522C foreign key (secgroup_id) references o_bs_secgroup (id);
 create index groupname_idx on o_bs_namedgroup (groupname);
 
--- context (deprecated)
-alter table o_gp_bgcontext add constraint FK1C154FC47E4A0638 foreign key (ownergroup_fk) references o_bs_secgroup (id);
-create index type_idx on o_gp_bgcontext (grouptype);
-create index default_idx on o_gp_bgcontext (defaultcontext);
-create index name_idx on o_gp_bgcontext (name);
-
-alter table o_gp_bgcontextresource_rel add constraint FK9903BEAC9F9C3F1D foreign key (oresource_id) references o_olatresource (resource_id);
-alter table o_gp_bgcontextresource_rel add constraint FK9903BEACDF6BCD14 foreign key (groupcontext_fk) references o_gp_bgcontext (groupcontext_id);
-
 -- area
-alter table o_gp_bgarea add constraint FK9EFAF698DF6BCD14 foreign key (groupcontext_fk) references o_gp_bgcontext (groupcontext_id);
 alter table o_gp_bgarea add constraint idx_area_to_resource foreign key (fk_resource) references o_olatresource (resource_id);
 create index name_idx on o_gp_bgarea (name);
 
@@ -2098,9 +2005,6 @@ create index id_idx on o_olatresource (resid);
 
 -- repository
 alter table o_repositoryentry add constraint FK2F9C439888C31018 foreign key (fk_olatresource) references o_olatresource (resource_id);
-alter table o_repositoryentry add constraint FK2F9C4398A1FAC766 foreign key (fk_ownergroup) references o_bs_secgroup (id);
-alter table o_repositoryentry add constraint repo_tutor_sec_group_ctx foreign key (fk_tutorgroup) references o_bs_secgroup (id);
-alter table o_repositoryentry add constraint repo_parti_sec_group_ctx foreign key (fk_participantgroup) references o_bs_secgroup (id);
 
 create index access_idx on o_repositoryentry (accesscode);
 create index initialAuthor_idx on o_repositoryentry (initialauthor);
@@ -2113,8 +2017,7 @@ create index idx_re_lifecycle_extref_idx on o_repositoryentry (external_ref);
 alter table o_repositoryentry add constraint idx_re_lifecycle_fk foreign key (fk_lifecycle) references o_repositoryentry_cycle(id);
 create index idx_re_lifecycle_soft_idx on o_repositoryentry_cycle (r_softkey);
 
--- (deprecated)
-alter table o_repositorymetadata add constraint FKDB97A6493F14E3EE foreign key (fk_repositoryentry) references o_repositoryentry (repositoryentry_id);
+alter table o_repositoryentry add constraint repoentry_stats_ctx foreign key (fk_stats) references o_repositoryentry_stats (id);
 
 -- access control
 create index ac_offer_to_resource_idx on o_ac_offer (fk_resource_id);
@@ -2141,9 +2044,6 @@ create index paypal_pay_s_trx_id_idx on o_ac_paypal_transaction (ipn_sender_tran
 alter table o_ac_reservation add constraint idx_rsrv_to_rsrc_rsrc foreign key (fk_resource) references o_olatresource (resource_id);
 alter table o_ac_reservation add constraint idx_rsrv_to_rsrc_identity foreign key (fk_identity) references o_bs_identity (id);
 
--- bookmark (deprecated)
-alter table o_bookmark add constraint FK68C4E30663219E27 foreign key (owner_id) references o_bs_identity (id);
-
 -- note
 alter table o_note add constraint FKC2D855C263219E27 foreign key (owner_id) references o_bs_identity (id);
 create index resid_idx on o_note (resourcetypeid);
@@ -2212,7 +2112,6 @@ alter table o_ep_artefact add constraint FKF26C8375236F28X foreign key (fk_artef
 alter table o_ep_artefact add constraint FKA0070D12316A97B4 foreign key (fk_struct_el_id) references o_ep_struct_el (structure_id);
 
 alter table o_ep_struct_el add constraint FKF26C8375236F26X foreign key (fk_olatresource) references o_olatresource (resource_id);
-alter table o_ep_struct_el add constraint FKF26C8375236F29X foreign key (fk_ownergroup) references o_bs_secgroup (id);
 alter table o_ep_struct_el add constraint FK4ECC1C8D636191A1 foreign key (fk_map_source_id) references o_ep_struct_el (structure_id);
 alter table o_ep_struct_el add constraint FK4ECC1C8D76990817 foreign key (fk_struct_root_id) references o_ep_struct_el (structure_id);
 alter table o_ep_struct_el add constraint FK4ECC1C8D76990818 foreign key (fk_struct_root_map_id) references o_ep_struct_el (structure_id);
diff --git a/src/main/resources/database/postgresql/setupDatabase.sql b/src/main/resources/database/postgresql/setupDatabase.sql
index 5614c19aff99d3713ef63bf4dffaae19fa16c2aa..1a126c69b3977c99b80c850df4af5e6d176c4858 100644
--- a/src/main/resources/database/postgresql/setupDatabase.sql
+++ b/src/main/resources/database/postgresql/setupDatabase.sql
@@ -397,8 +397,9 @@ create table o_readmessage (
 	identity_id int8 not null, 
 	forum_id int8 not null, 
 	message_id int8 not null, 
-	primary key (id));
-	
+	primary key (id)
+);
+
 create table o_loggingtable (
 	log_id int8 not null,
 	creationdate timestamp,
@@ -589,8 +590,6 @@ create table o_ep_collect_restriction (
   fk_struct_el_id int8,
   primary key (collect_id)
 );
-
--- eportfolio structure element
 create table o_ep_struct_el (
   structure_id int8 not null,
   structure_type varchar(32) not null,
@@ -617,8 +616,6 @@ create table o_ep_struct_el (
   fk_olatresource int8 not null,
   primary key (structure_id)  
 );
-
--- eportfolio structure to structure link
 create table o_ep_struct_struct_link (
   link_id int8 not null,
   version int4 not null,
@@ -628,8 +625,6 @@ create table o_ep_struct_struct_link (
   fk_struct_child_id int8 not null,
   primary key (link_id)
 );
-
--- eportfolio structure to artefact link
 create table o_ep_struct_artefact_link (
   link_id int8 not null,
   version int4 not null,
@@ -738,6 +733,7 @@ create table o_ac_offer (
   fk_resource_id int8,
 	primary key (offer_id)
 );
+
 create table o_ac_method (
 	method_id int8 NOT NULL,
 	access_method varchar(32),
@@ -750,6 +746,7 @@ create table o_ac_method (
 	validto timestamp,
 	primary key (method_id)
 );
+
 create table o_ac_offer_access (
 	offer_method_id int8 NOT NULL,
   version int4 not null,
@@ -761,6 +758,7 @@ create table o_ac_offer_access (
   fk_method_id int8,
 	primary key (offer_method_id)
 );
+
 -- access cart
 create table o_ac_order (
 	order_id int8 NOT NULL,
@@ -778,6 +776,7 @@ create table o_ac_order (
   fk_delivery_id int8,
 	primary key (order_id)
 );
+
 create table o_ac_order_part (
 	order_part_id int8 NOT NULL,
   version int4 not null,
@@ -790,6 +789,7 @@ create table o_ac_order_part (
   fk_order_id int8,
 	primary key (order_part_id)
 );
+
 create table o_ac_order_line (
 	order_item_id int8 NOT NULL,
   version int4 not null,
@@ -802,7 +802,8 @@ create table o_ac_order_line (
   fk_order_part_id int8,
   fk_offer_id int8,
 	primary key (order_item_id)
-); 
+);
+
 create table o_ac_transaction (
 	transaction_id int8 NOT NULL,
   version int4 not null,
@@ -1089,7 +1090,6 @@ create table o_im_preferences (
    primary key (id)
 );
 
-
 -- add mapper table
 create table o_mapper (
    id int8 not null,
@@ -2041,10 +2041,10 @@ create index lc_action_idx on o_lifecycle (action);
 alter table o_mark add constraint FKF26C8375236F21X foreign key (creator_id) references o_bs_identity (id);
 create index FKF26C8375236F21X on o_mark (creator_id);
 
-create index mark_id_idx on o_mark (resid);
-create index mark_name_idx on o_mark (resname);
-create index mark_subpath_idx on o_mark (ressubpath);
-create index mark_businesspath_idx on o_mark (businesspath);
+create index mark_id_idx on o_mark(resid);
+create index mark_name_idx on o_mark(resname);
+create index mark_subpath_idx on o_mark(ressubpath);
+create index mark_businesspath_idx on o_mark(businesspath);
 
 -- forum
 alter table o_message add constraint FKF26C8375236F20E foreign key (creator_id) references o_bs_identity;