diff --git a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/activities/ExplorerActivity.java b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/activities/ExplorerActivity.java
index ecf9c22..fac5069 100644
--- a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/activities/ExplorerActivity.java
+++ b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/activities/ExplorerActivity.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c)  2006, 2019 THALES GLOBAL SERVICES.
+ * Copyright (c)  2006, 2020 THALES GLOBAL SERVICES.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@
 import org.eclipse.amalgam.explorer.activity.ui.ActivityExplorerActivator;
 import org.eclipse.amalgam.explorer.activity.ui.api.editor.pages.helper.FormHelper;
 import org.eclipse.amalgam.explorer.activity.ui.api.editor.predicates.IPredicate;
+import org.eclipse.amalgam.explorer.activity.ui.api.editor.sections.ActivityExplorerSection;
 import org.eclipse.amalgam.explorer.activity.ui.internal.extension.point.manager.ActivityExplorerExtensionManager;
 import org.eclipse.amalgam.explorer.activity.ui.internal.intf.IOrdered;
 import org.eclipse.amalgam.explorer.activity.ui.internal.intf.IVisibility;
@@ -28,108 +29,110 @@
 
 public class ExplorerActivity implements IVisibility, IOrdered, IPluginContribution {
 
-	public ExplorerActivity(IConfigurationElement element_p) {
-		name = ActivityExplorerExtensionManager.getName(element_p);
-		description = ActivityExplorerExtensionManager.getDescription(element_p);
-		index = Integer.parseInt(ActivityExplorerExtensionManager.getIndex(element_p));
+  public ExplorerActivity(IConfigurationElement element_p, ActivityExplorerSection section) {
+    name = ActivityExplorerExtensionManager.getName(element_p);
+    description = ActivityExplorerExtensionManager.getDescription(element_p);
+    index = Integer.parseInt(ActivityExplorerExtensionManager.getIndex(element_p));
 
-		listener = ActivityExplorerExtensionManager.getActivityAdapter(element_p);
+    listener = ActivityExplorerExtensionManager.getActivityAdapter(element_p);
 
-		image = ActivityExplorerExtensionManager.getImage(element_p);
-		id = ActivityExplorerExtensionManager.getId(element_p);
-		predicate = ActivityExplorerExtensionManager.getPredicate(element_p);
-		pluginId = element_p.getContributor().getName();
-	}
+    image = ActivityExplorerExtensionManager.getImage(element_p);
+    id = ActivityExplorerExtensionManager.getId(element_p);
+    predicate = ActivityExplorerExtensionManager.getPredicate(element_p);
+    pluginId = element_p.getContributor().getName();
+    this.section = section;
+  }
 
-	public ExplorerActivity(String id, String name, IHyperlinkListener listener, IPredicate predicate, int index) {
+  public ExplorerActivity(String id, String name, IHyperlinkListener listener, IPredicate predicate, int index, ActivityExplorerSection section) {
 		super();
 		this.id = id;
 		this.name = name;
 		this.listener = listener;
 		this.predicate = predicate;
+		this.section = section;
 		setPosition(index);
-
 	}
 
-	public String getId() {
-		return id;
-	}
+  public String getId() {
+    return id;
+  }
 
-	public String getName() {
-		return name;
-	}
+  public String getName() {
+    return name;
+  }
 
-	public IHyperlinkListener getListener() {
-		return listener;
-	}
+  public IHyperlinkListener getListener() {
+    return listener;
+  }
 
-	private String pluginId;
-	private String id;
-	private String name;
-	private IHyperlinkListener listener;
-	private int index;
-	private Image image;
-	private String description;
-	private IPredicate predicate;
+  private String pluginId;
+  private String id;
+  private String name;
+  private IHyperlinkListener listener;
+  private int index;
+  private Image image;
+  private String description;
+  private IPredicate predicate;
+  private ActivityExplorerSection section;
 
-	public Image getImage() {
-		return image;
-	}
+  public Image getImage() {
+    return image;
+  }
 
-	public String getDescription() {
-		return description;
-	}
+  public String getDescription() {
+    return description;
+  }
 
-	/**
-	 * Return true this activity is visible.
-	 */
-	public boolean isVisible() {
+  /**
+   * Return true this activity is visible.
+   */
+  public boolean isVisible() {
 
-		boolean result = ActivityExplorerActivator.getDefault().getPreferenceStore().getBoolean(getId());
-		if (predicate != null) {
-			result &= predicate.isOk();
-		}
-		result &= !WorkbenchActivityHelper.filterItem(this);
-		return result;
-	}
+    boolean result = ActivityExplorerActivator.getDefault().getPreferenceStore().getBoolean(getId());
+    if (predicate != null) {
+      result &= predicate.isActivityOk(this);
+    }
+    result &= !WorkbenchActivityHelper.filterItem(this);
+    return result;
+  }
 
-	public IPredicate getPredicate() {
-		return predicate;
-	}
+  public IPredicate getPredicate() {
+    return predicate;
+  }
 
-	public int getPosition() {
-		return index;
-	}
+  public int getPosition() {
+    return index;
+  }
 
-	public void setPosition(int index_p) {
-		this.index = index_p;
+  public void setPosition(int index_p) {
+    this.index = index_p;
 
-	}
+  }
 
-	public Control init(Composite activityContainer_p, FormToolkit toolkit_p) {
-		widget = FormHelper.createLinkWithDescription(toolkit_p, activityContainer_p, image, name, null, description,
-				listener);
-		return widget;
+  public Control init(Composite activityContainer_p, FormToolkit toolkit_p) {
+    widget = FormHelper.createLinkWithDescription(toolkit_p, activityContainer_p, image, name, null, description,
+        listener);
+    return widget;
 
-	}
+  }
 
-	ImageHyperlink widget;
+  ImageHyperlink widget;
 
-	public ImageHyperlink getWidget() {
-		return widget;
-	}
+  public ImageHyperlink getWidget() {
+    return widget;
+  }
 
-	public void dispose() {
-		// dispose the section widget
-		if (widget != null && !widget.isDisposed())
-			widget.dispose();
+  public void dispose() {
+    // dispose the section widget
+    if (widget != null && !widget.isDisposed())
+      widget.dispose();
 
-	}
+  }
 
-	public int compareTo(IOrdered arg0) {
-		return new Integer(getPosition()).compareTo(new Integer(arg0.getPosition()));
+  public int compareTo(IOrdered arg0) {
+    return new Integer(getPosition()).compareTo(new Integer(arg0.getPosition()));
 
-	}
+  }
 
   @Override
   public String getLocalId() {
@@ -140,4 +143,8 @@
   public String getPluginId() {
     return pluginId;
   }
+  
+  public ActivityExplorerSection getSection() {
+    return section;
+  }
 }
diff --git a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/pages/ActivityExplorerPage.java b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/pages/ActivityExplorerPage.java
index 2641721..3b18f69 100644
--- a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/pages/ActivityExplorerPage.java
+++ b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/pages/ActivityExplorerPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c)  2006, 2017 THALES GLOBAL SERVICES.
+ * Copyright (c)  2006, 2020 THALES GLOBAL SERVICES.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -379,7 +379,7 @@
   protected void handleContributedSectionsFor(IConfigurationElement contributor) {
 
 		  // create a Activity Explorer section
-		  ActivityExplorerSection section = new ActivityExplorerSection(contributor) {
+		  ActivityExplorerSection section = new ActivityExplorerSection(contributor, this) {
 			  @Override
 			  protected IAction[] getToolBarActions() {
 				  IAction[] toolbarActions = new IAction[] { new DescriptionAction(ActivityExplorerPage.this.getSite().getShell(), description)
diff --git a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/pages/BasicSessionActivityExplorerPage.java b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/pages/BasicSessionActivityExplorerPage.java
index 5c4c7fe..1187596 100644
--- a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/pages/BasicSessionActivityExplorerPage.java
+++ b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/pages/BasicSessionActivityExplorerPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c)  2006, 2015 THALES GLOBAL SERVICES.
+ * Copyright (c)  2006, 2020 THALES GLOBAL SERVICES.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -270,7 +270,7 @@
   protected void handleContributedSectionsFor(IConfigurationElement contributor_p) {
 
 	  // create the session
-	  ActivityExplorerSection newSection = new ActivityExplorerSection(contributor_p) {
+	  ActivityExplorerSection newSection = new ActivityExplorerSection(contributor_p, this) {
 		  @Override
 		  protected IAction[] getToolBarActions() {
 
diff --git a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/predicates/IPredicate.java b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/predicates/IPredicate.java
index 6285050..817b85e 100644
--- a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/predicates/IPredicate.java
+++ b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/predicates/IPredicate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c)  2006, 2015 THALES GLOBAL SERVICES.
+ * Copyright (c)  2006, 2020 THALES GLOBAL SERVICES.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,20 @@
  *******************************************************************************/
 package org.eclipse.amalgam.explorer.activity.ui.api.editor.predicates;
 
+import org.eclipse.amalgam.explorer.activity.ui.api.editor.activities.ExplorerActivity;
+import org.eclipse.amalgam.explorer.activity.ui.api.editor.pages.CommonActivityExplorerPage;
+
 public interface IPredicate {
 
-	public boolean isOk();
+  public default boolean isOk() {
+    return true;
+  }
+  
+	public default boolean isActivityOk(ExplorerActivity activity) {
+	  return true;
+	}
 
+	public default boolean isPageOk(CommonActivityExplorerPage page) {
+    return true;
+  }
 }
diff --git a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/sections/ActivityExplorerSection.java b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/sections/ActivityExplorerSection.java
index 34111d6..c29734e 100644
--- a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/sections/ActivityExplorerSection.java
+++ b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/sections/ActivityExplorerSection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c)  2006, 2019 THALES GLOBAL SERVICES.
+ * Copyright (c)  2006, 2020 THALES GLOBAL SERVICES.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@
 
 import org.eclipse.amalgam.explorer.activity.ui.ActivityExplorerActivator;
 import org.eclipse.amalgam.explorer.activity.ui.api.editor.activities.ExplorerActivity;
+import org.eclipse.amalgam.explorer.activity.ui.api.editor.pages.ActivityExplorerPage;
 import org.eclipse.amalgam.explorer.activity.ui.api.editor.pages.helper.FormHelper;
 import org.eclipse.amalgam.explorer.activity.ui.api.editor.pages.helper.HTMLHelper;
 import org.eclipse.amalgam.explorer.activity.ui.api.manager.ActivityExplorerManager;
@@ -56,7 +57,7 @@
 	 * 
 	 * @param contributor
 	 */
-	public ActivityExplorerSection(IConfigurationElement contributor) {
+	public ActivityExplorerSection(IConfigurationElement contributor, ActivityExplorerPage activityPage) {
 		this.id = ActivityExplorerExtensionManager.getId(contributor);
 		this.name = ActivityExplorerExtensionManager.getName(contributor);
 		this.isExpanded = ActivityExplorerExtensionManager.getIsExpanded(contributor);
@@ -74,6 +75,7 @@
 		this.isFiltering = ActivityExplorerExtensionManager.getIsFiltering(contributor);
 		createActivities(contributor);
 		this.pluginId = contributor.getContributor().getName();
+		this.activityPage = activityPage;
 	}
 
 	/**
@@ -88,7 +90,7 @@
 	 */
 
 	public ActivityExplorerSection(String id, String name, int index, boolean isExpanded, boolean isFiltering,
-			String description, List<ExplorerActivity> activities) {
+			String description, List<ExplorerActivity> activities, ActivityExplorerPage activityPage) {
 		super();
 		this.id = id;
 		this.name = name;
@@ -96,6 +98,7 @@
 		this.isExpanded = isExpanded;
 		this.isFiltering = isFiltering;
 		this.activities.addAll(activities);
+		this.activityPage = activityPage;
 	}
 
 	private TreeSet<ExplorerActivity> activities;
@@ -113,7 +116,7 @@
 		List<IConfigurationElement> activities = ActivityExplorerExtensionManager.getActivities(contributor);
 		for (IConfigurationElement element : activities) {
 			try {
-				this.activities.add(new ExplorerActivity(element));
+				this.activities.add(new ExplorerActivity(element, this));
 			} catch (NumberFormatException e){
 
 				StringBuilder message = new StringBuilder();
@@ -197,6 +200,7 @@
 	private IAction[] toolbarActions;
 	private Section widget;
 	private String pluginId;
+	private ActivityExplorerPage activityPage;
 
 	/**
 	 * Return true if the section is defined as expanded.
@@ -425,4 +429,8 @@
   public String getPluginId() {
     return pluginId;
   }
+  
+  public ActivityExplorerPage getActivityExplorerPage() {
+    return activityPage;
+  }
 }
