diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/mom.py b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/mom.py
index 70c414eeb3a8ff3129a4443730ac6db632f3333c..328c24e9904319c7cf80861197359733f066d88b 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/mom.py
+++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/mom.py
@@ -69,6 +69,7 @@ def updateTaskMomDetails(task, momrpc):
                 t['mom_object_group_id'] = m['object_group_id']
                 t['mom_object_group_name'] = m.get('object_group_name')
                 t['mom_object_group_mom2object_id'] = m.get('object_group_mom2objectid')
+                t['mom_object_parent_group_id'] = m['parent_group_mom2id']
             else:
                 t['project_name'] = 'OTDB Only'
                 t['project_mom_id'] = -98
diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js
index 9011f4b027a8295aed79842adac5b9582ec2c966..51441b873305b41c671c3e85b3a32df7e82b2133 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js
+++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js
@@ -439,6 +439,41 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http,
         return defer.promise;
     };
 
+    self.getTasksByMoMParentGroupId = function(mom_object_parent_group_id) {
+        var defer = $q.defer();
+        var url = '/rest/tasks/mom/parentgroup/' + mom_object_parent_group_id;
+
+        $http.get(url).success(function(result) {
+            //convert datetime strings to Date objects
+            for(var i in result.tasks) {
+                var task = result.tasks[i];
+                task.starttime = self.convertDatestringToLocalUTCDate(task.starttime);
+                task.endtime = self.convertDatestringToLocalUTCDate(task.endtime);
+            }
+
+            var newTaskDict = self.toIdBasedDict(result.tasks);
+            var newTaskIds = Object.keys(newTaskDict);
+
+            for(var i = newTaskIds.length-1; i >= 0; i--) {
+                var task_id = newTaskIds[i];
+                if(!self.taskDict.hasOwnProperty(task_id)) {
+                    var task = newTaskDict[task_id];
+                    self.tasks.push(task);
+                    self.taskDict[task_id] = task;
+                }
+            }
+
+            self.taskChangeCntr++;
+            self.computeMinMaxTaskTimes();
+
+            defer.resolve(result.tasks);
+        }).error(function(result) {
+            defer.resolve(undefined);
+        });
+
+        return defer.promise;
+    };
+
     self.copyTask = function(task) {
         $http.put('/rest/tasks/' + task.id + '/copy').error(function(result) {
             console.log("Error. Could not copy task. " + result);
@@ -950,6 +985,27 @@ dataControllerMod.controller('DataController',
         return defer.promise;
     };
 
+    $scope.loadTasksByMoMParentGroupIdSelectAndJumpIntoView = function(mom_parent_group_id) {
+        var defer = $q.defer();
+        $scope.dataService.getTasksByMoMParentGroupId(mom_parent_group_id).then(function(tasks) {
+            if(tasks) {
+                var task_ids = tasks.map(function(t) { return t.id; });
+
+                $scope.dataService.setSelectedTaskIds(task_ids);
+
+                if(tasks.length > 1) {
+                    $scope.dataService.selected_project_id = tasks[0].project_mom_id;
+                }
+
+                $scope.jumpToSelectedTasks();
+                defer.resolve(tasks);
+            } else {
+                defer.resolve(undefined);
+            }
+        });
+        return defer.promise;
+    };
+
     $scope.selectCurrentTask = function() {
         var currentTasks = dataService.tasks.filter(function(t) { return t.starttime <= dataService.viewTimeSpan.to && t.endime >= dataService.viewTimeSpan.from; });
         if(currentTasks.lenght > 0) {
diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js
index bc41062e8bfed91338fe600793b586ed943a2343..5c19bb062b45755636aab3fffc33bc2bf25390a8 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js
+++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js
@@ -223,14 +223,20 @@ $scope.columns = [
                             if(mom_col && mom_col.filters.length && mom_col.filters[0].hasOwnProperty('term')) {
                                 var mom_id = mom_col.filters[0].term;
                                 $scope.$parent.$parent.loadTaskByMoMIdSelectAndJumpIntoView(mom_id).then(function(task) {
-                                    if(task) {
-                                        mom_col.filters[0].term = null;
-                                    } else {
+                                    mom_col.filters[0].term = null;
+                                    if(task == undefined) {
                                         //getting the task by mom_id did not find a task
                                         //maybe the entered id was a mom group_id?
                                         //let's try to loadTasksByMoMGroupIdSelectAndJumpIntoView
                                         $scope.$parent.$parent.loadTasksByMoMGroupIdSelectAndJumpIntoView(mom_id).then(function(tasks) {
-                                            mom_col.filters[0].term = null;
+                                            if(tasks == undefined || tasks.length == 0) {
+                                                //getting the tasks by mom group id did not find any tasks
+                                                //maybe the entered id was a mom parent group_id?
+                                                //let's try to loadTasksByMoMParentGroupIdSelectAndJumpIntoView
+                                                $scope.$parent.$parent.loadTasksByMoMParentGroupIdSelectAndJumpIntoView(mom_id).then(function(tasks) {
+                                                    //pass
+                                                });
+                                            }
                                         });
                                     }
                                 });
@@ -318,6 +324,7 @@ $scope.columns = [
                         mom_object_group_id: task.mom_object_group_id,
                         mom_object_group_name: task.mom_object_group_name,
                         mom_object_group_mom2object_id: task.mom_object_group_mom2object_id,
+                        mom_object_parent_group_id: task.mom_object_parent_group_id,
                         cluster: task.cluster,
                         blocked_by_ids: task.blocked_by_ids,
                         ingest_status: task.ingest_status === null ? undefined : task.ingest_status,
@@ -536,8 +543,24 @@ $scope.columns = [
         fillColumFilterSelectOptions(task_info, $scope.columns[6]);
     };
 
-    $scope.$watch('dataService.selected_task_ids', onSelectedTaskIdsChanged, true);}
-]);
+    $scope.$watch('dataService.selected_task_ids', onSelectedTaskIdsChanged, true);
+    $scope.$watch('dataService.selected_project_id', function() {
+        fillProjectsColumFilterSelectOptions();
+
+        var project_col = $scope.gridApi.grid.columns.find(function(c) {return c.field == 'project_name'; });
+        if(project_col && project_col.filters.length) {
+            if(dataService.selected_project_id != undefined) {
+                var projectName = dataService.momProjectsDict[dataService.selected_project_id].name;
+                if(projectName != undefined) {
+                    var project_names = project_col.filter.selectOptions.map(function(so) { return so.value;});
+                    if(project_names.includes(projectName)) {
+                        project_col.filters[0].term = projectName;
+                    }
+                }
+            }
+        }
+    });
+}]);
 
 gridControllerMod.directive('contextMenu', ['$document', '$window', function($document, $window) {
     return {
@@ -602,6 +625,14 @@ gridControllerMod.directive('contextMenu', ['$document', '$window', function($do
                 dataCtrlScope.loadTasksByMoMGroupIdSelectAndJumpIntoView(task.mom_object_group_id);
             });
 
+            var liElement = angular.element('<li><a href="#">Select parent group</a></li>');
+            ulElement.append(liElement);
+            liElement.on('click', function() {
+                closeContextMenu();
+                var dataCtrlScope = $scope.$parent.$parent.$parent.$parent.$parent.$parent.$parent.$parent.$parent.$parent;
+                dataCtrlScope.loadTasksByMoMParentGroupIdSelectAndJumpIntoView(task.mom_object_parent_group_id);
+            });
+
             var blocked_selected_cep4_tasks = selected_cep4_tasks.filter(function(t) { return (t.blocked_by_ids.length > 0); });
 
             if(blocked_selected_cep4_tasks.length > 0) {
diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/gantt-plugins/angular-gantt-contextmenu-plugin.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/gantt-plugins/angular-gantt-contextmenu-plugin.js
index ede6e85c255625569dbcad19f9a4391a6a26fef0..746cd6707e5418a217307c23f6d8c5a17d9bc8c7 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/gantt-plugins/angular-gantt-contextmenu-plugin.js
+++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/gantt-plugins/angular-gantt-contextmenu-plugin.js
@@ -76,6 +76,13 @@
                                 dataCtrlScope.loadTasksByMoMGroupIdSelectAndJumpIntoView(task.mom_object_group_id);
                             });
 
+                            var liElement = angular.element('<li><a href="#">Select parent group</a></li>');
+                            ulElement.append(liElement);
+                            liElement.on('click', function() {
+                                closeContextMenu();
+                                dataCtrlScope.loadTasksByMoMParentGroupIdSelectAndJumpIntoView(task.mom_object_parent_group_id);
+                            });
+
                             var blocked_selected_cep4_tasks = selected_cep4_tasks.filter(function(t) { return (t.blocked_by_ids.length > 0); });
 
                             if(blocked_selected_cep4_tasks.length > 0) {
diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py
index df76efa8cc5e72ea603473693cd9482c4c04d8fa..146ef8a2a7958e93d5dc4ff4579c7bc5aee3ce1f 100755
--- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py
+++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py
@@ -295,6 +295,20 @@ def getTasksByMoMGroupId(mom_group_id):
     except Exception as e:
         abort(404)
 
+@app.route('/rest/tasks/mom/parentgroup/<int:mom_parent_group_id>', methods=['GET'])
+@gzipped
+def getTasksByMoMParentGroupId(mom_parent_group_id):
+    try:
+        mom_ids = momqueryrpc.getTaskIdsInParentGroup(mom_parent_group_id)[str(mom_parent_group_id)]
+        tasks = rarpc.getTasks(mom_ids=mom_ids)
+
+        updateTaskMomDetails(tasks, momqueryrpc)
+        updateTaskStorageDetails(tasks, sqrpc)
+
+        return jsonify({'tasks': tasks})
+    except Exception as e:
+        abort(404)
+
 @app.route('/rest/tasks/<int:task_id>', methods=['PUT'])
 def putTask(task_id):
     if 'Content-Type' in request.headers and \
@@ -751,7 +765,7 @@ def main():
     global rarpc
     rarpc = RARPC(busname=options.radb_busname, servicename=options.radb_servicename, broker=options.broker)
     global momrpc
-    momrpc = MoMRPC(busname=options.mom_busname, servicename=options.mom_servicename, timeout=2.5, broker=options.broker)
+    momrpc = MoMRPC(busname=options.mom_busname, servicename=options.mom_servicename, timeout=10, broker=options.broker)
     global otdbrpc
     otdbrpc = OTDBRPC(busname=options.otdb_busname, servicename=options.otdb_servicename, broker=options.broker)
     global curpc
@@ -759,7 +773,7 @@ def main():
     global sqrpc
     sqrpc = StorageQueryRPC(busname=options.storagequery_busname, servicename=options.storagequery_servicename, broker=options.broker)
     global momqueryrpc
-    momqueryrpc = MoMQueryRPC(busname=options.mom_query_busname, servicename=options.mom_query_servicename, timeout=2.5, broker=options.broker)
+    momqueryrpc = MoMQueryRPC(busname=options.mom_query_busname, servicename=options.mom_query_servicename, timeout=10, broker=options.broker)
     global changeshandler
     changeshandler = ChangesHandler(radb_busname=options.radb_notification_busname, radb_subjects=options.radb_notification_subjects,
                                     dm_busname=options.dm_notification_busname, dm_subjects=options.dm_notification_subjects,