diff --git a/beat/web/reports/static/reports/app/controllers/groupsController.js b/beat/web/reports/static/reports/app/controllers/groupsController.js
index ced3af8c9e840e8e681ba67a80907a2340f98184..4038f203252d664933527fd7a434565a94e96da1 100644
--- a/beat/web/reports/static/reports/app/controllers/groupsController.js
+++ b/beat/web/reports/static/reports/app/controllers/groupsController.js
@@ -27,6 +27,7 @@ angular.module('reportApp').controller('GroupsController', ['$scope', 'ReportSer
 	ReportService.createGroup('great');
 	ReportService.addExperimentToGroup('exp1', 'great');
 	vm.test = 'test';
+	vm.report = $scope.report;
 
 	// ReportService stuff to be used directly in ui
 	vm.groups = ReportService.groups;
@@ -35,7 +36,7 @@ angular.module('reportApp').controller('GroupsController', ['$scope', 'ReportSer
 	vm.createGroup = function(name) {
 		ReportService.createGroup(name);
 		vm.newGroupName = '';
-	}
+	};
 	vm.deleteGroup = ReportService.deleteGroup;
 
 	// createGroup input val
diff --git a/beat/web/reports/static/reports/app/controllers/reportController.js b/beat/web/reports/static/reports/app/controllers/reportController.js
index 9b2d12c9fa232efa6d5b40f9c82cca1720a7eda9..25df17675382ca60abf2470ad9381f46034037d2 100644
--- a/beat/web/reports/static/reports/app/controllers/reportController.js
+++ b/beat/web/reports/static/reports/app/controllers/reportController.js
@@ -27,7 +27,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
 	$scope.report_id;
 	$scope.url_prefix;
 	$scope.reportFactory = reportFactory;
-	$scope.report;
+	$scope.report = {};
 	$scope.report_experiments = {};
 	$scope.num_report_items = 0;
 	$scope.max_num = 0;
@@ -70,23 +70,47 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
 		$scope.table_item_content = dataFactory.getData(data_table_itemcontent_file);
 	};
 
+	// saves a data object to an different object by iterating through
+	// the data obj's entries and assigning them one-by-one.
+	// Why? JS is pass-by-value, but complex datatypes (Objects, arrays, funcs) are pointers.
+	// Angular depends on these pointers in two-way bindings of complex datatypes.
+	// If one assigns a different obj, the two-way binding is lost!
+	function mutateSave(saveObj, dataObj){
+		let t = typeof(dataObj);
+
+		if (t === 'object' && saveObj) {
+			Object.entries(dataObj)
+			.forEach(([key, val]) => {
+				saveObj[key] = val;
+			});
+		} else if (t === 'array' && typeof(saveObj) === 'array') {
+			saveObj.length = 0;
+			dataObj.forEach(e => saveObj.push(e));
+		}
+	}
+
+	// saves the report data from the API to the $scope
+	function saveReportData(reportData){
+		mutateSave($scope.report, reportData);
+
+		$scope.report.url_prefix = $scope.url_prefix;
+
+		if($scope.report.content.alias_experiments != undefined){
+			mutateSave($scope.report_experiments_alias, $scope.report.content.alias_experiments);
+		}
+	}
+
 	function getReportData(user, report_id){
 		reportFactory.getReportInformation(user, report_id, $scope.url_prefix)
 		.success(function (reportData){
-			$scope.report = reportData;
-			$scope.report.url_prefix = $scope.url_prefix;
-
-			var experiments = $scope.report.experiments;
-			if($scope.report.content.alias_experiments != undefined){
-				$scope.report_experiments_alias = $scope.report.content.alias_experiments;
-			}
-
-			var promises = [];
+			saveReportData(reportData);
+			let promises = [];
 
 			function lastTask(){
 				getPlotters();
 			}
 
+			let experiments = $scope.report.experiments;
 			if(experiments != undefined){
 				promises.push(getExperimentDataForAuthor(experiments));
 				$scope.q.all(promises).then(lastTask);
@@ -102,15 +126,8 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
 	function getReportDataFromNumber(report_number, $q){
 		reportFactory.getReportInformationFromNumber(report_number, $scope.url_prefix)
 		.success(function (reportData){
-			$scope.report = reportData;
-			$scope.report.url_prefix = $scope.url_prefix;
-
-			var experiments = $scope.report.experiments;
-			if($scope.report.content.alias_experiments != undefined){
-				$scope.report_experiments_alias = $scope.report.content.alias_experiments;
-			}
-
-			var promises = [];
+			saveReportData(reportData);
+			let promises = [];
 
 			function lastTask(){
 				getPlotters();
@@ -130,13 +147,12 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
 	function getExperimentDataReportNumber(report_number){
 		experimentFactory.getAllExperimentResults($scope.url_prefix, report_number)
 		.then(function (experiments){
-			Object.entries(experiments).forEach(([name, exp]) => {
-				$scope.report_experiments[name] = exp;
-			});
+			mutateSave($scope.report_experiments, experiments);
+
 			$scope.report.all_experiments = experiments;
-			var experiment_aliases = Object.keys(experiments);
-			for(var i = 0; i < experiment_aliases.length; i++){
-				var experiment_alias = experiment_aliases[i];
+			let experiment_aliases = Object.keys(experiments);
+			for(let i = 0; i < experiment_aliases.length; i++){
+				let experiment_alias = experiment_aliases[i];
 
 				if($scope.report.content.alias_experiments != undefined){
 					if($scope.report.content.alias_experiments[experiment_alias] != undefined){
@@ -166,7 +182,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
 				$scope.sorted_experiments_keys_reverse = $scope.report.content.sorted_tables_keys_reverse;
 				$scope.sorted_experiments_keys_tables_sortkey = $scope.report.content.sorted_tables_sortkey;
 			}
-			for(var i = 0; i < Object.keys($scope.sorted_experiments_keys_tables_sortkey).length; i++){
+			for(let i = 0; i < Object.keys($scope.sorted_experiments_keys_tables_sortkey).length; i++){
 				$scope.sorted_tables.push(Object.keys($scope.sorted_experiments_keys_tables_sortkey)[i]);
 			}
 		});
@@ -175,13 +191,12 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
 	function getExperimentDataForAuthor(all_experiments){
 		experimentFactory.getAllExperimentResultsForAuthor($scope.user, $scope.report_id, $scope.url_prefix)
 		.then(function (experiments){
-			Object.entries(experiments).forEach(([name, exp]) => {
-				$scope.report_experiments[name] = exp;
-			});
+			mutateSave($scope.report_experiments, experiments);
+
 			$scope.report.all_experiments = experiments;
-			var experiment_aliases = Object.keys(experiments);
-			for(var i = 0; i < experiment_aliases.length; i++){
-				var experiment_alias = experiment_aliases[i];
+			let experiment_aliases = Object.keys(experiments);
+			for(let i = 0; i < experiment_aliases.length; i++){
+				let experiment_alias = experiment_aliases[i];
 
 				if($scope.report.content.alias_experiments != undefined){
 					if($scope.report.content.alias_experiments[experiment_alias] != undefined){
@@ -212,7 +227,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
 				$scope.sorted_experiments_keys_reverse = $scope.report.content.sorted_tables_keys_reverse;
 				$scope.sorted_experiments_keys_tables_sortkey = $scope.report.content.sorted_tables_sortkey;
 			}
-			for(var i = 0; i < Object.keys($scope.sorted_experiments_keys_tables_sortkey).length; i++){
+			for(let i = 0; i < Object.keys($scope.sorted_experiments_keys_tables_sortkey).length; i++){
 				$scope.sorted_tables.push(Object.keys($scope.sorted_experiments_keys_tables_sortkey)[i]);
 			}
 
@@ -222,9 +237,9 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
 	function getExperimentData(experiment_id){
 		experimentFactory.getExperimentInformation($scope.url_prefix, experiment_id)
 		.then(function (experimentData){
-			var experiments = $scope.report_experiments;
+			let experiments = $scope.report_experiments;
 			experiments[experiment_id] = experimentData;
-			$scope.report_experiments = experiments;
+			mutateSave($scope.report_experiments, experiments);
 			$scope.report.all_experiments = experiments;
 
 			if($scope.report.content.alias_experiments != undefined){
@@ -281,7 +296,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
 	function checkContent(){
 		if($scope.report.content != undefined){
 
-			var orderkeys = [];
+			let orderkeys = [];
 			angular.forEach($scope.report.content, function(value, key){
 				orderkeys.push(key);
 			});
@@ -300,21 +315,21 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
 				$scope.floating_point_precision.selected = $scope.report.content.floating_point_precision;
 			}
 
-			for(var i = 0; i < $scope.report.orderedcontent.length; i++){
-				var id_content = $scope.report.orderedcontent[i];
+			for(let i = 0; i < $scope.report.orderedcontent.length; i++){
+				let id_content = $scope.report.orderedcontent[i];
 				addElementToReport(id_content);
 			}
 		}
 	}
 
 	function addElementToReport(id_content){
-		var type = id_content.split("_")[0];
+		let type = id_content.split("_")[0];
 		$scope.$broadcast("addSavedElement", id_content, type);
 	}
 
 	function intersectBlocks(experiment_id){
 		$scope.report_experiments_blocks[experiment_id] = Object.keys($scope.report_experiments[experiment_id].blocks_status);
-		var values = $.map($scope.report_experiments_blocks[experiment_id], function(value, key) { return value; });
+		let values = $.map($scope.report_experiments_blocks[experiment_id], function(value, key) { return value; });
 		$scope.report_experiments_blocks_merged_blocks.push(values);
 	}
 
@@ -324,7 +339,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
 			//only get algorithms
 			if(key_algorithm.indexOf("/") != -1){
 				$scope.report_algorithm_parameters[key_algorithm] = value_algorithm;
-				var experiment_algorithm_parameter = {};
+				let experiment_algorithm_parameter = {};
 
 				if($scope.report_algorithm_parameters_experiment[experiment_id] == undefined){
 					$scope.report_algorithm_parameters_experiment[experiment_id] = {};
@@ -376,7 +391,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
 	}
 
 	function unique(list){
-		var result = [];
+		let result = [];
 		$.each(list, function(i, e) {
 			if ($.inArray(e, result) == -1) result.push(e);
 		});