You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2026/04/19 23:57:53 UTC

(cayenne) 05/06: Modeler events cleanup

This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit 51b076b02dc2f352c8cd55070645b7bbc8d55629
Author: Andrus Adamchik <an...@objectstyle.com>
AuthorDate: Sun Apr 19 16:09:55 2026 -0400

    Modeler events cleanup
---
 .../cayenne/modeler/CayenneModelerController.java  | 102 +++---
 .../cayenne/modeler/CayenneModelerFrame.java       | 357 +++++++--------------
 .../apache/cayenne/modeler/NavigationHistory.java  |  18 +-
 .../apache/cayenne/modeler/ProjectController.java  | 354 +++++++++++---------
 .../apache/cayenne/modeler/ProjectTreeView.java    |  40 +--
 .../cayenne/modeler/action/ActionManager.java      |   6 +-
 .../modeler/action/BaseViewEntityAction.java       |   4 +-
 .../modeler/action/CreateAttributeAction.java      |   6 +-
 .../modeler/action/CreateDataMapAction.java        |   2 +-
 .../modeler/action/CreateDbEntityAction.java       |   2 +-
 .../modeler/action/CreateEmbeddableAction.java     |   2 +-
 .../cayenne/modeler/action/CreateNodeAction.java   |   2 +-
 .../modeler/action/CreateObjEntityAction.java      |   2 +-
 .../modeler/action/CreateProcedureAction.java      |   2 +-
 .../action/CreateProcedureParameterAction.java     |   2 +-
 .../cayenne/modeler/action/CreateQueryAction.java  |   2 +-
 .../modeler/action/CreateRelationshipAction.java   |   4 +-
 .../modeler/action/DefaultActionManager.java       |  24 +-
 .../apache/cayenne/modeler/action/FindAction.java  |  48 +--
 .../cayenne/modeler/action/GenerateCodeAction.java |   2 +-
 .../modeler/action/ImportEOModelAction.java        |   4 +-
 .../cayenne/modeler/action/NewProjectAction.java   |   2 +-
 .../modeler/action/ObjEntitySyncAction.java        |   2 +-
 .../modeler/action/ShowValidationConfigAction.java |   2 +-
 .../modeler/action/ShowValidationOptionAction.java |   2 +-
 .../modeler/dialog/DbRelationshipDialog.java       |   2 +-
 .../modeler/dialog/db/load/DbLoadResultDialog.java |   2 +-
 .../dialog/objentity/ObjAttributeInfoDialog.java   |   4 +-
 .../dialog/objentity/ObjRelationshipInfo.java      |   2 +-
 .../cayenne/modeler/dialog/query/QueryType.java    |   2 +-
 .../dialog/validator/AttributeErrorMsg.java        |   8 +-
 .../modeler/dialog/validator/DataMapErrorMsg.java  |   2 +-
 .../modeler/dialog/validator/DataNodeErrorMsg.java |   2 +-
 .../modeler/dialog/validator/DomainErrorMsg.java   |   2 +-
 .../validator/EmbeddableAttributeErrorMsg.java     |   4 +-
 .../dialog/validator/EmbeddableErrorMsg.java       |   2 +-
 .../modeler/dialog/validator/EntityErrorMsg.java   |   4 +-
 .../dialog/validator/ProcedureErrorMsg.java        |   2 +-
 .../validator/ProcedureParameterErrorMsg.java      |   4 +-
 .../modeler/dialog/validator/QueryErrorMsg.java    |   2 +-
 .../dialog/validator/RelationshipErrorMsg.java     |   8 +-
 .../modeler/dialog/welcome/WelcomeScreen.java      |  40 +--
 .../cayenne/modeler/editor/DataDomainView.java     |   2 +-
 .../editor/{EditorView.java => EditorPanel.java}   | 138 ++------
 .../modeler/editor/EmbeddableAttributeTab.java     |   4 +-
 .../cayenne/modeler/editor/EmbeddableTab.java      |   2 +-
 .../modeler/editor/ObjAttributeTableModel.java     |   4 +-
 .../modeler/editor/ObjEntityAttributePanel.java    |   4 +-
 .../editor/ObjEntityAttributeRelationshipTab.java  |   6 +-
 .../editor/ObjEntityCallbackMethodsTab.java        |   8 +-
 .../modeler/editor/ObjEntityRelationshipPanel.java |   4 +-
 .../cayenne/modeler/editor/ObjEntityTab.java       |   8 +-
 .../modeler/editor/ProcedureParameterTab.java      |   4 +-
 .../cayenne/modeler/editor/ProcedureTab.java       |   4 +-
 .../modeler/editor/SQLTemplatePrefetchTab.java     |   2 +-
 .../modeler/editor/SelectQueryPrefetchTab.java     |   2 +-
 .../editor/cgen/domain/CgenTabController.java      |   2 +-
 .../editor/dbentity/DbEntityAttributePanel.java    |   4 +-
 .../dbentity/DbEntityAttributeRelationshipTab.java |   2 +-
 .../editor/dbentity/DbEntityRelationshipPanel.java |   4 +-
 .../modeler/editor/dbentity/DbEntityTab.java       |   4 +-
 .../dbimport/domain/DbImportTabController.java     |   2 +-
 .../display/CallbackMethodDisplayListener.java     |   2 +-
 .../event/display/DataMapDisplayListener.java      |   3 +-
 .../event/display/DataNodeDisplayListener.java     |   3 +-
 .../event/display/DbAttributeDisplayListener.java  |   6 +-
 .../event/display/DbEntityDisplayListener.java     |   9 +-
 .../display/DbRelationshipDisplayListener.java     |  10 +-
 .../event/display/DomainDisplayListener.java       |   7 +-
 .../EmbeddableAttributeDisplayListener.java        |   6 +-
 .../event/display/EmbeddableDisplayListener.java   |   2 +-
 .../display/MultipleObjectsDisplayListener.java    |  12 +-
 .../event/display/ObjAttributeDisplayListener.java |   9 +-
 .../event/display/ObjEntityDisplayListener.java    |  10 +-
 .../event/display/ProcedureDisplayListener.java    |   7 +-
 .../display/ProcedureParameterDisplayListener.java |   4 +-
 .../event/display/QueryDisplayListener.java        |   6 +-
 .../cayenne/modeler/graph/DataDomainGraphTab.java  |   2 +-
 .../graph/action/ShowGraphEntityAction.java        |   8 +-
 .../undo/BaseRemovePropertyUndoableEdit.java       |   2 +-
 .../undo/ChangePKGeneratorUndoableEdit.java        |   2 +-
 .../modeler/undo/CreateAttributeUndoableEdit.java  |   4 +-
 .../modeler/undo/CreateDataMapUndoableEdit.java    |   2 +-
 .../undo/CreateProcedureParameterUndoableEdit.java |   2 +-
 .../undo/CreateRelationshipUndoableEdit.java       |   4 +-
 .../modeler/undo/JUndoableCheckBoxEdit.java        |  18 +-
 .../cayenne/modeler/undo/TextCompoundEdit.java     |  30 +-
 .../apache/cayenne/modeler/util/CayenneAction.java |   6 +-
 .../util/state/AttributeDisplayEventType.java      |   8 +-
 .../util/state/DataMapDisplayEventType.java        |  18 +-
 .../util/state/DataNodeDisplayEventType.java       |   2 +-
 .../modeler/util/state/DisplayEventTypes.java      |  26 +-
 .../modeler/util/state/DomainDisplayEventType.java |   2 +-
 .../state/EmbeddableAttributeDisplayEventType.java |   4 +-
 .../util/state/EmbeddableDisplayEventType.java     |   2 +-
 .../modeler/util/state/EntityDisplayEventType.java |  42 ++-
 .../state/MultipleObjectsDisplayEventType.java     |   4 +-
 .../util/state/ProcedureDisplayEventType.java      |   2 +-
 .../state/ProcedureParameterDisplayEventType.java  |   4 +-
 .../modeler/util/state/ProjectStateUtil.java       |  73 -----
 .../modeler/util/state/QueryDisplayEventType.java  |   2 +-
 .../util/state/RelationshipDisplayEventType.java   |   8 +-
 102 files changed, 687 insertions(+), 981 deletions(-)

diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
index bf319d5af..8144b2cd2 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
@@ -23,22 +23,21 @@ import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.modeler.action.ExitAction;
 import org.apache.cayenne.modeler.action.OpenProjectAction;
 import org.apache.cayenne.modeler.dialog.validator.ValidatorDialog;
-import org.apache.cayenne.modeler.editor.EditorView;
 import org.apache.cayenne.modeler.editor.DbImportController;
+import org.apache.cayenne.modeler.editor.EditorPanel;
 import org.apache.cayenne.modeler.init.platform.PlatformInitializer;
 import org.apache.cayenne.modeler.pref.ComponentGeometry;
 import org.apache.cayenne.modeler.pref.FSPath;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.modeler.util.FileFilters;
-import org.apache.cayenne.modeler.util.state.ProjectStateUtil;
 import org.apache.cayenne.project.Project;
 import org.apache.cayenne.project.validation.ProjectValidator;
 import org.apache.cayenne.validation.ValidationFailure;
 import org.apache.cayenne.validation.ValidationResult;
 
-import javax.swing.WindowConstants;
+import javax.swing.*;
 import javax.swing.filechooser.FileFilter;
-import java.awt.Component;
+import java.awt.*;
 import java.awt.datatransfer.DataFlavor;
 import java.awt.datatransfer.Transferable;
 import java.awt.dnd.DropTarget;
@@ -60,12 +59,10 @@ import java.util.prefs.Preferences;
  */
 public class CayenneModelerController extends CayenneController {
 
-    private static final ProjectStateUtil PROJECT_STATE_UTIL = new ProjectStateUtil();
-
     private final ProjectController projectController;
     private final CayenneModelerFrame frame;
-	private EditorView editorView;
-	private final DbImportController dbImportController;
+    private EditorPanel editorPanel;
+    private final DbImportController dbImportController;
 
     public CayenneModelerController(Application application) {
         super(application);
@@ -99,13 +96,34 @@ public class CayenneModelerController extends CayenneController {
         return path;
     }
 
-    protected void initBindings() {
+    private boolean processDropAction(Transferable transferable) {
+        List<File> fileList;
+        try {
+            fileList = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
+        } catch (Exception e) {
+            return false;
+        }
+
+        File transferFile = fileList.get(0);
+        if (transferFile.isFile()) {
+            FileFilter filter = FileFilters.getApplicationFilter();
+            if (filter.accept(transferFile)) {
+                ActionEvent e = new ActionEvent(transferFile, ActionEvent.ACTION_PERFORMED, "OpenProject");
+                Application.getInstance().getActionManager().getAction(OpenProjectAction.class).actionPerformed(e);
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    public void onStartup() {
         frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
 
         frame.addWindowListener(new WindowAdapter() {
             @Override
             public void windowClosing(WindowEvent e) {
-                PROJECT_STATE_UTIL.saveLastState(projectController);
+                projectController.saveSelectionToPrefs();
                 getApplication().getActionManager().getAction(ExitAction.class).exit();
             }
         });
@@ -113,7 +131,7 @@ public class CayenneModelerController extends CayenneController {
         // Register a hook to save the window position when quit via the app menu.
         // This is in Mac OSX only.
         if (System.getProperty("os.name").startsWith("Mac OS")) {
-            Runnable runner = () -> PROJECT_STATE_UTIL.saveLastState(projectController);
+            Runnable runner = () -> projectController.saveSelectionToPrefs();
             Runtime.getRuntime().addShutdownHook(new Thread(runner, "Window Prefs Hook"));
         }
 
@@ -128,35 +146,7 @@ public class CayenneModelerController extends CayenneController {
 
         ComponentGeometry geometry = new ComponentGeometry(frame.getClass(), null);
         geometry.bind(frame, 1200, 720, 0);
-    }
-
-
-    @SuppressWarnings("unchecked")
-    private boolean processDropAction(Transferable transferable) {
-        List<File> fileList;
-        try {
-            fileList = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
-        } catch (Exception e) {
-            return false;
-        }
 
-        if (fileList != null) {
-            File transferFile = fileList.get(0);
-            if (transferFile.isFile()) {
-                FileFilter filter = FileFilters.getApplicationFilter();
-                if (filter.accept(transferFile)) {
-                    ActionEvent e = new ActionEvent(transferFile, ActionEvent.ACTION_PERFORMED, "OpenProject");
-                    Application.getInstance().getActionManager().getAction(OpenProjectAction.class).actionPerformed(e);
-                    return true;
-                }
-            }
-        }
-
-        return false;
-    }
-
-    public void onStartup() {
-        initBindings();
         frame.setVisible(true);
     }
 
@@ -172,19 +162,17 @@ public class CayenneModelerController extends CayenneController {
     }
 
     public void onProjectClosed() {
-        PROJECT_STATE_UTIL.saveLastState(projectController);
+        projectController.saveSelectionToPrefs();
 
         // --- update view
-        frame.setView(null);
+        frame.setEditorPanel(null);
 
         // repaint is needed, since sometimes there is a
         // trace from menu left on the screen
         frame.repaint();
         frame.setTitle("");
 
-        projectController.setProject(null);
-
-        projectController.reset();
+        projectController.projectClosed();
         application.getActionManager().projectClosed();
 
         updateStatus("Project Closed...");
@@ -195,12 +183,13 @@ public class CayenneModelerController extends CayenneController {
      */
     public void onProjectOpened(Project project) {
 
-        projectController.setProject(project);
+        projectController.projectOpened(project);
+        frame.setTitle(getProjectLocationString());
 
-        editorView = new EditorView(projectController);
-        frame.setView(editorView);
+        editorPanel = new EditorPanel(projectController);
+        frame.setEditorPanel(editorPanel);
 
-        projectController.projectOpened();
+        projectController.restoreSelectionFromPrefs();
         application.getActionManager().projectOpened();
 
         // do status update AFTER the project is actually opened...
@@ -217,10 +206,6 @@ public class CayenneModelerController extends CayenneController {
             }
         }
 
-        frame.setTitle(getProjectLocationString());
-
-        PROJECT_STATE_UTIL.fireLastState(projectController);
-
         // for validation purposes combine load failures with post-load validation (not
         // sure if that'll cause duplicate messages?).
         List<ValidationFailure> allFailures = new ArrayList<>();
@@ -242,11 +227,13 @@ public class CayenneModelerController extends CayenneController {
         }
     }
 
-    public EditorView getEditorView() {
-    	return editorView;
+    public EditorPanel getEditorView() {
+        return editorPanel;
     }
 
-	/** Adds path to the list of last opened projects in preferences. */
+    /**
+     * Adds path to the list of last opened projects in preferences.
+     */
     public void addToLastProjListAction(File file) {
         Preferences prefLastProjFiles = ModelerPreferences.getLastProjFilesPref();
         List<File> arr = ModelerPreferences.getLastProjFiles();
@@ -290,7 +277,7 @@ public class CayenneModelerController extends CayenneController {
             new Thread(() -> {
                 try {
                     Thread.sleep(6 * 10000);
-                } catch (InterruptedException ignore){
+                } catch (InterruptedException ignore) {
                 }
                 if (message.equals(frame.getStatus().getText())) {
                     updateStatus(null);
@@ -304,7 +291,7 @@ public class CayenneModelerController extends CayenneController {
     }
 
     protected String getProjectLocationString() {
-        if(projectController.getProject().getConfigurationResource() == null) {
+        if (projectController.getProject().getConfigurationResource() == null) {
             return "[New Project]";
         }
         try {
@@ -314,5 +301,4 @@ public class CayenneModelerController extends CayenneController {
             throw new CayenneRuntimeException("Invalid project source URL", e);
         }
     }
-
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
index ebe77ef07..a93f896b3 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
@@ -22,22 +22,7 @@ package org.apache.cayenne.modeler;
 import org.apache.cayenne.modeler.action.*;
 import org.apache.cayenne.modeler.dialog.LogConsole;
 import org.apache.cayenne.modeler.dialog.welcome.WelcomeScreen;
-import org.apache.cayenne.modeler.editor.EditorView;
-import org.apache.cayenne.modeler.event.display.DataMapDisplayEvent;
-import org.apache.cayenne.modeler.event.display.DataMapDisplayListener;
-import org.apache.cayenne.modeler.event.display.DataNodeDisplayEvent;
-import org.apache.cayenne.modeler.event.display.DataNodeDisplayListener;
-import org.apache.cayenne.modeler.event.display.DbEntityDisplayListener;
-import org.apache.cayenne.modeler.event.display.EmbeddableDisplayEvent;
-import org.apache.cayenne.modeler.event.display.EmbeddableDisplayListener;
-import org.apache.cayenne.modeler.event.display.EntityDisplayEvent;
-import org.apache.cayenne.modeler.event.display.MultipleObjectsDisplayEvent;
-import org.apache.cayenne.modeler.event.display.MultipleObjectsDisplayListener;
-import org.apache.cayenne.modeler.event.display.ObjEntityDisplayListener;
-import org.apache.cayenne.modeler.event.display.ProcedureDisplayEvent;
-import org.apache.cayenne.modeler.event.display.ProcedureDisplayListener;
-import org.apache.cayenne.modeler.event.display.QueryDisplayEvent;
-import org.apache.cayenne.modeler.event.display.QueryDisplayListener;
+import org.apache.cayenne.modeler.editor.EditorPanel;
 import org.apache.cayenne.modeler.event.model.RecentFileListListener;
 import org.apache.cayenne.modeler.pref.ComponentGeometry;
 import org.apache.cayenne.modeler.util.ModelerUtil;
@@ -52,70 +37,68 @@ import java.awt.event.ComponentAdapter;
 import java.awt.event.ComponentEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.KeyListener;
+import java.util.ArrayList;
 import java.util.List;
-import java.util.Vector;
 
 /**
- * Main frame of CayenneModeler. Responsibilities include coordination of
- * enabling/disabling of menu and toolbar.
+ * Main frame of CayenneModeler GUI
  */
-public class CayenneModelerFrame extends JFrame implements DataNodeDisplayListener,
-        DataMapDisplayListener, ObjEntityDisplayListener, DbEntityDisplayListener,
-        QueryDisplayListener, ProcedureDisplayListener, MultipleObjectsDisplayListener,
-        EmbeddableDisplayListener {
+public class CayenneModelerFrame extends JFrame {
 
-    protected EditorView view;
-    protected RecentFileMenu recentFileMenu;
-    protected ActionManager actionManager;
-    protected JLabel status;
+    private final ActionManager actionManager;
+    private final List<RecentFileListListener> recentFileListeners;
 
-    /**
-     * Menu which shows/hides log console
-     */
-    protected JCheckBoxMenuItem logMenu;
-
-    /**
-     * Split panel, where main project editor and external component, like log console,
-     * are located
-     */
-    protected JSplitPane splitPane;
+    private final JSplitPane splitPane;
+    private final JLabel status;
+    private final WelcomeScreen welcomePanel;
 
-    /**
-     * Component, plugged into this frame
-     */
-    protected Component dockComponent;
-
-    /**
-     * Listeners for changes in recent file menu
-     */
-    protected List<RecentFileListListener> recentFileListeners;
-
-    /**
-     * Welcome screen, shown when no project is open
-     */
-    protected WelcomeScreen welcomeScreen;
+    private EditorPanel editorPanel;
+    private JCheckBoxMenuItem logMenu;
+    private Component dockComponent;
 
     public CayenneModelerFrame(ActionManager actionManager) {
         this.actionManager = actionManager;
-
-        recentFileListeners = new Vector<>();
+        this.recentFileListeners = new ArrayList<>();
 
         setIconImage(ModelerUtil.buildIcon("CayenneModeler.png").getImage());
         initMenus();
         initToolbar();
-        initStatusBar();
-        initWelcome();
 
-        fireRecentFileListChanged(); // start filling list in welcome screen and in menu
+        status = new JLabel();
+        status.setFont(status.getFont().deriveFont(Font.PLAIN, 10));
 
-        setView(null);
-    }
+        splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
+        splitPane.setBorder(TopBorder.create());
+        splitPane.getInsets().left = 5;
+        splitPane.getInsets().right = 5;
+        splitPane.setResizeWeight(0.7);
 
-    /**
-     * Returns an action object associated with the key.
-     */
-    private <T extends Action> T getAction(Class<T> type) {
-        return actionManager.getAction(type);
+        //  Moving this to try-catch block per CAY-940. Exception will be stack-traced
+        try {
+            ComponentGeometry geometry = new ComponentGeometry(this.getClass(), "splitPane/divider");
+            geometry.bindIntProperty(splitPane, JSplitPane.DIVIDER_LOCATION_PROPERTY, 400);
+        } catch (Exception ex) {
+            LoggerFactory.getLogger(getClass()).error("Cannot bind divider property", ex);
+        }
+
+        JPanel statusBar = new JPanel(new FlowLayout(FlowLayout.LEFT, 3, 1));
+        statusBar.setBorder(TopBorder.create());
+        // add placeholder
+        statusBar.add(Box.createVerticalStrut(16));
+        statusBar.add(status);
+
+        if (getContentPane() instanceof JPanel) {
+            ((JPanel) getContentPane()).setBorder(BorderFactory.createEmptyBorder());
+        }
+        getContentPane().add(splitPane, BorderLayout.CENTER);
+        getContentPane().add(statusBar, BorderLayout.SOUTH);
+
+        this.welcomePanel = new WelcomeScreen();
+        recentFileListeners.add(welcomePanel);
+
+        fireRecentFileListChanged(); // start filling list in welcome screen and in menu
+
+        setEditorPanel(null);
     }
 
     protected void initMenus() {
@@ -133,58 +116,58 @@ public class CayenneModelerFrame extends JFrame implements DataNodeDisplayListen
         toolMenu.setMnemonic(KeyEvent.VK_T);
         helpMenu.setMnemonic(KeyEvent.VK_H);
 
-        fileMenu.add(getAction(NewProjectAction.class).buildMenu());
-        fileMenu.add(getAction(OpenProjectAction.class).buildMenu());
-        fileMenu.add(getAction(ProjectAction.class).buildMenu());
-        fileMenu.add(getAction(ImportDataMapAction.class).buildMenu());
+        fileMenu.add(actionManager.getAction(NewProjectAction.class).buildMenu());
+        fileMenu.add(actionManager.getAction(OpenProjectAction.class).buildMenu());
+        fileMenu.add(actionManager.getAction(ProjectAction.class).buildMenu());
+        fileMenu.add(actionManager.getAction(ImportDataMapAction.class).buildMenu());
         fileMenu.addSeparator();
-        fileMenu.add(getAction(SaveAction.class).buildMenu());
-        fileMenu.add(getAction(SaveAsAction.class).buildMenu());
-        fileMenu.add(getAction(RevertAction.class).buildMenu());
+        fileMenu.add(actionManager.getAction(SaveAction.class).buildMenu());
+        fileMenu.add(actionManager.getAction(SaveAsAction.class).buildMenu());
+        fileMenu.add(actionManager.getAction(RevertAction.class).buildMenu());
         fileMenu.addSeparator();
 
-        editMenu.add(getAction(UndoAction.class).buildMenu());
-        editMenu.add(getAction(RedoAction.class).buildMenu());
-        editMenu.add(getAction(CutAction.class).buildMenu());
-        editMenu.add(getAction(CopyAction.class).buildMenu());
-        editMenu.add(getAction(PasteAction.class).buildMenu());
+        editMenu.add(actionManager.getAction(UndoAction.class).buildMenu());
+        editMenu.add(actionManager.getAction(RedoAction.class).buildMenu());
+        editMenu.add(actionManager.getAction(CutAction.class).buildMenu());
+        editMenu.add(actionManager.getAction(CopyAction.class).buildMenu());
+        editMenu.add(actionManager.getAction(PasteAction.class).buildMenu());
 
-        recentFileMenu = new RecentFileMenu("Recent Projects");
-        addRecentFileListListener(recentFileMenu);
+        RecentFileMenu recentFileMenu = new RecentFileMenu("Recent Projects");
+        recentFileListeners.add(recentFileMenu);
         fileMenu.add(recentFileMenu);
 
         fileMenu.addSeparator();
-        fileMenu.add(getAction(ExitAction.class).buildMenu());
+        fileMenu.add(actionManager.getAction(ExitAction.class).buildMenu());
 
-        projectMenu.add(getAction(ValidateAction.class).buildMenu());
-        projectMenu.add(getAction(ShowValidationConfigAction.class).buildMenu());
+        projectMenu.add(actionManager.getAction(ValidateAction.class).buildMenu());
+        projectMenu.add(actionManager.getAction(ShowValidationConfigAction.class).buildMenu());
         projectMenu.addSeparator();
-        projectMenu.add(getAction(CreateNodeAction.class).buildMenu());
-        projectMenu.add(getAction(CreateDataMapAction.class).buildMenu());
+        projectMenu.add(actionManager.getAction(CreateNodeAction.class).buildMenu());
+        projectMenu.add(actionManager.getAction(CreateDataMapAction.class).buildMenu());
 
-        projectMenu.add(getAction(CreateObjEntityAction.class).buildMenu());
-        projectMenu.add(getAction(CreateEmbeddableAction.class).buildMenu());
-        projectMenu.add(getAction(CreateDbEntityAction.class).buildMenu());
+        projectMenu.add(actionManager.getAction(CreateObjEntityAction.class).buildMenu());
+        projectMenu.add(actionManager.getAction(CreateEmbeddableAction.class).buildMenu());
+        projectMenu.add(actionManager.getAction(CreateDbEntityAction.class).buildMenu());
 
-        projectMenu.add(getAction(CreateProcedureAction.class).buildMenu());
-        projectMenu.add(getAction(CreateQueryAction.class).buildMenu());
+        projectMenu.add(actionManager.getAction(CreateProcedureAction.class).buildMenu());
+        projectMenu.add(actionManager.getAction(CreateQueryAction.class).buildMenu());
 
         projectMenu.addSeparator();
-        projectMenu.add(getAction(ObjEntitySyncAction.class).buildMenu());
-        projectMenu.add(getAction(DbEntitySyncAction.class).buildMenu());
+        projectMenu.add(actionManager.getAction(ObjEntitySyncAction.class).buildMenu());
+        projectMenu.add(actionManager.getAction(DbEntitySyncAction.class).buildMenu());
         projectMenu.addSeparator();
-        projectMenu.add(getAction(RemoveAction.class).buildMenu());
+        projectMenu.add(actionManager.getAction(RemoveAction.class).buildMenu());
 
-        toolMenu.add(getAction(InferRelationshipsAction.class).buildMenu());
-        toolMenu.add(getAction(ImportEOModelAction.class).buildMenu());
+        toolMenu.add(actionManager.getAction(InferRelationshipsAction.class).buildMenu());
+        toolMenu.add(actionManager.getAction(ImportEOModelAction.class).buildMenu());
         toolMenu.addSeparator();
-        toolMenu.add(getAction(GenerateCodeAction.class).buildMenu());
-        toolMenu.add(getAction(GenerateDBAction.class).buildMenu());
-        toolMenu.add(getAction(MigrateAction.class).buildMenu());
+        toolMenu.add(actionManager.getAction(GenerateCodeAction.class).buildMenu());
+        toolMenu.add(actionManager.getAction(GenerateDBAction.class).buildMenu());
+        toolMenu.add(actionManager.getAction(MigrateAction.class).buildMenu());
 
         // Menu for opening Log console
         toolMenu.addSeparator();
-        logMenu = getAction(ShowLogConsoleAction.class).buildCheckBoxMenu();
+        logMenu = actionManager.getAction(ShowLogConsoleAction.class).buildCheckBoxMenu();
 
         if (!LogConsole.getInstance().getConsoleProperty(LogConsole.DOCKED_PROPERTY)
                 && LogConsole.getInstance().getConsoleProperty(LogConsole.SHOW_CONSOLE_PROPERTY)) {
@@ -195,10 +178,10 @@ public class CayenneModelerFrame extends JFrame implements DataNodeDisplayListen
         toolMenu.add(logMenu);
 
         toolMenu.addSeparator();
-        toolMenu.add(getAction(ConfigurePreferencesAction.class).buildMenu());
+        toolMenu.add(actionManager.getAction(ConfigurePreferencesAction.class).buildMenu());
 
-        helpMenu.add(getAction(AboutAction.class).buildMenu());
-        helpMenu.add(getAction(DocumentationAction.class).buildMenu());
+        helpMenu.add(actionManager.getAction(AboutAction.class).buildMenu());
+        helpMenu.add(actionManager.getAction(DocumentationAction.class).buildMenu());
 
         JMenuBar menuBar = new JMenuBar();
 
@@ -218,45 +201,6 @@ public class CayenneModelerFrame extends JFrame implements DataNodeDisplayListen
         logMenu.setSelected(LogConsole.getInstance().getConsoleProperty(LogConsole.SHOW_CONSOLE_PROPERTY));
     }
 
-    protected void initStatusBar() {
-        status = new JLabel();
-        status.setFont(status.getFont().deriveFont(Font.PLAIN, 10));
-
-        splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
-        splitPane.setBorder(TopBorder.create());
-        splitPane.getInsets().left = 5;
-        splitPane.getInsets().right = 5;
-        splitPane.setResizeWeight(0.7);
-
-        //  Moving this to try-catch block per CAY-940. Exception will be stack-traced
-        try {
-            ComponentGeometry geometry = new ComponentGeometry(this.getClass(), "splitPane/divider");
-            geometry.bindIntProperty(splitPane, JSplitPane.DIVIDER_LOCATION_PROPERTY, 400);
-        } catch (Exception ex) {
-            LoggerFactory.getLogger(getClass()).error("Cannot bind divider property", ex);
-        }
-
-        JPanel statusBar = new JPanel(new FlowLayout(FlowLayout.LEFT, 3, 1));
-        statusBar.setBorder(TopBorder.create());
-        // add placeholder
-        statusBar.add(Box.createVerticalStrut(16));
-        statusBar.add(status);
-
-        if(getContentPane() instanceof JPanel) {
-            ((JPanel) getContentPane()).setBorder(BorderFactory.createEmptyBorder());
-        }
-        getContentPane().add(splitPane, BorderLayout.CENTER);
-        getContentPane().add(statusBar, BorderLayout.SOUTH);
-    }
-
-    /**
-     * Initializes welcome screen
-     */
-    protected void initWelcome() {
-        welcomeScreen = new WelcomeScreen();
-        addRecentFileListListener(welcomeScreen);
-    }
-
     /**
      * Plugs a component in the frame, between main area and status bar
      */
@@ -278,66 +222,58 @@ public class CayenneModelerFrame extends JFrame implements DataNodeDisplayListen
         splitPane.validate();
     }
 
-    /**
-     * @return Dock component
-     */
-    public Component getDockComponent() {
-        return dockComponent;
-    }
-
-    /** Initializes main toolbar. */
     protected void initToolbar() {
 
         final JToolBar toolBar = new MainToolBar();
 
         Dimension smallBtnDim = new Dimension(30, 30);
-        JButton backButton = getAction(NavigateBackwardAction.class).buildButton(1);
+        JButton backButton = actionManager.getAction(NavigateBackwardAction.class).buildButton(1);
         backButton.setMinimumSize(smallBtnDim);
         backButton.setPreferredSize(smallBtnDim);
         toolBar.add(backButton);
 
-        JButton forwardButton = getAction(NavigateForwardAction.class).buildButton(3);
+        JButton forwardButton = actionManager.getAction(NavigateForwardAction.class).buildButton(3);
         forwardButton.setMinimumSize(smallBtnDim);
         forwardButton.setPreferredSize(smallBtnDim);
         toolBar.add(forwardButton);
 
         toolBar.addSeparator(new Dimension(30, 0));
 
-        toolBar.add(getAction(NewProjectAction.class).buildButton(1));
-        toolBar.add(getAction(OpenProjectAction.class).buildButton(2));
-        toolBar.add(getAction(SaveAction.class).buildButton(3));
+        toolBar.add(actionManager.getAction(NewProjectAction.class).buildButton(1));
+        toolBar.add(actionManager.getAction(OpenProjectAction.class).buildButton(2));
+        toolBar.add(actionManager.getAction(SaveAction.class).buildButton(3));
 
         toolBar.addSeparator();
 
-        JButton removeButton = getAction(RemoveAction.class).buildButton();
+        JButton removeButton = actionManager.getAction(RemoveAction.class).buildButton();
         toolBar.add(removeButton);
 
         toolBar.addSeparator();
 
-        toolBar.add(getAction(CutAction.class).buildButton(1));
-        toolBar.add(getAction(CopyAction.class).buildButton(2));
-        toolBar.add(getAction(PasteAction.class).buildButton(3));
+        toolBar.add(actionManager.getAction(CutAction.class).buildButton(1));
+        toolBar.add(actionManager.getAction(CopyAction.class).buildButton(2));
+        toolBar.add(actionManager.getAction(PasteAction.class).buildButton(3));
 
         toolBar.addSeparator();
 
-        toolBar.add(getAction(UndoAction.class).buildButton(1));
-        toolBar.add(getAction(RedoAction.class).buildButton(3));
+        toolBar.add(actionManager.getAction(UndoAction.class).buildButton(1));
+        toolBar.add(actionManager.getAction(RedoAction.class).buildButton(3));
 
         toolBar.addSeparator();
 
-        toolBar.add(getAction(CreateNodeAction.class).buildButton(1));
-        toolBar.add(getAction(CreateDataMapAction.class).buildButton(3));
+        toolBar.add(actionManager.getAction(CreateNodeAction.class).buildButton(1));
+        toolBar.add(actionManager.getAction(CreateDataMapAction.class).buildButton(3));
 
         toolBar.addSeparator();
 
-        toolBar.add(getAction(CreateDbEntityAction.class).buildButton(1));
-        toolBar.add(getAction(CreateProcedureAction.class).buildButton(3));
+        toolBar.add(actionManager.getAction(CreateDbEntityAction.class).buildButton(1));
+        toolBar.add(actionManager.getAction(CreateProcedureAction.class).buildButton(3));
 
         toolBar.addSeparator();
 
-        toolBar.add(getAction(CreateObjEntityAction.class).buildButton(1));
-        toolBar.add(getAction(CreateEmbeddableAction.class).buildButton(2));
-        toolBar.add(getAction(CreateQueryAction.class).buildButton(3));
+        toolBar.add(actionManager.getAction(CreateObjEntityAction.class).buildButton(1));
+        toolBar.add(actionManager.getAction(CreateEmbeddableAction.class).buildButton(2));
+        toolBar.add(actionManager.getAction(CreateQueryAction.class).buildButton(3));
 
         // is used to place search feature components the most right on a toolbar
         toolBar.add(new SearchPanel());
@@ -357,13 +293,13 @@ public class CayenneModelerFrame extends JFrame implements DataNodeDisplayListen
             @Override
             public void componentResized(ComponentEvent e) {
                 int[] hidden, shown;
-                if(getSize().width < (13 * defaultBtnWidth + 300)) {
+                if (getSize().width < (13 * defaultBtnWidth + 300)) {
                     hidden = all;
                     shown = empty;
-                } else if(getSize().width < (16 * defaultBtnWidth + 300)) {
+                } else if (getSize().width < (16 * defaultBtnWidth + 300)) {
                     hidden = removeAndCopy;
                     shown = undo;
-                } else if(getSize().width < (18 * defaultBtnWidth + 300)) {
+                } else if (getSize().width < (18 * defaultBtnWidth + 300)) {
                     hidden = remove;
                     shown = undoAndCopy;
                 } else {
@@ -371,95 +307,39 @@ public class CayenneModelerFrame extends JFrame implements DataNodeDisplayListen
                     shown = all;
                 }
 
-                for(int i : hidden) {
+                for (int i : hidden) {
                     toolBar.getComponentAtIndex(i).setVisible(false);
                 }
-                for(int i : shown) {
+                for (int i : shown) {
                     toolBar.getComponentAtIndex(i).setVisible(true);
                 }
             }
         });
     }
 
-    public void currentDataNodeChanged(DataNodeDisplayEvent e) {
-        actionManager.dataNodeSelected();
-    }
-
-    public void currentDataMapChanged(DataMapDisplayEvent e) {
-        actionManager.dataMapSelected();
-    }
-
-    public void currentObjEntityChanged(EntityDisplayEvent e) {
-        actionManager.objEntitySelected();
-    }
-
-    public void currentDbEntityChanged(EntityDisplayEvent e) {
-        actionManager.dbEntitySelected();
-    }
-
-    public void currentQueryChanged(QueryDisplayEvent e) {
-        actionManager.querySelected();
-    }
-
-    public void currentProcedureChanged(ProcedureDisplayEvent e) {
-        actionManager.procedureSelected();
-    }
-
-    public void currentObjectsChanged(MultipleObjectsDisplayEvent e, Application application) {
-        actionManager.multipleObjectsSelected(e.getNodes(), application);
-    }
-
-    public void currentEmbeddableChanged(EmbeddableDisplayEvent e) {
-        actionManager.embeddableSelected();
-    }
-
-    /**
-     * Returns the right side view panel.
-     * 
-     * @return EditorView
-     */
-    public EditorView getView() {
-        return view;
+    public EditorPanel getEditorPanel() {
+        return editorPanel;
     }
 
     public JLabel getStatus() {
         return status;
     }
 
-    /**
-     * Returns the recentFileMenu.
-     * 
-     * @return RecentFileMenu
-     */
-    public RecentFileMenu getRecentFileMenu() {
-        return recentFileMenu;
-    }
-
-    /**
-     * Adds editor view to the frame.
-     */
-    public void setView(EditorView view) {
+    public void setEditorPanel(EditorPanel editorPanel) {
         int oldLocation = splitPane.getDividerLocation();
 
-        this.view = view;
+        this.editorPanel = editorPanel;
 
-        if (view != null) {
-            splitPane.setTopComponent(view);
+        if (editorPanel != null) {
+            splitPane.setTopComponent(editorPanel);
         } else {
-            splitPane.setTopComponent(welcomeScreen);
+            splitPane.setTopComponent(welcomePanel);
         }
 
         validate();
         splitPane.setDividerLocation(oldLocation);
     }
 
-    /**
-     * Adds listener for recent menu changes
-     */
-    public void addRecentFileListListener(RecentFileListListener listener) {
-        recentFileListeners.add(listener);
-    }
-
     /**
      * Notifies all listeners that recent file list has changed
      */
@@ -471,16 +351,15 @@ public class CayenneModelerFrame extends JFrame implements DataNodeDisplayListen
 
     public class SearchPanel extends JPanel {
 
-        private JLabel searchLabel = new JLabel("Search: ");
-        private JPanel box = new JPanel();
-        private JTextField findField;
+        private final JLabel searchLabel;
+        private final JPanel box;
+        private final JTextField findField;
 
         SearchPanel() {
             super(new BorderLayout());
-            initView();
-        }
+            searchLabel = new JLabel("Search: ");
+            box = new JPanel();
 
-        void initView() {
             findField = new JTextField(10);
             findField.putClientProperty("JTextField.variant", "search");
             findField.setMaximumSize(new Dimension(100, 22));
@@ -498,7 +377,7 @@ public class CayenneModelerFrame extends JFrame implements DataNodeDisplayListen
                 public void keyTyped(KeyEvent e) {
                 }
             });
-            findField.setAction(getAction(FindAction.class));
+            findField.setAction(actionManager.getAction(FindAction.class));
 
             Toolkit.getDefaultToolkit().addAWTEventListener(event -> {
                 if (event instanceof KeyEvent) {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/NavigationHistory.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/NavigationHistory.java
index e9268b2b6..5973c0e7b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/NavigationHistory.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/NavigationHistory.java
@@ -56,7 +56,7 @@ class NavigationHistory {
     }
 
     public DisplayEvent getLastEvent() {
-        return history.isEmpty() ? null : history.get(history.size() - 1);
+        return currentEvent;
     }
 
     public void recordEvent(DisplayEvent e) {
@@ -103,22 +103,22 @@ class NavigationHistory {
         if (e instanceof EntityDisplayEvent) {
             EntityDisplayEvent ede = (EntityDisplayEvent) e;
             if (ede.getEntity() instanceof ObjEntity) {
-                controller.fireObjEntitySelected(ede);
+                controller.displayObjEntity(ede);
             } else if (ede.getEntity() instanceof DbEntity) {
-                controller.fireDbEntitySelected(ede);
+                controller.displayDbEntity(ede);
             }
         } else if (e instanceof EmbeddableDisplayEvent) {
-            controller.fireEmbeddableSelected((EmbeddableDisplayEvent) e);
+            controller.displayEmbeddable((EmbeddableDisplayEvent) e);
         } else if (e instanceof ProcedureDisplayEvent) {
-            controller.fireProcedureSelected((ProcedureDisplayEvent) e);
+            controller.displayProcedure((ProcedureDisplayEvent) e);
         } else if (e instanceof QueryDisplayEvent) {
-            controller.fireQuerySelected((QueryDisplayEvent) e);
+            controller.displayQuery((QueryDisplayEvent) e);
         } else if (e instanceof DataMapDisplayEvent) {
-            controller.fireDataMapSelected((DataMapDisplayEvent) e);
+            controller.displayDataMap((DataMapDisplayEvent) e);
         } else if (e instanceof DataNodeDisplayEvent) {
-            controller.fireDataNodeSelected((DataNodeDisplayEvent) e);
+            controller.displayDataNode((DataNodeDisplayEvent) e);
         } else if (e instanceof DomainDisplayEvent) {
-            controller.fireDomainSelected((DomainDisplayEvent) e);
+            controller.displayDomain((DomainDisplayEvent) e);
         }
     }
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
index ea57d7d06..a83170347 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
@@ -25,6 +25,7 @@ import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
 import org.apache.cayenne.map.Attribute;
 import org.apache.cayenne.map.Relationship;
+import org.apache.cayenne.modeler.action.ActionManager;
 import org.apache.cayenne.modeler.event.display.*;
 import org.apache.cayenne.modeler.event.model.*;
 import org.apache.cayenne.map.DataMap;
@@ -64,6 +65,8 @@ import org.apache.cayenne.modeler.pref.DataNodeDefaults;
 import org.apache.cayenne.modeler.pref.ProjectStatePreferences;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.modeler.util.Comparators;
+import org.apache.cayenne.modeler.util.state.DisplayEventTypes;
+import org.apache.cayenne.modeler.util.state.MultipleObjectsDisplayEventType;
 import org.apache.cayenne.project.ConfigurationNodeParentGetter;
 import org.apache.cayenne.project.Project;
 import org.apache.cayenne.util.IDUtil;
@@ -76,10 +79,12 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.EventListener;
+import java.util.EventObject;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
+import java.util.prefs.BackingStoreException;
 import java.util.prefs.Preferences;
 
 /**
@@ -89,15 +94,12 @@ public class ProjectController extends CayenneController {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ProjectController.class);
 
-
     private NavigationHistory history;
     private EventListenerList listeners;
     private boolean dirty;
     private Project project;
     private Preferences projectControllerPreferences;
     private ControllerState state;
-
-
     private EntityResolver entityResolver;
     private ProjectFileChangeTracker fileChangeTracker;
 
@@ -117,35 +119,6 @@ public class ProjectController extends CayenneController {
         return project;
     }
 
-    public void setProject(Project currentProject) {
-        if (this.project != currentProject) {
-
-            this.project = currentProject;
-            this.projectControllerPreferences = null;
-
-            if (project == null) {
-                this.entityResolver = null;
-
-                if (fileChangeTracker != null) {
-                    fileChangeTracker.interrupt();
-                    fileChangeTracker = null;
-                }
-            } else {
-                if (fileChangeTracker == null) {
-                    fileChangeTracker = new ProjectFileChangeTracker(this);
-                    fileChangeTracker.setDaemon(true);
-                    fileChangeTracker.start();
-                }
-
-                fileChangeTracker.reconfigure();
-
-                entityResolver = new EntityResolver();
-
-                updateEntityResolver();
-            }
-        }
-    }
-
     public EntityResolver getEntityResolver() {
         return entityResolver;
     }
@@ -279,23 +252,88 @@ public class ProjectController extends CayenneController {
         return null;
     }
 
-    public void projectOpened() {
-        CayenneModelerFrame frame = (CayenneModelerFrame) getView();
-        addDataNodeDisplayListener(frame);
-        addDataMapDisplayListener(frame);
-        addObjEntityDisplayListener(frame);
-        addDbEntityDisplayListener(frame);
-        addQueryDisplayListener(frame);
-        addProcedureDisplayListener(frame);
-        addMultipleObjectsDisplayListener(frame);
-        addEmbeddableDisplayListener(frame);
+    public void projectOpened(Project project) {
+
+        this.project = project;
+        this.projectControllerPreferences = null;
+
+        if (fileChangeTracker != null) {
+            fileChangeTracker.interrupt();
+        }
+
+        fileChangeTracker = new ProjectFileChangeTracker(this);
+        fileChangeTracker.setDaemon(true);
+        fileChangeTracker.start();
+        fileChangeTracker.reconfigure();
+
+        this.entityResolver = new EntityResolver();
+        updateEntityResolver();
+
+        ActionManager actionManager = application.getActionManager();
+
+        addDataNodeDisplayListener(e -> actionManager.dataNodeSelected());
+        addDataMapDisplayListener(e -> actionManager.dataMapSelected());
+        addObjEntityDisplayListener(e -> actionManager.objEntitySelected());
+        addDbEntityDisplayListener(e -> actionManager.dbEntitySelected());
+        addQueryDisplayListener(e -> actionManager.querySelected());
+        addProcedureDisplayListener(e -> actionManager.procedureSelected());
+        addMultipleObjectsDisplayListener(e -> actionManager.multipleObjectsSelected(e.getNodes()));
+        addEmbeddableDisplayListener(e -> actionManager.embeddableSelected());
     }
 
-    public void reset() {
-        state = new ControllerState();
+    public void projectClosed() {
+
         setDirty(false);
-        listeners = new EventListenerList();
-        history = new NavigationHistory();
+
+        this.project = null;
+        this.projectControllerPreferences = null;
+        this.entityResolver = null;
+
+        if (fileChangeTracker != null) {
+            fileChangeTracker.interrupt();
+            fileChangeTracker = null;
+        }
+
+        this.state = new ControllerState();
+        this.listeners = new EventListenerList();
+        this.history = new NavigationHistory();
+    }
+
+    public void saveSelectionToPrefs() {
+        EventObject displayEvent = getLastDisplayEvent();
+        ConfigurationNode[] multiplyObjects = getSelectedPaths();
+
+        if (displayEvent == null && multiplyObjects == null) {
+            return;
+        }
+
+        ProjectStatePreferences preferences = getProjectStatePreferences();
+        if (preferences.getCurrentPreference() == null) {
+            return;
+        }
+
+        try {
+            preferences.getCurrentPreference().clear();
+        } catch (BackingStoreException e) {
+            // ignore exception
+        }
+
+        if (displayEvent != null) {
+            DisplayEventTypes.valueOf(displayEvent.getClass().getSimpleName())
+                    .createDisplayEventType(this)
+                    .saveLastDisplayEvent();
+        } else if (multiplyObjects.length != 0) {
+            new MultipleObjectsDisplayEventType(this).saveLastDisplayEvent();
+        }
+    }
+
+    public void restoreSelectionFromPrefs() {
+        ProjectStatePreferences preferences = getProjectStatePreferences();
+
+        String displayEventName = preferences.getEvent();
+        if (!displayEventName.isEmpty()) {
+            DisplayEventTypes.valueOf(displayEventName).createDisplayEventType(this).fireLastDisplayEvent();
+        }
     }
 
     public boolean isDirty() {
@@ -303,7 +341,6 @@ public class ProjectController extends CayenneController {
     }
 
 
-
     public DataChannelDescriptor getSelectedDataDomain() {
         return state.dataDomain;
     }
@@ -529,26 +566,26 @@ public class ProjectController extends CayenneController {
         listeners.add(MultipleObjectsDisplayListener.class, listener);
     }
 
-    public void fireDomainSelected(DomainDisplayEvent e) {
-        LOGGER.debug("fireDomainSelected: {}", e.getDomain() != null ? e.getDomain().getName() : null);
-
-        if (e.getDomain() != state.dataDomain || (
+    public void displayDomain(DomainDisplayEvent e) {
+        boolean changed = e.getDomain() != state.dataDomain || (
                 state.dataNode != null || state.dataMap != null || state.dbEntity != null || state.objEntity != null || state.procedure != null || state.query != null || state.embeddable != null
-        )) {
+        );
+        LOGGER.debug("displayDomain: {}{}", e.getDomain() != null ? e.getDomain().getName() : null, changed ? "" : ", ignored unchanged");
+
+        if (changed) {
             state = new ControllerState();
             state.dataDomain = e.getDomain();
             history.recordEvent(e);
-        }
 
-        for (DomainDisplayListener listener : listeners.getListeners(DomainDisplayListener.class)) {
-            listener.currentDomainChanged(e);
-        }
+            for (DomainDisplayListener listener : listeners.getListeners(DomainDisplayListener.class)) {
+                listener.domainSelected(e);
+            }
 
-        // call different methods depending on whether domain was opened or closed
-        if (e.getDomain() == null) {
-            getApplication().getActionManager().projectOpened();
-        } else {
-            getApplication().getActionManager().domainSelected();
+            if (e.getDomain() == null) {
+                getApplication().getActionManager().projectOpened();
+            } else {
+                getApplication().getActionManager().domainSelected();
+            }
         }
     }
 
@@ -576,20 +613,21 @@ public class ProjectController extends CayenneController {
         }
     }
 
-    public void fireDataNodeSelected(DataNodeDisplayEvent e) {
-        LOGGER.debug("fireDataNodeSelected: {}", e.getDataNode().getName());
-
-        if (e.getDataNode() != state.dataNode || (
+    public void displayDataNode(DataNodeDisplayEvent e) {
+        boolean changed = e.getDataNode() != state.dataNode || (
                 state.dataMap != null || state.dbEntity != null || state.objEntity != null || state.procedure != null || state.query != null || state.embeddable != null
-        )) {
+        );
+        LOGGER.debug("displayDataNode: {}{}", e.getDataNode().getName(), changed ? "" : ", ignored unchanged");
+
+        if (changed) {
             state = new ControllerState();
             state.dataDomain = e.getDomain();
             state.dataNode = e.getDataNode();
             history.recordEvent(e);
-        }
 
-        for (DataNodeDisplayListener listener : listeners.getListeners(DataNodeDisplayListener.class)) {
-            listener.currentDataNodeChanged(e);
+            for (DataNodeDisplayListener listener : listeners.getListeners(DataNodeDisplayListener.class)) {
+                listener.dataNodeSlected(e);
+            }
         }
     }
 
@@ -618,21 +656,23 @@ public class ProjectController extends CayenneController {
         }
     }
 
-    public void fireDataMapSelected(DataMapDisplayEvent e) {
-        LOGGER.debug("fireDataMapSelected: {}", e.getDataMap().getName());
-        if (e.getDataMap() != state.dataMap || (
+    public void displayDataMap(DataMapDisplayEvent e) {
+        boolean changed = e.getDataMap() != state.dataMap || (
                 state.dbEntity != null || state.objEntity != null || state.procedure != null || state.query != null || state.embeddable != null
-        )) {
+        );
+
+        LOGGER.debug("displayDataMap: {}{}", e.getDataMap().getName(), changed ? "" : ", ignored unchanged");
+        if (changed) {
             state = new ControllerState();
             state.dataDomain = e.getDomain();
             state.dataNode = e.getDataNode();
             state.dataMap = e.getDataMap();
 
             history.recordEvent(e);
-        }
 
-        for (DataMapDisplayListener listener : listeners.getListeners(DataMapDisplayListener.class)) {
-            listener.currentDataMapChanged(e);
+            for (DataMapDisplayListener listener : listeners.getListeners(DataMapDisplayListener.class)) {
+                listener.dataMapSelected(e);
+            }
         }
     }
 
@@ -809,17 +849,17 @@ public class ProjectController extends CayenneController {
 
 
     public void rewindBackwards() {
-       history.replayLastEvent(this);
+        history.replayLastEvent(this);
     }
 
     public void rewindForward() {
         history.replayNextEvent(this);
     }
 
-    public void fireObjEntitySelected(EntityDisplayEvent e) {
+    public void displayObjEntity(EntityDisplayEvent e) {
         boolean changed = e.getEntity() != state.objEntity;
 
-        LOGGER.debug("fireObjEntitySelected: {}, changed: {}", e.getEntity().getName(), changed);
+        LOGGER.debug("displayObjEntity: {}{}", e.getEntity().getName(), changed ? "" : ", ignored unchanged");
 
         if (changed) {
             state = new ControllerState();
@@ -831,65 +871,68 @@ public class ProjectController extends CayenneController {
             history.recordEvent(e);
 
             for (ObjEntityDisplayListener l : listeners.getListeners(ObjEntityDisplayListener.class)) {
-                l.currentObjEntityChanged(e);
+                l.objEntitySelected(e);
             }
         }
     }
 
-    public void fireEmbeddableSelected(EmbeddableDisplayEvent e) {
-        LOGGER.debug("fireEmbeddableSelected: {}", e.getEmbeddable().getClassName());
+    public void displayEmbeddable(EmbeddableDisplayEvent e) {
+        boolean changed = e.getEmbeddable() != state.embeddable;
+        LOGGER.debug("displayEmbeddable: {}{}", e.getEmbeddable().getClassName(), changed ? "" : ", ignored unchanged");
 
-        if (e.getEmbeddable() != state.embeddable) {
+        if (changed) {
             state = new ControllerState();
             state.dataDomain = e.getDomain();
             state.dataNode = e.getDataNode();
             state.dataMap = e.getDataMap();
             state.embeddable = e.getEmbeddable();
             history.recordEvent(e);
-        }
 
-        for (EmbeddableDisplayListener l : listeners.getListeners(EmbeddableDisplayListener.class)) {
-            l.currentEmbeddableChanged(e);
+            for (EmbeddableDisplayListener l : listeners.getListeners(EmbeddableDisplayListener.class)) {
+                l.embeddableSelected(e);
+            }
         }
     }
 
-    public void fireQuerySelected(QueryDisplayEvent e) {
-        LOGGER.debug("fireQuerySelected: {}", e.getQuery().getName());
+    public void displayQuery(QueryDisplayEvent e) {
+        boolean changed = e.getQuery() != state.query;
+        LOGGER.debug("displayQuery: {}{}", e.getQuery().getName(), changed ? "" : ", ignored unchanged");
 
-        if (e.getQuery() != state.query) {
+        if (changed) {
             state = new ControllerState();
             state.dataDomain = e.getDomain();
             state.dataMap = e.getDataMap();
             state.query = e.getQuery();
-
             history.recordEvent(e);
-        }
 
-        for (QueryDisplayListener l : listeners.getListeners(QueryDisplayListener.class)) {
-            l.currentQueryChanged(e);
+            for (QueryDisplayListener l : listeners.getListeners(QueryDisplayListener.class)) {
+                l.querySelected(e);
+            }
         }
     }
 
-    public void fireProcedureSelected(ProcedureDisplayEvent e) {
-        LOGGER.debug("fireProcedureSelected: {}", e.getProcedure().getName());
+    public void displayProcedure(ProcedureDisplayEvent e) {
+        boolean changed = e.getProcedure() != state.procedure;
+        LOGGER.debug("displayProcedure: {}{}", e.getProcedure().getName(), changed ? "" : ", ignored unchanged");
 
-        if (e.getProcedure() != state.procedure) {
+        if (changed) {
             state = new ControllerState();
             state.dataDomain = e.getDomain();
             state.dataMap = e.getDataMap();
             state.procedure = e.getProcedure();
             history.recordEvent(e);
-        }
 
-        for (ProcedureDisplayListener l : listeners.getListeners(ProcedureDisplayListener.class)) {
-            l.currentProcedureChanged(e);
+            for (ProcedureDisplayListener l : listeners.getListeners(ProcedureDisplayListener.class)) {
+                l.procedureSelected(e);
+            }
         }
     }
 
-    public void fireProcedureParameterSelected(ProcedureParameterDisplayEvent e) {
-        LOGGER.debug("fireProcedureParameterSelected: {}", e.getProcedure().getName());
+    public void displayProcedureParameter(ProcedureParameterDisplayEvent e) {
+        boolean changed = !Arrays.equals(e.getProcedureParameters(), state.procedureParameters);
+        LOGGER.debug("displayProcedureParameter: {}{}", e.getProcedure().getName(), changed ? "" : ", ignored unchanged");
 
-        if (!Arrays.equals(e.getProcedureParameters(), state.procedureParameters)) {
+        if (changed) {
             if (state.procedure != e.getProcedure()) {
                 state = new ControllerState();
                 state.dataDomain = e.getDomain();
@@ -897,27 +940,28 @@ public class ProjectController extends CayenneController {
                 state.procedure = e.getProcedure();
             }
             state.procedureParameters = e.getProcedureParameters();
-        }
 
-        for (ProcedureParameterDisplayListener l : listeners.getListeners(ProcedureParameterDisplayListener.class)) {
-            l.currentProcedureParameterChanged(e);
+            for (ProcedureParameterDisplayListener l : listeners.getListeners(ProcedureParameterDisplayListener.class)) {
+                l.procedureParameterSelected(e);
+            }
         }
     }
 
-    public void fireDbEntitySelected(EntityDisplayEvent e) {
-        LOGGER.debug("fireDbEntitySelected: {}", e.getEntity().getName());
+    public void displayDbEntity(EntityDisplayEvent e) {
+        boolean changed = e.getEntity() != state.dbEntity;
+        LOGGER.debug("displayDbEntity: {}{}", e.getEntity().getName(), changed ? "" : ", ignored unchanged");
 
-        if (e.getEntity() != state.dbEntity) {
+        if (changed) {
             state = new ControllerState();
             state.dataDomain = e.getDomain();
             state.dataNode = e.getDataNode();
             state.dataMap = e.getDataMap();
             state.dbEntity = (DbEntity) e.getEntity();
             history.recordEvent(e);
-        }
 
-        for (DbEntityDisplayListener l : listeners.getListeners(DbEntityDisplayListener.class)) {
-            l.currentDbEntityChanged(e);
+            for (DbEntityDisplayListener l : listeners.getListeners(DbEntityDisplayListener.class)) {
+                l.dbEntitySelected(e);
+            }
         }
     }
 
@@ -945,10 +989,11 @@ public class ProjectController extends CayenneController {
         }
     }
 
-    public void fireDbAttributeSelected(AttributeDisplayEvent e) {
-        LOGGER.debug("fireDbAttributeSelected: {}", Arrays.stream(e.getAttributes()).map(Attribute::getName).toArray());
+    public void displayDbAttribute(AttributeDisplayEvent e) {
+        boolean changed = !Arrays.equals(e.getAttributes(), state.dbAttributes);
+        LOGGER.debug("displayDbAttribute: {}{}", Arrays.stream(e.getAttributes()).map(Attribute::getName).toArray(), changed ? "" : ", ignored unchanged");
 
-        if (!Arrays.equals(e.getAttributes(), state.dbAttributes)) {
+        if (changed) {
             if (e.getEntity() != state.dbEntity) {
                 state = new ControllerState();
                 state.dataDomain = e.getDomain();
@@ -957,10 +1002,10 @@ public class ProjectController extends CayenneController {
             }
             state.dbAttributes = new DbAttribute[e.getAttributes().length];
             System.arraycopy(e.getAttributes(), 0, state.dbAttributes, 0, state.dbAttributes.length);
-        }
 
-        for (DbAttributeDisplayListener l : listeners.getListeners(DbAttributeDisplayListener.class)) {
-            l.currentDbAttributeChanged(e);
+            for (DbAttributeDisplayListener l : listeners.getListeners(DbAttributeDisplayListener.class)) {
+                l.dbAttributeSelected(e);
+            }
         }
     }
 
@@ -988,10 +1033,11 @@ public class ProjectController extends CayenneController {
         }
     }
 
-    public void fireObjAttributeSelected(AttributeDisplayEvent e) {
-        LOGGER.debug("fireObjAttributeSelected: {}", Arrays.stream(e.getAttributes()).map(Attribute::getName).toArray());
+    public void displayObjAttribute(AttributeDisplayEvent e) {
+        boolean changed = !Arrays.equals(e.getAttributes(), state.objAttributes);
+        LOGGER.debug("displayObjAttribute: {}{}", Arrays.stream(e.getAttributes()).map(Attribute::getName).toArray(), changed ? "" : ", ignored unchanged");
 
-        if (!Arrays.equals(e.getAttributes(), state.objAttributes)) {
+        if (changed) {
             if (e.getEntity() != state.objEntity) {
                 state = new ControllerState();
                 state.dataDomain = e.getDomain();
@@ -1000,17 +1046,18 @@ public class ProjectController extends CayenneController {
             }
             state.objAttributes = new ObjAttribute[e.getAttributes().length];
             System.arraycopy(e.getAttributes(), 0, state.objAttributes, 0, state.objAttributes.length);
-        }
 
-        for (ObjAttributeDisplayListener l : listeners.getListeners(ObjAttributeDisplayListener.class)) {
-            l.currentObjAttributeChanged(e);
+            for (ObjAttributeDisplayListener l : listeners.getListeners(ObjAttributeDisplayListener.class)) {
+                l.objAttributeSelected(e);
+            }
         }
     }
 
-    public void fireEmbeddableAttributeSelected(EmbeddableAttributeDisplayEvent ev) {
-        LOGGER.debug("fireEmbeddableAttributeSelected: {}", Arrays.stream(ev.getEmbeddableAttributes()).map(EmbeddableAttribute::getName).toArray());
+    public void displayEmbeddableAttribute(EmbeddableAttributeDisplayEvent ev) {
+        boolean changed = !Arrays.equals(ev.getEmbeddableAttributes(), state.embeddableAttributes);
+        LOGGER.debug("displayEmbeddableAttribute: {}{}", Arrays.stream(ev.getEmbeddableAttributes()).map(EmbeddableAttribute::getName).toArray(), changed ? "" : ", ignored unchanged");
 
-        if (!Arrays.equals(ev.getEmbeddableAttributes(), state.embeddableAttributes)) {
+        if (changed) {
             if (ev.getEmbeddable() != state.embeddable) {
                 state = new ControllerState();
                 state.dataDomain = ev.getDomain();
@@ -1019,10 +1066,10 @@ public class ProjectController extends CayenneController {
             }
             state.embeddableAttributes = new EmbeddableAttribute[ev.getEmbeddableAttributes().length];
             System.arraycopy(ev.getEmbeddableAttributes(), 0, state.embeddableAttributes, 0, state.embeddableAttributes.length);
-        }
 
-        for (EmbeddableAttributeDisplayListener l : listeners.getListeners(EmbeddableAttributeDisplayListener.class)) {
-            l.currentEmbeddableAttributeChanged(ev);
+            for (EmbeddableAttributeDisplayListener l : listeners.getListeners(EmbeddableAttributeDisplayListener.class)) {
+                l.embeddableAttributeSelected(ev);
+            }
         }
     }
 
@@ -1054,9 +1101,11 @@ public class ProjectController extends CayenneController {
         }
     }
 
-    public void fireDbRelationshipSelected(RelationshipDisplayEvent e) {
-        LOGGER.debug("fireDbRelationshipSelected: {}", Arrays.stream(e.getRelationships()).map(Relationship::getName).toArray());
-        if (!Arrays.equals(e.getRelationships(), state.dbRelationships)) {
+    public void displayDbRelationship(RelationshipDisplayEvent e) {
+        boolean changed = !Arrays.equals(e.getRelationships(), state.dbRelationships);
+        LOGGER.debug("displayDbRelationship: {}{}", Arrays.stream(e.getRelationships()).map(Relationship::getName).toArray(), changed ? "" : ", ignored unchanged");
+
+        if (changed) {
             if (e.getEntity() != state.dbEntity) {
                 state = new ControllerState();
                 state.dataDomain = e.getDomain();
@@ -1065,10 +1114,10 @@ public class ProjectController extends CayenneController {
             }
             state.dbRelationships = new DbRelationship[e.getRelationships().length];
             System.arraycopy(e.getRelationships(), 0, state.dbRelationships, 0, state.dbRelationships.length);
-        }
 
-        for (DbRelationshipDisplayListener listener : listeners.getListeners(DbRelationshipDisplayListener.class)) {
-            listener.currentDbRelationshipChanged(e);
+            for (DbRelationshipDisplayListener listener : listeners.getListeners(DbRelationshipDisplayListener.class)) {
+                listener.dbRelationshipSelected(e);
+            }
         }
     }
 
@@ -1096,20 +1145,22 @@ public class ProjectController extends CayenneController {
         }
     }
 
-    public void fireMultipleObjectsSelected(MultipleObjectsDisplayEvent e) {
-        LOGGER.debug("fireMultipleObjectsSelected");
+    public void displayMultipleObjects(MultipleObjectsDisplayEvent e) {
+        LOGGER.debug("displayMultipleObjects");
         state = new ControllerState();
         state.paths = e.getNodes();
         state.parentPath = e.getParentNode();
 
         for (MultipleObjectsDisplayListener l : listeners.getListeners(MultipleObjectsDisplayListener.class)) {
-            l.currentObjectsChanged(e, getApplication());
+            l.multipleObjectsSelected(e);
         }
     }
 
-    public void fireObjRelationshipSelected(RelationshipDisplayEvent e) {
-        LOGGER.debug("fireObjRelationshipSelected: {}", Arrays.stream(e.getRelationships()).map(Relationship::getName).toArray());
-        if (!Arrays.equals(e.getRelationships(), state.objRelationships)) {
+    public void displayObjRelationship(RelationshipDisplayEvent e) {
+        boolean changed = !Arrays.equals(e.getRelationships(), state.objRelationships);
+        LOGGER.debug("displayObjRelationship: {}{}", Arrays.stream(e.getRelationships()).map(Relationship::getName).toArray(), changed ? "" : ", ignored unchanged");
+
+        if (changed) {
             if (e.getEntity() != state.objEntity) {
                 state = new ControllerState();
                 state.dataDomain = e.getDomain();
@@ -1118,15 +1169,15 @@ public class ProjectController extends CayenneController {
             }
             state.objRelationships = new ObjRelationship[e.getRelationships().length];
             System.arraycopy(e.getRelationships(), 0, state.objRelationships, 0, state.objRelationships.length);
-        }
 
-        for (ObjRelationshipDisplayListener l : listeners.getListeners(ObjRelationshipDisplayListener.class)) {
-            l.currentObjRelationshipChanged(e);
+            for (ObjRelationshipDisplayListener l : listeners.getListeners(ObjRelationshipDisplayListener.class)) {
+                l.currentObjRelationshipChanged(e);
+            }
         }
     }
 
-    public void fireValidationConfigSelected(ValidationConfigDisplayEvent event) {
-        LOGGER.debug("fireValidationConfigSelected");
+    public void displayValidationConfig(ValidationConfigDisplayEvent event) {
+        LOGGER.debug("displayValidationConfig");
         for (ValidationConfigDisplayListener l : listeners.getListeners(ValidationConfigDisplayListener.class)) {
             l.validationOptionChanged(event);
         }
@@ -1154,8 +1205,8 @@ public class ProjectController extends CayenneController {
         listeners.add(CallbackTypeSelectionListener.class, listener);
     }
 
-    public void fireCallbackTypeSelected(CallbackTypeDisplayEvent e) {
-        LOGGER.debug("fireCallbackTypeSelected: {}", e.getCallbackType());
+    public void displayCallbackType(CallbackTypeDisplayEvent e) {
+        LOGGER.debug("displayCallbackType: {}", e.getCallbackType());
         state.callbackType = e.getCallbackType();
         for (CallbackTypeSelectionListener l : listeners.getListeners(CallbackTypeSelectionListener.class)) {
             l.callbackTypeSelected(e);
@@ -1170,11 +1221,11 @@ public class ProjectController extends CayenneController {
         listeners.add(CallbackMethodDisplayListener.class, listener);
     }
 
-    public void fireCallbackMethodSelected(CallbackMethodDisplayEvent e) {
-        LOGGER.debug("fireCallbackMethodSelected");
+    public void displayCallbackMethod(CallbackMethodDisplayEvent e) {
+        LOGGER.debug("displayCallbackMethod");
         state.callbackMethods = e.getCallbackMethods();
         for (CallbackMethodDisplayListener l : listeners.getListeners(CallbackMethodDisplayListener.class)) {
-            l.currentCallbackMethodChanged(e);
+            l.callbackMethodSelected(e);
         }
     }
 
@@ -1332,7 +1383,6 @@ public class ProjectController extends CayenneController {
     }
 
 
-
     static class ControllerState {
 
         private DataChannelDescriptor dataDomain;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeView.java
index 315a0c2b9..13e0a0af1 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeView.java
@@ -181,7 +181,7 @@ public class ProjectTreeView extends JTree implements DomainDisplayListener,
                             projectParentPath = createProjectPath(parentPath);
                         }
 
-                        projectController.fireMultipleObjectsSelected(new MultipleObjectsDisplayEvent(
+                        projectController.displayMultipleObjects(new MultipleObjectsDisplayEvent(
                                 this,
                                 projectPaths, projectParentPath));
                     } else if (paths.length == 1) {
@@ -307,41 +307,41 @@ public class ProjectTreeView extends JTree implements DomainDisplayListener,
         }
     }
 
-    public void currentDomainChanged(DomainDisplayEvent e) {
+    public void domainSelected(DomainDisplayEvent e) {
         navigateTo(e.getDomain());
     }
 
-    public void currentDataNodeChanged(DataNodeDisplayEvent e) {
+    public void dataNodeSlected(DataNodeDisplayEvent e) {
         navigateTo(e.getDomain(), e.getDataNode());
     }
 
     @Override
-    public void currentDataMapChanged(DataMapDisplayEvent e) {
+    public void dataMapSelected(DataMapDisplayEvent e) {
         navigateTo(e.getDomain(), e.getDataMap());
     }
 
     @Override
-    public void currentObjEntityChanged(EntityDisplayEvent e) {
+    public void objEntitySelected(EntityDisplayEvent e) {
         navigateTo(e.getDomain(), e.getDataMap(), e.getEntity());
     }
 
     @Override
-    public void currentDbEntityChanged(EntityDisplayEvent e) {
+    public void dbEntitySelected(EntityDisplayEvent e) {
         navigateTo(e.getDomain(), e.getDataMap(), e.getEntity());
     }
 
     @Override
-    public void currentProcedureChanged(ProcedureDisplayEvent e) {
+    public void procedureSelected(ProcedureDisplayEvent e) {
         navigateTo(e.getDomain(), e.getDataMap(), e.getProcedure());
     }
 
     @Override
-    public void currentQueryChanged(QueryDisplayEvent e) {
+    public void querySelected(QueryDisplayEvent e) {
         navigateTo(e.getDomain(), e.getDataMap(), e.getQuery());
     }
 
     @Override
-    public void currentObjectsChanged(MultipleObjectsDisplayEvent e, Application application) {
+    public void multipleObjectsSelected(MultipleObjectsDisplayEvent e) {
         if (e.getSource() == this || e.getParentNode() == null) {
             return;
         }
@@ -873,7 +873,7 @@ public class ProjectTreeView extends JTree implements DomainDisplayListener,
         Object[] data = getUserObjects(currentNode);
         if (data.length == 0) {
             // this should clear the right-side panel
-            projectController.fireDomainSelected(new DomainDisplayEvent(
+            projectController.displayDomain(new DomainDisplayEvent(
                     this,
                     (DataChannelDescriptor) projectController.getProject().getRootNode()));
 
@@ -882,25 +882,25 @@ public class ProjectTreeView extends JTree implements DomainDisplayListener,
 
         Object obj = data[data.length - 1];
         if (obj instanceof DataChannelDescriptor) {
-            projectController.fireDomainSelected(new DomainDisplayEvent(
+            projectController.displayDomain(new DomainDisplayEvent(
                     this,
                     (DataChannelDescriptor) obj));
         } else if (obj instanceof DataMap) {
             if (data.length == 2) {
-                projectController.fireDataMapSelected(new DataMapDisplayEvent(
+                projectController.displayDataMap(new DataMapDisplayEvent(
                         this,
                         (DataMap) obj,
                         (DataChannelDescriptor) projectController.getProject().getRootNode(),
                         (DataNodeDescriptor) data[data.length - 2]));
             } else if (data.length == 1) {
-                projectController.fireDataMapSelected(new DataMapDisplayEvent(
+                projectController.displayDataMap(new DataMapDisplayEvent(
                         this,
                         (DataMap) obj,
                         (DataChannelDescriptor) projectController.getProject().getRootNode()));
             }
         } else if (obj instanceof DataNodeDescriptor) {
             if (data.length == 1) {
-                projectController.fireDataNodeSelected(new DataNodeDisplayEvent(
+                projectController.displayDataNode(new DataNodeDisplayEvent(
                         this,
                         (DataChannelDescriptor) projectController.getProject().getRootNode(),
                         (DataNodeDescriptor) obj));
@@ -924,9 +924,9 @@ public class ProjectTreeView extends JTree implements DomainDisplayListener,
             e.setUnselectAttributes(true);
 
             if (obj instanceof ObjEntity) {
-                projectController.fireObjEntitySelected(e);
+                projectController.displayObjEntity(e);
             } else if (obj instanceof DbEntity) {
-                projectController.fireDbEntitySelected(e);
+                projectController.displayDbEntity(e);
             }
         } else if (obj instanceof Embeddable) {
             EmbeddableDisplayEvent e = new EmbeddableDisplayEvent(
@@ -934,21 +934,21 @@ public class ProjectTreeView extends JTree implements DomainDisplayListener,
                     (Embeddable) obj,
                     (DataMap) data[data.length - 2],
                     (DataChannelDescriptor) projectController.getProject().getRootNode());
-            projectController.fireEmbeddableSelected(e);
+            projectController.displayEmbeddable(e);
         } else if (obj instanceof Procedure) {
             ProcedureDisplayEvent e = new ProcedureDisplayEvent(
                     this,
                     (Procedure) obj,
                     (DataMap) data[data.length - 2],
                     (DataChannelDescriptor) projectController.getProject().getRootNode());
-            projectController.fireProcedureSelected(e);
+            projectController.displayProcedure(e);
         } else if (obj instanceof QueryDescriptor) {
             QueryDisplayEvent e = new QueryDisplayEvent(
                     this,
                     (QueryDescriptor) obj,
                     (DataMap) data[data.length - 2],
                     (DataChannelDescriptor) projectController.getProject().getRootNode());
-            projectController.fireQuerySelected(e);
+            projectController.displayQuery(e);
         }
 
         this.scrollPathToVisible(path);
@@ -1122,7 +1122,7 @@ public class ProjectTreeView extends JTree implements DomainDisplayListener,
         });
     }
 
-    public void currentEmbeddableChanged(EmbeddableDisplayEvent e) {
+    public void embeddableSelected(EmbeddableDisplayEvent e) {
         navigateTo(e.getDomain(), e.getDataMap(), e.getEmbeddable());
 
     }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ActionManager.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ActionManager.java
index c6bd98dbb..1aabfe398 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ActionManager.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ActionManager.java
@@ -20,7 +20,6 @@
 package org.apache.cayenne.modeler.action;
 
 import org.apache.cayenne.configuration.ConfigurationNode;
-import org.apache.cayenne.modeler.Application;
 
 import javax.swing.*;
 
@@ -51,10 +50,7 @@ public interface ActionManager {
 
     void embeddableSelected();
 
-    /**
-     * Invoked when several objects were selected in ProjectTree at time
-     */
-    void multipleObjectsSelected(ConfigurationNode[] objects, Application application);
+    void multipleObjectsSelected(ConfigurationNode[] objects);
 
     /**
      * Replaces standard Cut, Copy and Paste action maps, so that accelerators like Ctrl+X, Ctrl+C, Ctrl+V would work.
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/BaseViewEntityAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/BaseViewEntityAction.java
index c6a1474dd..e2d70e058 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/BaseViewEntityAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/BaseViewEntityAction.java
@@ -66,9 +66,9 @@ public abstract class BaseViewEntityAction extends CayenneAction {
                 entity.getDataMap(),
                 (DataChannelDescriptor) getProjectController().getProject().getRootNode());
         if (entity instanceof DbEntity) {
-            getProjectController().fireDbEntitySelected(event);
+            getProjectController().displayDbEntity(event);
         } else if (entity instanceof ObjEntity){
-            getProjectController().fireObjEntitySelected(event);
+            getProjectController().displayObjEntity(event);
         }
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateAttributeAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateAttributeAction.java
index a921e5cde..c255ede7b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateAttributeAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateAttributeAction.java
@@ -55,7 +55,7 @@ public class CreateAttributeAction extends CayenneAction {
         EmbeddableAttributeDisplayEvent e = new EmbeddableAttributeDisplayEvent(src, embeddable, attr,
                 controller.getSelectedDataMap(), (DataChannelDescriptor) controller.getProject().getRootNode());
 
-        controller.fireEmbeddableAttributeSelected(e);
+        controller.displayEmbeddableAttribute(e);
     }
 
     /**
@@ -70,7 +70,7 @@ public class CreateAttributeAction extends CayenneAction {
 
         AttributeDisplayEvent ade = new AttributeDisplayEvent(src, attr, objEntity, map, domain);
 
-        controller.fireObjAttributeSelected(ade);
+        controller.displayObjAttribute(ade);
     }
 
     /**
@@ -83,7 +83,7 @@ public class CreateAttributeAction extends CayenneAction {
         AttributeDisplayEvent ade = new AttributeDisplayEvent(src, attr, dbEntity, map,
                 (DataChannelDescriptor) controller.getProject().getRootNode());
 
-        controller.fireDbAttributeSelected(ade);
+        controller.displayDbAttribute(ade);
     }
 
     public CreateAttributeAction(Application application) {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDataMapAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDataMapAction.java
index 9323e1d5a..86e12cb81 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDataMapAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDataMapAction.java
@@ -56,7 +56,7 @@ public class CreateDataMapAction extends CayenneAction {
 
         DataMapDisplayEvent displayEvent = new DataMapDisplayEvent(src, map, domain, node);
         displayEvent.setMainTabFocus(true);
-        controller.fireDataMapSelected(displayEvent);
+        controller.displayDataMap(displayEvent);
     }
 
     public CreateDataMapAction(Application application) {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDbEntityAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDbEntityAction.java
index 176cd02b1..2efe13bce 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDbEntityAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateDbEntityAction.java
@@ -42,7 +42,7 @@ public class CreateDbEntityAction extends CayenneAction {
         EntityDisplayEvent displayEvent = new EntityDisplayEvent(src, entity, controller.getSelectedDataMap(),
                 controller.getSelectedDataNode(), (DataChannelDescriptor) controller.getProject().getRootNode());
         displayEvent.setMainTabFocus(true);
-        controller.fireDbEntitySelected(displayEvent);
+        controller.displayDbEntity(displayEvent);
     }
 
     public CreateDbEntityAction(Application application) {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateEmbeddableAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateEmbeddableAction.java
index 94c975b3a..bd304d851 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateEmbeddableAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateEmbeddableAction.java
@@ -51,7 +51,7 @@ public class CreateEmbeddableAction extends CayenneAction {
                 dataMap,
                 (DataChannelDescriptor) controller.getProject().getRootNode());
         displayEvent.setMainTabFocus(true);
-        controller.fireEmbeddableSelected(displayEvent);
+        controller.displayEmbeddable(displayEvent);
 
     }
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateNodeAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateNodeAction.java
index d13a65ef8..8f6b817db 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateNodeAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateNodeAction.java
@@ -42,7 +42,7 @@ public class CreateNodeAction extends CayenneAction {
         DataChannelDescriptor domain = (DataChannelDescriptor) controller.getProject().getRootNode();
         domain.getNodeDescriptors().add(node);
         controller.fireDataNodeEvent(new DataNodeEvent(src, node, MapEvent.ADD));
-        controller.fireDataNodeSelected(new DataNodeDisplayEvent(src, domain, node));
+        controller.displayDataNode(new DataNodeDisplayEvent(src, domain, node));
     }
 
     public CreateNodeAction(Application application) {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
index 85433336d..aa9dd1eaf 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
@@ -54,7 +54,7 @@ public class CreateObjEntityAction extends CayenneAction {
                 controller.getSelectedDataNode(),
                 (DataChannelDescriptor) controller.getProject().getRootNode());
         displayEvent.setMainTabFocus(true);
-        controller.fireObjEntitySelected(displayEvent);
+        controller.displayObjEntity(displayEvent);
     }
 
     public CreateObjEntityAction(Application application) {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureAction.java
index f8b6a13f9..a7e44bf18 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureAction.java
@@ -44,7 +44,7 @@ public class CreateProcedureAction extends CayenneAction {
      */
     static void fireProcedureEvent(Object src, ProjectController controller, DataMap dataMap, Procedure procedure) {
         controller.fireProcedureEvent(new ProcedureEvent(src, procedure, MapEvent.ADD));
-        controller.fireProcedureSelected(new ProcedureDisplayEvent(src, procedure, controller.getSelectedDataMap(),
+        controller.displayProcedure(new ProcedureDisplayEvent(src, procedure, controller.getSelectedDataMap(),
                 (DataChannelDescriptor) controller.getProject().getRootNode()));
     }
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureParameterAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureParameterAction.java
index e9b075b9b..ac3389c96 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureParameterAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateProcedureParameterAction.java
@@ -50,7 +50,7 @@ public class CreateProcedureParameterAction extends CayenneAction {
             ProcedureParameter parameter) {
         controller.fireProcedureParameterEvent(new ProcedureParameterEvent(src, parameter, MapEvent.ADD));
 
-        controller.fireProcedureParameterSelected(new ProcedureParameterDisplayEvent(src, parameter, procedure,
+        controller.displayProcedureParameter(new ProcedureParameterDisplayEvent(src, parameter, procedure,
                 controller.getSelectedDataMap(), (DataChannelDescriptor) controller.getProject().getRootNode()));
     }
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateQueryAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateQueryAction.java
index d8a418f1b..19ab4fd1e 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateQueryAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateQueryAction.java
@@ -67,6 +67,6 @@ public class CreateQueryAction extends CayenneAction {
     public static void fireQueryEvent(Object src, ProjectController mediator, DataChannelDescriptor domain,
             DataMap dataMap, QueryDescriptor query) {
         mediator.fireQueryEvent(new QueryEvent(src, query, MapEvent.ADD, dataMap));
-        mediator.fireQuerySelected(new QueryDisplayEvent(src, query, dataMap, domain));
+        mediator.displayQuery(new QueryDisplayEvent(src, query, dataMap, domain));
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateRelationshipAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateRelationshipAction.java
index 9d7e9872d..66546c3e1 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateRelationshipAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateRelationshipAction.java
@@ -52,7 +52,7 @@ public class CreateRelationshipAction extends CayenneAction {
         RelationshipDisplayEvent rde = new RelationshipDisplayEvent(src, rel, objEntity, mediator.getSelectedDataMap(),
                 (DataChannelDescriptor) mediator.getProject().getRootNode());
 
-        mediator.fireObjRelationshipSelected(rde);
+        mediator.displayObjRelationship(rde);
     }
 
     /**
@@ -65,7 +65,7 @@ public class CreateRelationshipAction extends CayenneAction {
         RelationshipDisplayEvent rde = new RelationshipDisplayEvent(src, rel, dbEntity, mediator.getSelectedDataMap(),
                 (DataChannelDescriptor) mediator.getProject().getRootNode());
 
-        mediator.fireDbRelationshipSelected(rde);
+        mediator.displayDbRelationship(rde);
     }
 
     public CreateRelationshipAction(Application application) {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java
index 5e7693560..82bfa59d4 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java
@@ -65,8 +65,15 @@ public class DefaultActionManager implements ActionManager {
     private final Set<String> multipleObjectsActions;
 
     private final Map<String, Action> actionMap;
+    private final ConfigurationNodeParentGetter nodeParentGetter;
+
+    public DefaultActionManager(
+            @Inject Application application,
+            @Inject ConfigurationNameMapper nameMapper,
+            @Inject ConfigurationNodeParentGetter nodeParentGetter) {
+
+        this.nodeParentGetter = nodeParentGetter;
 
-    public DefaultActionManager(@Inject Application application, @Inject ConfigurationNameMapper nameMapper) {
         specialActions = new HashSet<>();
 
         specialActions.addAll(Arrays.asList(
@@ -331,9 +338,7 @@ public class DefaultActionManager implements ActionManager {
      * Invoked when several objects were selected in ProjectTree at time
      */
     @Override
-    public void multipleObjectsSelected(
-            ConfigurationNode[] objects,
-            Application application) {
+    public void multipleObjectsSelected(ConfigurationNode[] objects) {
         processActionsState(multipleObjectsActions);
 
         updateActions("Selected Objects");
@@ -344,15 +349,10 @@ public class DefaultActionManager implements ActionManager {
 
         if (!cutAction.enableForPath(objects[0])) {
             canCopy = false;
-        }
-        else {
-            ConfigurationNodeParentGetter parentGetter = application
-                    .getInjector()
-                    .getInstance(ConfigurationNodeParentGetter.class);
-            Object parent = parentGetter.getParent(objects[0]);
-
+        } else {
+            Object parent = nodeParentGetter.getParent(objects[0]);
             for (int i = 1; i < objects.length; i++) {
-                if (parentGetter.getParent(objects[i]) != parent
+                if (nodeParentGetter.getParent(objects[i]) != parent
                         || !cutAction.enableForPath(objects[i])) {
                     canCopy = false;
                     break;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FindAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FindAction.java
index d8a4b8088..bb5dc78e5 100755
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FindAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FindAction.java
@@ -45,7 +45,7 @@ import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.ProjectTreeModel;
 import org.apache.cayenne.modeler.ProjectTreeView;
 import org.apache.cayenne.modeler.dialog.FindDialog;
-import org.apache.cayenne.modeler.editor.EditorView;
+import org.apache.cayenne.modeler.editor.EditorPanel;
 import org.apache.cayenne.modeler.event.display.AttributeDisplayEvent;
 import org.apache.cayenne.modeler.event.display.EmbeddableAttributeDisplayEvent;
 import org.apache.cayenne.modeler.event.display.EmbeddableDisplayEvent;
@@ -139,16 +139,16 @@ public class FindAction extends CayenneAction {
      * Used also in {@link org.apache.cayenne.modeler.graph.action.EntityDisplayAction}
      */
     public static void jumpToResult(FindAction.SearchResultEntry searchResultEntry) {
-        EditorView editor = ((CayenneModelerFrame) Application.getInstance().getFrameController().getView()).getView();
+        EditorPanel editor = ((CayenneModelerFrame) Application.getInstance().getFrameController().getView()).getEditorPanel();
         DataChannelDescriptor domain = (DataChannelDescriptor) Application.getInstance().getProject().getRootNode();
         ProjectController controller = Application.getInstance().getFrameController().getProjectController();
 
         if (searchResultEntry.getObject() instanceof Entity) {
             jumpToEntityResult((Entity<?, ?, ?>) searchResultEntry.getObject(), editor, domain, controller);
         } else if (searchResultEntry.getObject() instanceof QueryDescriptor) {
-            jumpToQueryResult((QueryDescriptor) searchResultEntry.getObject(), editor, domain);
+            jumpToQueryResult((QueryDescriptor) searchResultEntry.getObject(), editor, domain, controller);
         } else if (searchResultEntry.getObject() instanceof Embeddable) {
-            jumpToEmbeddableResult((Embeddable) searchResultEntry.getObject(), editor, domain);
+            jumpToEmbeddableResult((Embeddable) searchResultEntry.getObject(), editor, domain, controller);
         } else if (searchResultEntry.getObject() instanceof EmbeddableAttribute) {
             jumpToEmbeddableAttributeResult((EmbeddableAttribute) searchResultEntry.getObject(), editor, domain, controller);
         } else if (searchResultEntry.getObject() instanceof Attribute || searchResultEntry.getObject() instanceof Relationship) {
@@ -263,7 +263,7 @@ public class FindAction extends CayenneAction {
         return pattern.matcher(entityName).find();
     }
 
-    private static void jumpToAttributeResult(SearchResultEntry searchResultEntry, EditorView editor, DataChannelDescriptor domain,
+    private static void jumpToAttributeResult(SearchResultEntry searchResultEntry, EditorPanel editor, DataChannelDescriptor domain,
                                               ProjectController controller) {
         DataMap map;
         Entity<?, ?, ?> entity;
@@ -281,10 +281,10 @@ public class FindAction extends CayenneAction {
                     (Attribute<?, ?, ?>) searchResultEntry.getObject(), entity, map, domain);
             event.setMainTabFocus(true);
             if (searchResultEntry.getObject() instanceof DbAttribute) {
-                controller.fireDbAttributeSelected(event);
+                controller.displayDbAttribute(event);
                 editor.getDbDetailView().repaint();
             } else {
-                controller.fireObjAttributeSelected(event);
+                controller.displayObjAttribute(event);
                 editor.getObjDetailView().repaint();
             }
         } else if (searchResultEntry.getObject() instanceof Relationship) {
@@ -292,10 +292,10 @@ public class FindAction extends CayenneAction {
                     (Relationship<?, ?, ?>) searchResultEntry.getObject(), entity, map, domain);
             event.setMainTabFocus(true);
             if (searchResultEntry.getObject() instanceof DbRelationship) {
-                controller.fireDbRelationshipSelected(event);
+                controller.displayDbRelationship(event);
                 editor.getDbDetailView().repaint();
             } else {
-                controller.fireObjRelationshipSelected(event);
+                controller.displayObjRelationship(event);
                 editor.getObjDetailView().repaint();
             }
         }
@@ -303,7 +303,7 @@ public class FindAction extends CayenneAction {
 
     private static void jumpToEmbeddableAttributeResult(
             EmbeddableAttribute attribute,
-            EditorView editor,
+            EditorPanel editor,
             DataChannelDescriptor domain,
             ProjectController controller) {
 
@@ -312,63 +312,63 @@ public class FindAction extends CayenneAction {
         buildAndSelectTreePath(map, embeddable, editor);
         EmbeddableAttributeDisplayEvent event = new EmbeddableAttributeDisplayEvent(editor.getProjectTreeView(), embeddable, attribute, map, domain);
         event.setMainTabFocus(true);
-        controller.fireEmbeddableAttributeSelected(event);
+        controller.displayEmbeddableAttribute(event);
         editor.getEmbeddableView().repaint();
     }
 
-    private static void jumpToEmbeddableResult(Embeddable embeddable, EditorView editor, DataChannelDescriptor domain) {
+    private static void jumpToEmbeddableResult(Embeddable embeddable, EditorPanel editor, DataChannelDescriptor domain,
+                                               ProjectController controller) {
         DataMap map = embeddable.getDataMap();
         buildAndSelectTreePath(map, embeddable, editor);
         EmbeddableDisplayEvent event = new EmbeddableDisplayEvent(editor.getProjectTreeView(), embeddable, map, domain);
         event.setMainTabFocus(true);
-        editor.currentEmbeddableChanged(event);
+        controller.displayEmbeddable(event);
     }
 
-    private static void jumpToQueryResult(QueryDescriptor queryDescriptor, EditorView editor, DataChannelDescriptor domain) {
+    private static void jumpToQueryResult(QueryDescriptor queryDescriptor, EditorPanel editor, DataChannelDescriptor domain, ProjectController controller) {
         DataMap map = queryDescriptor.getDataMap();
         buildAndSelectTreePath(map, queryDescriptor, editor);
         QueryDisplayEvent event = new QueryDisplayEvent(editor.getProjectTreeView(), queryDescriptor, map, domain);
-        editor.currentQueryChanged(event);
+        controller.displayQuery(event);
     }
 
-    private static void jumpToEntityResult(Entity<?, ?, ?> entity, EditorView editor, DataChannelDescriptor domain,
-                                           ProjectController controller) {
+    private static void jumpToEntityResult(Entity<?, ?, ?> entity, EditorPanel editor, DataChannelDescriptor domain, ProjectController controller) {
         DataMap map = entity.getDataMap();
         buildAndSelectTreePath(map, entity, editor);
         EntityDisplayEvent event = new EntityDisplayEvent(editor.getProjectTreeView(), entity, map, domain);
         event.setMainTabFocus(true);
 
         if (entity instanceof ObjEntity) {
-            controller.fireObjEntitySelected(event);
+            controller.displayObjEntity(event);
         } else if (entity instanceof DbEntity) {
-            controller.fireDbEntitySelected(event);
+            controller.displayDbEntity(event);
         }
     }
 
-    private static void jumpToProcedureResult(Procedure procedure, EditorView editor, DataChannelDescriptor domain,
+    private static void jumpToProcedureResult(Procedure procedure, EditorPanel editor, DataChannelDescriptor domain,
                                               ProjectController controller) {
         DataMap map = procedure.getDataMap();
         buildAndSelectTreePath(map, procedure, editor);
         ProcedureDisplayEvent event = new ProcedureDisplayEvent(editor.getProjectTreeView(), procedure, map, domain);
-        controller.fireProcedureSelected(event);
+        controller.displayProcedure(event);
         editor.getProcedureView().repaint();
     }
 
-    private static void jumpToProcedureResult(ProcedureParameter parameter, EditorView editor, DataChannelDescriptor domain,
+    private static void jumpToProcedureResult(ProcedureParameter parameter, EditorPanel editor, DataChannelDescriptor domain,
                                               ProjectController controller) {
         Procedure procedure = parameter.getProcedure();
         DataMap map = procedure.getDataMap();
         buildAndSelectTreePath(map, procedure, editor);
         ProcedureParameterDisplayEvent event =
                 new ProcedureParameterDisplayEvent(editor.getProjectTreeView(), parameter, procedure, map, domain);
-        controller.fireProcedureParameterSelected(event);
+        controller.displayProcedureParameter(event);
         editor.getProcedureView().repaint();
     }
 
     /**
      * Builds a tree path for a given path and make selection in it
      */
-    private static void buildAndSelectTreePath(DataMap map, Object object, EditorView editor) {
+    private static void buildAndSelectTreePath(DataMap map, Object object, EditorPanel editor) {
         ProjectTreeView projectTreeView = editor.getProjectTreeView();
         ProjectTreeModel treeModel = (ProjectTreeModel) projectTreeView.getModel();
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java
index 595e6e29b..8f709ecc4 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java
@@ -43,6 +43,6 @@ public class GenerateCodeAction extends CayenneAction {
     }
 
     public void performAction(ActionEvent e) {
-        getProjectController().fireDomainSelected(new DomainDisplayEvent(this, (DataChannelDescriptor) getProjectController().getProject().getRootNode()));
+        getProjectController().displayDomain(new DomainDisplayEvent(this, (DataChannelDescriptor) getProjectController().getProject().getRootNode()));
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java
index d199b5757..c84f839ef 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java
@@ -184,7 +184,7 @@ public class ImportEOModelAction extends CayenneAction {
             // send events after the node creation is complete
             getProjectController().fireDataNodeEvent(
                     new DataNodeEvent(this, node, MapEvent.ADD));
-            getProjectController().fireDataNodeSelected(
+            getProjectController().displayDataNode(
                     new DataNodeDisplayEvent(
                             this,
                             (DataChannelDescriptor) getProjectController()
@@ -278,7 +278,7 @@ public class ImportEOModelAction extends CayenneAction {
                 mediator.fireQueryEvent(queryEvent);
             }
 
-            mediator.fireDataMapSelected(new DataMapDisplayEvent(Application
+            mediator.displayDataMap(new DataMapDisplayEvent(Application
                     .getFrame(), map, (DataChannelDescriptor) mediator
                     .getProject()
                     .getRootNode(), mediator.getSelectedDataNode()));
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/NewProjectAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/NewProjectAction.java
index 70f7904fd..11680ec8c 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/NewProjectAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/NewProjectAction.java
@@ -71,6 +71,6 @@ public class NewProjectAction extends ProjectAction {
         controller.onProjectOpened(project);
 
         // select default domain
-        getProjectController().fireDomainSelected(new DomainDisplayEvent(this, dataChannelDescriptor));
+        getProjectController().displayDomain(new DomainDisplayEvent(this, dataChannelDescriptor));
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ObjEntitySyncAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ObjEntitySyncAction.java
index fb5f9e86d..adc54e4de 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ObjEntitySyncAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ObjEntitySyncAction.java
@@ -83,7 +83,7 @@ public class ObjEntitySyncAction extends CayenneAction {
             if (merger.synchronizeWithDbEntity(entity)) {
                 mediator
                         .fireObjEntityEvent(new EntityEvent(this, entity, MapEvent.CHANGE));
-                mediator.fireObjEntitySelected(new EntityDisplayEvent(
+                mediator.displayObjEntity(new EntityDisplayEvent(
                         this,
                         entity,
                         entity.getDataMap(),
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ShowValidationConfigAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ShowValidationConfigAction.java
index 4cf5d66ee..43bffb654 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ShowValidationConfigAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ShowValidationConfigAction.java
@@ -39,6 +39,6 @@ public class ShowValidationConfigAction extends CayenneAction {
     public void performAction(ActionEvent e) {
         ProjectController controller = getProjectController();
         DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode();
-        controller.fireDomainSelected(new DomainDisplayEvent(this, dataChannel));
+        controller.displayDomain(new DomainDisplayEvent(this, dataChannel));
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ShowValidationOptionAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ShowValidationOptionAction.java
index fc185f689..1fad23ed2 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ShowValidationOptionAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ShowValidationOptionAction.java
@@ -43,7 +43,7 @@ public class ShowValidationOptionAction extends ShowValidationConfigAction {
         Inspection inspection = (Inspection) getValue(INSPECTION_PARAM);
         ProjectController controller = getProjectController();
         DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode();
-        controller.fireValidationConfigSelected(new ValidationConfigDisplayEvent(this, dataChannel, inspection));
+        controller.displayValidationConfig(new ValidationConfigDisplayEvent(this, dataChannel, inspection));
     }
 
     public ShowValidationConfigAction putInspection(Inspection inspection) {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/DbRelationshipDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/DbRelationshipDialog.java
index 8cfd02746..5f61f7fc8 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/DbRelationshipDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/DbRelationshipDialog.java
@@ -385,7 +385,7 @@ public class DbRelationshipDialog extends CayenneController {
             RelationshipDisplayEvent rde = new RelationshipDisplayEvent(this, relationship, dbEntity, projectController.getSelectedDataMap(),
                     (DataChannelDescriptor) projectController.getProject().getRootNode());
 
-            projectController.fireDbRelationshipSelected(rde);
+            projectController.displayDbRelationship(rde);
 
             Application.getInstance().getUndoManager().addEdit(
                     new CreateRelationshipUndoableEdit(relationship.getSourceEntity(), new DbRelationship[]{relationship}));
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoadResultDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoadResultDialog.java
index a95188abd..2e83d63cf 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoadResultDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/DbLoadResultDialog.java
@@ -76,7 +76,7 @@ public class DbLoadResultDialog extends JDialog {
         this.setModal(false);
         this.setPreferredSize(new Dimension(400, 400));
         this.pack();
-        this.setLocationRelativeTo(Application.getFrame().getView());
+        this.setLocationRelativeTo(Application.getFrame().getEditorPanel());
     }
 
     private void initElements() {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java
index 8ed377563..bc59acbca 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java
@@ -528,7 +528,7 @@ public class ObjAttributeInfoDialog extends CayenneController implements TreeSel
 		EntityDisplayEvent event = new EntityDisplayEvent(this, mediator.getSelectedObjEntity(),
 				mediator.getSelectedDataMap(), (DataChannelDescriptor) mediator.getProject().getRootNode());
 
-		mediator.fireObjEntitySelected(event);
+		mediator.displayObjEntity(event);
 
 		mediator.fireObjAttributeEvent(new AttributeEvent(this, attributeSaved, model.getEntity(), MapEvent.CHANGE));
 
@@ -536,7 +536,7 @@ public class ObjAttributeInfoDialog extends CayenneController implements TreeSel
 				mediator.getSelectedObjEntity(), mediator.getSelectedDataMap(), (DataChannelDescriptor) mediator
 						.getProject().getRootNode());
 
-		mediator.fireObjAttributeSelected(eventAttr);
+		mediator.displayObjAttribute(eventAttr);
 
 	}
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java
index 5ae71dfb4..d201e6e22 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfo.java
@@ -272,7 +272,7 @@ public class ObjRelationshipInfo extends CayenneController implements TreeSelect
         RelationshipDisplayEvent rde = new RelationshipDisplayEvent(src, relationship, relationship.getSourceEntity(), controller.getSelectedDataMap(),
                 (DataChannelDescriptor) controller.getProject().getRootNode());
 
-        controller.fireObjRelationshipSelected(rde);
+        controller.displayObjRelationship(rde);
     }
 
     /**
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/query/QueryType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/query/QueryType.java
index ae76a7e8b..a38dc1f50 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/query/QueryType.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/query/QueryType.java
@@ -106,7 +106,7 @@ public class QueryType extends CayenneController{
             DataMap dataMap, QueryDescriptor query) {
         mediator.fireQueryEvent(new QueryEvent(src, query, MapEvent.ADD,
                 dataMap));
-        mediator.fireQuerySelected(new QueryDisplayEvent(src, query,
+        mediator.displayQuery(new QueryDisplayEvent(src, query,
                 dataMap, (DataChannelDescriptor)mediator.getProject().getRootNode()));
     }
     
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/AttributeErrorMsg.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/AttributeErrorMsg.java
index 316728284..d29d6fcd6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/AttributeErrorMsg.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/AttributeErrorMsg.java
@@ -61,11 +61,11 @@ public class AttributeErrorMsg extends ValidationDisplayHandler {
         // must first display entity, and then switch to relationship display ..
         // so fire twice
         if (entity instanceof ObjEntity) {
-            mediator.fireObjEntitySelected(event);
-            mediator.fireObjAttributeSelected(event);
+            mediator.displayObjEntity(event);
+            mediator.displayObjAttribute(event);
         } else if (entity instanceof DbEntity) {
-            mediator.fireDbEntitySelected(event);
-            mediator.fireDbAttributeSelected(event);
+            mediator.displayDbEntity(event);
+            mediator.displayDbAttribute(event);
         }
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/DataMapErrorMsg.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/DataMapErrorMsg.java
index efa9bc7f9..41aafa328 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/DataMapErrorMsg.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/DataMapErrorMsg.java
@@ -49,6 +49,6 @@ public class DataMapErrorMsg extends ValidationDisplayHandler {
     public void displayField(ProjectController mediator, JFrame frame) {
         DataMapDisplayEvent event;
         event = new DataMapDisplayEvent(frame, map, domain);
-        mediator.fireDataMapSelected(event);
+        mediator.displayDataMap(event);
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/DataNodeErrorMsg.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/DataNodeErrorMsg.java
index 197351e5c..2bdb7442e 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/DataNodeErrorMsg.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/DataNodeErrorMsg.java
@@ -54,7 +54,7 @@ public class DataNodeErrorMsg extends ValidationDisplayHandler {
     public void displayField(ProjectController mediator, JFrame frame) {
         DataNodeDisplayEvent event;
         event = new DataNodeDisplayEvent(frame, domain, node);
-        mediator.fireDataNodeSelected(event);
+        mediator.displayDataNode(event);
     }
 
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/DomainErrorMsg.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/DomainErrorMsg.java
index b0bf54030..63b8f839f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/DomainErrorMsg.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/DomainErrorMsg.java
@@ -47,7 +47,7 @@ public class DomainErrorMsg extends ValidationDisplayHandler {
     public void displayField(ProjectController mediator, JFrame frame) {
         DomainDisplayEvent event;
         event = new DomainDisplayEvent(frame, domain);
-        mediator.fireDomainSelected(event);
+        mediator.displayDomain(event);
     }
 
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableAttributeErrorMsg.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableAttributeErrorMsg.java
index 52eb53537..f98bd16b7 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableAttributeErrorMsg.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableAttributeErrorMsg.java
@@ -57,8 +57,8 @@ public class EmbeddableAttributeErrorMsg extends ValidationDisplayHandler {
                 map,
                 domain);
 
-        mediator.fireEmbeddableSelected(event);
-        mediator.fireEmbeddableAttributeSelected(event);
+        mediator.displayEmbeddable(event);
+        mediator.displayEmbeddableAttribute(event);
     }
 
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableErrorMsg.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableErrorMsg.java
index ab9aae061..4e4265414 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableErrorMsg.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableErrorMsg.java
@@ -52,7 +52,7 @@ public class EmbeddableErrorMsg extends ValidationDisplayHandler {
                 embeddable,
                 map,
                 domain);
-        mediator.fireEmbeddableSelected(event);
+        mediator.displayEmbeddable(event);
     }
 
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EntityErrorMsg.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EntityErrorMsg.java
index a4e3368ad..adbec3336 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EntityErrorMsg.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EntityErrorMsg.java
@@ -58,10 +58,10 @@ public class EntityErrorMsg extends ValidationDisplayHandler {
     public void displayField(ProjectController mediator, JFrame frame) {
         EntityDisplayEvent event = new EntityDisplayEvent(frame, entity, map, domain);
         if (entity instanceof ObjEntity) {
-            mediator.fireObjEntitySelected(event);
+            mediator.displayObjEntity(event);
         }
         else if (entity instanceof DbEntity) {
-            mediator.fireDbEntitySelected(event);
+            mediator.displayDbEntity(event);
         }
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ProcedureErrorMsg.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ProcedureErrorMsg.java
index cfe02003e..ba99c8a83 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ProcedureErrorMsg.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ProcedureErrorMsg.java
@@ -51,6 +51,6 @@ public class ProcedureErrorMsg extends ValidationDisplayHandler {
                 map,
                 domain);
         event.setTabReset(true);
-        mediator.fireProcedureSelected(event);
+        mediator.displayProcedure(event);
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ProcedureParameterErrorMsg.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ProcedureParameterErrorMsg.java
index 9296cafb2..875b731ca 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ProcedureParameterErrorMsg.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ProcedureParameterErrorMsg.java
@@ -59,7 +59,7 @@ public class ProcedureParameterErrorMsg extends ValidationDisplayHandler {
                 map,
                 domain);
         procedureEvent.setTabReset(true);
-        mediator.fireProcedureSelected(procedureEvent);
+        mediator.displayProcedure(procedureEvent);
 
         // now show the failed parameter
         ProcedureParameterDisplayEvent event = new ProcedureParameterDisplayEvent(
@@ -70,7 +70,7 @@ public class ProcedureParameterErrorMsg extends ValidationDisplayHandler {
                 domain);
 
         event.setTabReset(true);
-        mediator.fireProcedureParameterSelected(event);
+        mediator.displayProcedureParameter(event);
     }
 
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/QueryErrorMsg.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/QueryErrorMsg.java
index 4d56dacee..e10847093 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/QueryErrorMsg.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/QueryErrorMsg.java
@@ -46,6 +46,6 @@ public class QueryErrorMsg extends ValidationDisplayHandler {
         DataMap map = query.getDataMap();
 
         QueryDisplayEvent event = new QueryDisplayEvent(frame, query, map, domain);
-        mediator.fireQuerySelected(event);
+        mediator.displayQuery(event);
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/RelationshipErrorMsg.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/RelationshipErrorMsg.java
index b51a98ed1..cc22f730a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/RelationshipErrorMsg.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/RelationshipErrorMsg.java
@@ -68,12 +68,12 @@ public class RelationshipErrorMsg extends ValidationDisplayHandler {
         // must first display entity, and then switch to relationship display .. so fire
         // twice
         if (entity instanceof ObjEntity) {
-            mediator.fireObjEntitySelected(event);
-            mediator.fireObjRelationshipSelected(event);
+            mediator.displayObjEntity(event);
+            mediator.displayObjRelationship(event);
         }
         else if (entity instanceof DbEntity) {
-            mediator.fireDbEntitySelected(event);
-            mediator.fireDbRelationshipSelected(event);
+            mediator.displayDbEntity(event);
+            mediator.displayDbRelationship(event);
         }
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java
index 73862ef69..18851bd91 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java
@@ -19,25 +19,6 @@
 
 package org.apache.cayenne.modeler.dialog.welcome;
 
-import java.awt.Color;
-import java.awt.GradientPaint;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.GridBagLayout;
-import java.awt.Paint;
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.util.List;
-
-import javax.swing.Action;
-import javax.swing.BorderFactory;
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JList;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ModelerPreferences;
 import org.apache.cayenne.modeler.action.NewProjectAction;
@@ -46,29 +27,22 @@ import org.apache.cayenne.modeler.event.model.RecentFileListListener;
 import org.apache.cayenne.modeler.util.BackgroundPanel;
 import org.apache.cayenne.modeler.util.ModelerUtil;
 
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.util.List;
+
 /**
- * Welcome screen (CAY-894) is a panel shown when no project is open. User can quickly
- * create new project or open an existing one.
+ * A panel shown when no project is open. User can quickly create new project or open an existing one.
  */
 public class WelcomeScreen extends JScrollPane implements RecentFileListListener, RecentFileListRenderer.OnFileClickListener {
 
-    /**
-     * Top color of gradient background
-     */
     private static final Color TOP_GRADIENT = new Color(153, 153, 153);
-
-    /**
-     * Bottom color of gradient background
-     */
     private static final Color BOTTOM_GRADIENT = new Color(230, 230, 230);
 
-    /**
-     * List of recent projects
-     */
     private JList<String> recentProjectsList;
-
     private JPanel buttonsPanel;
-
     private JPanel mainPanel;
 
     public WelcomeScreen() {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainView.java
index 6670a4cb1..c42ab086c 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainView.java
@@ -177,7 +177,7 @@ public class DataDomainView extends JPanel implements DomainDisplayListener {
      * Invoked on domain selection event. Updates view with the values from the currently
      * selected domain.
      */
-    public void currentDomainChanged(DomainDisplayEvent e) {
+    public void domainSelected(DomainDisplayEvent e) {
         DataChannelDescriptor domain = e.getDomain();
         if (null == domain) {
             return;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorPanel.java
similarity index 64%
rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorView.java
rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorPanel.java
index 4dbe187e5..5ce911b32 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorPanel.java
@@ -20,7 +20,6 @@
 package org.apache.cayenne.modeler.editor;
 
 import org.apache.cayenne.map.QueryDescriptor;
-import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.ProjectTreeView;
 import org.apache.cayenne.modeler.action.ActionManager;
@@ -29,49 +28,17 @@ import org.apache.cayenne.modeler.action.FilterAction;
 import org.apache.cayenne.modeler.dialog.datadomain.FilterController;
 import org.apache.cayenne.modeler.editor.datanode.DataNodeEditor;
 import org.apache.cayenne.modeler.editor.dbentity.DbEntityTabbedView;
-import org.apache.cayenne.modeler.event.display.DataMapDisplayEvent;
-import org.apache.cayenne.modeler.event.display.DataMapDisplayListener;
-import org.apache.cayenne.modeler.event.display.DataNodeDisplayEvent;
-import org.apache.cayenne.modeler.event.display.DataNodeDisplayListener;
-import org.apache.cayenne.modeler.event.display.DbEntityDisplayListener;
-import org.apache.cayenne.modeler.event.display.DomainDisplayEvent;
-import org.apache.cayenne.modeler.event.display.DomainDisplayListener;
-import org.apache.cayenne.modeler.event.display.EmbeddableDisplayEvent;
-import org.apache.cayenne.modeler.event.display.EmbeddableDisplayListener;
-import org.apache.cayenne.modeler.event.display.EntityDisplayEvent;
-import org.apache.cayenne.modeler.event.display.MultipleObjectsDisplayEvent;
-import org.apache.cayenne.modeler.event.display.MultipleObjectsDisplayListener;
-import org.apache.cayenne.modeler.event.display.ObjEntityDisplayListener;
-import org.apache.cayenne.modeler.event.display.ProcedureDisplayEvent;
-import org.apache.cayenne.modeler.event.display.ProcedureDisplayListener;
 import org.apache.cayenne.modeler.event.display.QueryDisplayEvent;
-import org.apache.cayenne.modeler.event.display.QueryDisplayListener;
 import org.apache.cayenne.modeler.pref.ComponentGeometry;
 import org.slf4j.LoggerFactory;
 
-import javax.swing.Action;
-import javax.swing.BorderFactory;
-import javax.swing.JButton;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JSplitPane;
-import javax.swing.JTabbedPane;
-import javax.swing.JToolBar;
-import java.awt.BorderLayout;
-import java.awt.CardLayout;
-import java.awt.Component;
-import java.awt.ComponentOrientation;
-import java.awt.Container;
-import java.awt.Dimension;
+import javax.swing.*;
+import java.awt.*;
 
 /**
- * Main display area split into the project navigation tree on the left and selected
- * object editor on the right.
+ * Main display area split into the project navigation tree on the left and selected object editor on the right.
  */
-public class EditorView extends JPanel implements ObjEntityDisplayListener,
-        DbEntityDisplayListener, DomainDisplayListener, DataMapDisplayListener,
-        DataNodeDisplayListener, ProcedureDisplayListener, QueryDisplayListener,
-        MultipleObjectsDisplayListener, EmbeddableDisplayListener {
+public class EditorPanel extends JPanel {
 
     private static final String EMPTY_VIEW = "Empty";
     private static final String DOMAIN_VIEW = "Domain";
@@ -99,20 +66,15 @@ public class EditorView extends JPanel implements ObjEntityDisplayListener,
     private DataDomainTabbedView dataDomainView;
     private DataMapTabbedView dataMapView;
     private ProcedureTabbedView procedureView;
-    private SelectQueryTabbedView selectQueryView;
     private SQLTemplateTabbedView sqlTemplateView;
     private EjbqlTabbedView ejbqlQueryView;
     private JTabbedPane dataNodeView;
 
     protected ActionManager actionManager;
-	private FilterController filterController;
-    
-	public FilterController getFilterController() {
-		return filterController;
-	}
-
-	public SelectQueryTabbedView getSelectQueryView() {
-        return selectQueryView;
+    private FilterController filterController;
+
+    public FilterController getFilterController() {
+        return filterController;
     }
 
     public SQLTemplateTabbedView getSqlTemplateView() {
@@ -154,25 +116,12 @@ public class EditorView extends JPanel implements ObjEntityDisplayListener,
     public JTabbedPane getDataNodeView() {
         return dataNodeView;
     }
-    
-    public ProjectTreeView getTreePanel() {
-		return treePanel;
-	}
 
-    public EditorView(ProjectController eventController) {
+    public EditorPanel(ProjectController eventController) {
         this.projectController = eventController;
         this.actionManager = eventController.getApplication().getActionManager();
-        initView();
-        initController();
-       
-    }
-
-    public ProjectController getProjectController() {
-		return projectController;
-	}
 
-	private void initView() {
-	    setBorder(BorderFactory.createEmptyBorder(1, 0, 0, 1));
+        setBorder(BorderFactory.createEmptyBorder(1, 0, 0, 1));
         // init widgets
         actionManager.getAction(CollapseTreeAction.class).setAlwaysOn(true);
         actionManager.getAction(FilterAction.class).setAlwaysOn(true);
@@ -183,8 +132,8 @@ public class EditorView extends JPanel implements ObjEntityDisplayListener,
         barPanel.setBorder(BorderFactory.createEmptyBorder());
         barPanel.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
 
-        JButton collapseButton = getAction(CollapseTreeAction.class).buildButton(1);
-        JButton filterButton = getAction(FilterAction.class).buildButton(3);
+        JButton collapseButton = actionManager.getAction(CollapseTreeAction.class).buildButton(1);
+        JButton filterButton = actionManager.getAction(FilterAction.class).buildButton(3);
         filterButton.setPreferredSize(new Dimension(30, 30));
         collapseButton.setPreferredSize(new Dimension(30, 30));
         barPanel.add(filterButton);
@@ -227,7 +176,7 @@ public class EditorView extends JPanel implements ObjEntityDisplayListener,
         procedureView = new ProcedureTabbedView(projectController);
         detailPanel.add(procedureView, PROCEDURE_VIEW);
 
-        selectQueryView = new SelectQueryTabbedView(projectController);
+        SelectQueryTabbedView selectQueryView = new SelectQueryTabbedView(projectController);
         detailPanel.add(selectQueryView, SELECT_QUERY_VIEW);
 
         sqlTemplateView = new SQLTemplateTabbedView(projectController);
@@ -258,25 +207,18 @@ public class EditorView extends JPanel implements ObjEntityDisplayListener,
 
         setLayout(new BorderLayout());
         add(splitPane, BorderLayout.CENTER);
-    }
-    
-    private <T extends Action> T getAction(Class<T> type) {
-        return actionManager.getAction(type);
-    }
 
+        this.filterController = new FilterController(treePanel);
 
-	private void initController() {
-		this.filterController = new FilterController(treePanel);
-		 
-        projectController.addDomainDisplayListener(this);
-        projectController.addDataNodeDisplayListener(this);
-        projectController.addDataMapDisplayListener(this);
-        projectController.addObjEntityDisplayListener(this);
-        projectController.addDbEntityDisplayListener(this);
-        projectController.addProcedureDisplayListener(this);
-        projectController.addQueryDisplayListener(this);
-        projectController.addMultipleObjectsDisplayListener(this);
-        projectController.addEmbeddableDisplayListener(this);
+        projectController.addDomainDisplayListener(e -> detailLayout.show(detailPanel, e.getDomain() == null ? EMPTY_VIEW : DOMAIN_VIEW));
+        projectController.addDataNodeDisplayListener(e -> detailLayout.show(detailPanel, e.getDataNode() == null ? EMPTY_VIEW : NODE_VIEW));
+        projectController.addDataMapDisplayListener(e -> detailLayout.show(detailPanel, e.getDataMap() == null ? EMPTY_VIEW : DATA_MAP_VIEW));
+        projectController.addObjEntityDisplayListener(e -> detailLayout.show(detailPanel, e.getEntity() == null ? EMPTY_VIEW : OBJ_VIEW));
+        projectController.addDbEntityDisplayListener(e -> detailLayout.show(detailPanel, e.getEntity() == null ? EMPTY_VIEW : DB_VIEW));
+        projectController.addProcedureDisplayListener(e -> detailLayout.show(detailPanel, e.getProcedure() == null ? EMPTY_VIEW : PROCEDURE_VIEW));
+        projectController.addQueryDisplayListener(this::querySelected);
+        projectController.addMultipleObjectsDisplayListener(e -> detailLayout.show(detailPanel, EMPTY_VIEW));
+        projectController.addEmbeddableDisplayListener(e -> detailLayout.show(detailPanel, e.getEmbeddable() == null ? EMPTY_VIEW : EMBEDDABLE_VIEW));
 
         // Moving this to try-catch block per CAY-940. Exception will be stack-traced
         try {
@@ -287,31 +229,7 @@ public class EditorView extends JPanel implements ObjEntityDisplayListener,
         }
     }
 
-    public void currentProcedureChanged(ProcedureDisplayEvent e) {
-        detailLayout.show(detailPanel, e.getProcedure() == null ? EMPTY_VIEW : PROCEDURE_VIEW);
-    }
-
-    public void currentDomainChanged(DomainDisplayEvent e) {
-        detailLayout.show(detailPanel, e.getDomain() == null ? EMPTY_VIEW : DOMAIN_VIEW);
-    }
-
-    public void currentDataNodeChanged(DataNodeDisplayEvent e) {
-        detailLayout.show(detailPanel, e.getDataNode() == null ? EMPTY_VIEW : NODE_VIEW);
-    }
-
-    public void currentDataMapChanged(DataMapDisplayEvent e) {
-        detailLayout.show(detailPanel, e.getDataMap() == null ? EMPTY_VIEW : DATA_MAP_VIEW);
-    }
-
-    public void currentObjEntityChanged(EntityDisplayEvent e) {
-	    detailLayout.show(detailPanel, e.getEntity() == null ? EMPTY_VIEW : OBJ_VIEW);
-    }
-
-    public void currentDbEntityChanged(EntityDisplayEvent e) {
-        detailLayout.show(detailPanel, e.getEntity() == null ? EMPTY_VIEW : DB_VIEW);
-    }
-
-    public void currentQueryChanged(QueryDisplayEvent e) {
+    private void querySelected(QueryDisplayEvent e) {
         QueryDescriptor query = e.getQuery();
 
         switch (query.getType()) {
@@ -331,12 +249,4 @@ public class EditorView extends JPanel implements ObjEntityDisplayListener,
                 detailLayout.show(detailPanel, EMPTY_VIEW);
         }
     }
-
-    public void currentObjectsChanged(MultipleObjectsDisplayEvent e, Application application) {
-        detailLayout.show(detailPanel, EMPTY_VIEW);
-    }
-
-    public void currentEmbeddableChanged(EmbeddableDisplayEvent e) {
-        detailLayout.show(detailPanel, e.getEmbeddable() == null ? EMPTY_VIEW : EMBEDDABLE_VIEW);
-    }
 }
\ No newline at end of file
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableAttributeTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableAttributeTab.java
index 55c7887db..5db02b92a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableAttributeTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableAttributeTab.java
@@ -148,7 +148,7 @@ public class EmbeddableAttributeTab extends JPanel implements
                 controller.getSelectedDataMap(),
                 (DataChannelDescriptor) controller.getProject().getRootNode());
 
-        controller.fireEmbeddableAttributeSelected(ev);
+        controller.displayEmbeddableAttribute(ev);
     }
 
     private void rebuildTable(Embeddable emb) {
@@ -223,7 +223,7 @@ public class EmbeddableAttributeTab extends JPanel implements
         table.select(ind);
     }
 
-    public void currentEmbeddableChanged(EmbeddableDisplayEvent e) {
+    public void embeddableSelected(EmbeddableDisplayEvent e) {
         if (e.getSource() == this) {
             return;
         }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableTab.java
index 60cd2cba6..d43abed69 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableTab.java
@@ -177,7 +177,7 @@ public class EmbeddableTab extends JPanel implements EmbeddableDisplayListener {
 
     }
 
-    public void currentEmbeddableChanged(EmbeddableDisplayEvent e) {
+    public void embeddableSelected(EmbeddableDisplayEvent e) {
         Embeddable embeddable = e.getEmbeddable();
         if (embeddable == null) {
             return;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java
index b3a554c94..322383526 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java
@@ -308,7 +308,7 @@ public class ObjAttributeTableModel extends CayenneTableModel<ObjAttributeWrappe
 
         controller.fireObjEntityEvent(new EntityEvent(this, entity, MapEvent.CHANGE));
 
-        controller.fireObjEntitySelected(new EntityDisplayEvent(
+        controller.displayObjEntity(new EntityDisplayEvent(
                 this,
                 controller.getSelectedObjEntity(),
                 controller.getSelectedDataMap(),
@@ -320,7 +320,7 @@ public class ObjAttributeTableModel extends CayenneTableModel<ObjAttributeWrappe
                 entity,
                 MapEvent.CHANGE));
 
-        controller.fireObjAttributeSelected(new AttributeDisplayEvent(
+        controller.displayObjAttribute(new AttributeDisplayEvent(
                 this,
                 attributeNew,
                 controller.getSelectedObjEntity(),
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
index 2b203b5bd..01c586dad 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
@@ -291,7 +291,7 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL
         }
     }
 
-    public void currentObjEntityChanged(EntityDisplayEvent e) {
+    public void objEntitySelected(EntityDisplayEvent e) {
         if (e.getSource() == this) {
             return;
         }
@@ -495,7 +495,7 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL
             editMenu.setEnabled(editEnabled);
         }
 
-        controller.fireObjAttributeSelected(new AttributeDisplayEvent(
+        controller.displayObjAttribute(new AttributeDisplayEvent(
                 this,
                 attrs,
                 controller.getSelectedObjEntity(),
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeRelationshipTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeRelationshipTab.java
index 22319ea40..e0c079c35 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeRelationshipTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeRelationshipTab.java
@@ -157,9 +157,9 @@ public class ObjEntityAttributeRelationshipTab extends JPanel implements ObjEnti
     }
 
     @Override
-    public void currentObjEntityChanged(EntityDisplayEvent e) {
-        attributePanel.currentObjEntityChanged(e);
-        relationshipPanel.currentObjEntityChanged(e);
+    public void objEntitySelected(EntityDisplayEvent e) {
+        attributePanel.objEntitySelected(e);
+        relationshipPanel.objEntitySelected(e);
     }
 
     public JToolBar getToolBar() {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityCallbackMethodsTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityCallbackMethodsTab.java
index b155b28eb..a48371d0d 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityCallbackMethodsTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityCallbackMethodsTab.java
@@ -347,7 +347,7 @@ public class ObjEntityCallbackMethodsTab extends JPanel {
         }
 
         public void actionPerformed(ActionEvent e) {
-            controller.fireCallbackTypeSelected(new CallbackTypeDisplayEvent(this, callbackType));
+            controller.displayCallbackType(new CallbackTypeDisplayEvent(this, callbackType));
         }
     }
 
@@ -424,7 +424,7 @@ public class ObjEntityCallbackMethodsTab extends JPanel {
                         }
                     }
 
-                    controller.fireCallbackTypeSelected(new CallbackTypeDisplayEvent(this,
+                    controller.displayCallbackType(new CallbackTypeDisplayEvent(this,
                             ((CallbackDescriptorTableModel) table.getCayenneModel()).getCallbackType()));
                 }
 
@@ -441,7 +441,7 @@ public class ObjEntityCallbackMethodsTab extends JPanel {
                     }
                 }
 
-                controller.fireCallbackMethodSelected(new CallbackMethodDisplayEvent(this, methods));
+                controller.displayCallbackMethod(new CallbackMethodDisplayEvent(this, methods));
                 boolean enabled = methods.length > 0;
                 boolean multiple = methods.length > 1;
 
@@ -505,7 +505,7 @@ public class ObjEntityCallbackMethodsTab extends JPanel {
         public void mousePressed(MouseEvent e) {
             if (e.isPopupTrigger() && e.getComponent() instanceof JTableHeader) {
                 unselectAll();
-                controller.fireCallbackTypeSelected(new CallbackTypeDisplayEvent(this,
+                controller.displayCallbackType(new CallbackTypeDisplayEvent(this,
                         ((CallbackDescriptorTableModel) table.getCayenneModel()).getCallbackType()));
                 popupMenu.show(e.getComponent(), e.getX(), e.getY());
             }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
index b96024967..86267663b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
@@ -164,7 +164,7 @@ public class ObjEntityRelationshipPanel extends JPanel implements ObjEntityDispl
     /**
      * Loads obj relationships into table.
      */
-    public void currentObjEntityChanged(EntityDisplayEvent e) {
+    public void objEntitySelected(EntityDisplayEvent e) {
         if (e.getSource() == this) {
             return;
         }
@@ -439,7 +439,7 @@ public class ObjEntityRelationshipPanel extends JPanel implements ObjEntityDispl
             editMenu.setEnabled(editEnabled);
         }
 
-        controller.fireObjRelationshipSelected(new RelationshipDisplayEvent(
+        controller.displayObjRelationship(new RelationshipDisplayEvent(
                 this,
                 rels,
                 controller.getSelectedObjEntity(),
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityTab.java
index 7309a4d35..378d83497 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityTab.java
@@ -244,7 +244,7 @@ public class ObjEntityTab extends JPanel implements ObjEntityDisplayListener, Ex
                 DataMap map = controller.getSelectedDataMap();
 
                 controller.fireObjEntityEvent(new EntityEvent(this, entity));
-                controller.fireObjEntitySelected(new EntityDisplayEvent(this, entity, map, domain));
+                controller.displayObjEntity(new EntityDisplayEvent(this, entity, map, domain));
             }
         });
 
@@ -253,7 +253,7 @@ public class ObjEntityTab extends JPanel implements ObjEntityDisplayListener, Ex
             DbEntity entity = controller.getSelectedObjEntity().getDbEntity();
             if (entity != null) {
                 DataChannelDescriptor dom = (DataChannelDescriptor) controller.getProject().getRootNode();
-                controller.fireDbEntitySelected(new EntityDisplayEvent(this, entity, entity.getDataMap(), dom));
+                controller.displayDbEntity(new EntityDisplayEvent(this, entity, entity.getDataMap(), dom));
             }
         });
 
@@ -436,10 +436,10 @@ public class ObjEntityTab extends JPanel implements ObjEntityDisplayListener, Ex
                 controller.getSelectedObjEntity(),
                 controller.getSelectedDataMap(),
                 (DataChannelDescriptor) controller.getProject().getRootNode());
-        controller.fireObjEntitySelected(ede);
+        controller.displayObjEntity(ede);
     }
 
-    public void currentObjEntityChanged(EntityDisplayEvent e) {
+    public void objEntitySelected(EntityDisplayEvent e) {
         ObjEntity entity = (ObjEntity) e.getEntity();
         if (entity == null) {
             return;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureParameterTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureParameterTab.java
index a99887339..f532063ef 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureParameterTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureParameterTab.java
@@ -234,13 +234,13 @@ public class ProcedureParameterTab extends JPanel implements ProcedureParameterL
                 eventController.getSelectedProcedure(),
                 eventController.getSelectedDataMap(),
                 (DataChannelDescriptor) eventController.getProject().getRootNode());
-        eventController.fireProcedureParameterSelected(ppde);
+        eventController.displayProcedureParameter(ppde);
     }
 
     /**
      * Invoked when currently selected Procedure object is changed.
      */
-    public void currentProcedureChanged(ProcedureDisplayEvent e) {
+    public void procedureSelected(ProcedureDisplayEvent e) {
         Procedure procedure = e.getProcedure();
         if (procedure != null) {
             rebuildTable(procedure);
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureTab.java
index 9be5bf9ae..590205fb6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ProcedureTab.java
@@ -122,13 +122,13 @@ public class ProcedureTab extends JPanel implements ProcedureDisplayListener, Ex
     public void processExistingSelection(EventObject e) {
         ProcedureDisplayEvent pde = new ProcedureDisplayEvent(this, eventController.getSelectedProcedure(),
                 eventController.getSelectedDataMap(), (DataChannelDescriptor) eventController.getProject().getRootNode());
-        eventController.fireProcedureSelected(pde);
+        eventController.displayProcedure(pde);
     }
 
     /**
      * Invoked when currently selected Procedure object is changed.
      */
-    public void currentProcedureChanged(ProcedureDisplayEvent e) {
+    public void procedureSelected(ProcedureDisplayEvent e) {
         Procedure procedure = e.getProcedure();
         if (procedure == null) {
             return;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplatePrefetchTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplatePrefetchTab.java
index fae168dc8..928fa0fe9 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplatePrefetchTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplatePrefetchTab.java
@@ -163,7 +163,7 @@ public class SQLTemplatePrefetchTab extends JPanel implements PropertyChangeList
         prefetchBox.addItem(SelectQueryPrefetchTab.JOINT_PREFETCH_SEMANTICS);
         prefetchBox.addItem(SelectQueryPrefetchTab.DISJOINT_BY_ID_PREFETCH_SEMANTICS);
 
-        prefetchBox.addActionListener(e -> Application.getInstance().getFrameController().getEditorView().getProjectController().setDirty(true));
+        prefetchBox.addActionListener(e -> Application.getInstance().getFrameController().getProjectController().setDirty(true));
 
         column.setCellEditor(new DefaultCellEditor(prefetchBox));
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryPrefetchTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryPrefetchTab.java
index dc8f6a9ee..eec25ebee 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryPrefetchTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryPrefetchTab.java
@@ -73,7 +73,7 @@ public class SelectQueryPrefetchTab extends SelectQueryOrderingTab {
         prefetchBox.addItem(DISJOINT_PREFETCH_SEMANTICS);
         prefetchBox.addItem(DISJOINT_BY_ID_PREFETCH_SEMANTICS);
 
-        prefetchBox.addActionListener(e -> Application.getInstance().getFrameController().getEditorView().getProjectController().setDirty(true));
+        prefetchBox.addActionListener(e -> Application.getInstance().getFrameController().getProjectController().setDirty(true));
 
         column.setCellEditor(new DefaultCellEditor(prefetchBox));
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
index cae87e698..768b63d41 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
@@ -106,7 +106,7 @@ public class CgenTabController extends GeneratorsTabController<CgenConfiguration
     public void showConfig(DataMap dataMap) {
         if (dataMap != null) {
             DataMapDisplayEvent event = new DataMapDisplayEvent(getView(), dataMap, dataMap.getDataChannelDescriptor());
-            getProjectController().fireDataMapSelected(event);
+            getProjectController().displayDataMap(event);
         }
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributePanel.java
index d4d0cd04d..671d0b35d 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributePanel.java
@@ -149,7 +149,7 @@ public class DbEntityAttributePanel extends JPanel implements DbEntityDisplayLis
     }
 
     @Override
-    public void currentDbEntityChanged(EntityDisplayEvent e) {
+    public void dbEntitySelected(EntityDisplayEvent e) {
 
         DbEntity entity = (DbEntity) e.getEntity();
         if (entity != null) {
@@ -233,7 +233,7 @@ public class DbEntityAttributePanel extends JPanel implements DbEntityDisplayLis
             }
         }
 
-        controller.fireDbAttributeSelected(new AttributeDisplayEvent(
+        controller.displayDbAttribute(new AttributeDisplayEvent(
                 this,
                 attrs,
                 controller.getSelectedDbEntity(),
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeRelationshipTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeRelationshipTab.java
index b75f640f8..22a06ef31 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeRelationshipTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeRelationshipTab.java
@@ -159,7 +159,7 @@ public class DbEntityAttributeRelationshipTab extends JPanel implements DbEntity
         relationshipPanel.dbEntityRemoved(e);
     }
 
-    public void currentDbEntityChanged(EntityDisplayEvent e) {
+    public void dbEntitySelected(EntityDisplayEvent e) {
         DbEntity entity = (DbEntity) e.getEntity();
         if (entity.getDataMap().getMappedEntities(entity).isEmpty()) {
             toolBar.getComponentAtIndex(4).setEnabled(false);
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipPanel.java
index 945483857..fab9e6cef 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipPanel.java
@@ -150,7 +150,7 @@ public class DbEntityRelationshipPanel extends JPanel implements DbEntityDisplay
     /**
      * Loads obj relationships into table.
      */
-    public void currentDbEntityChanged(EntityDisplayEvent e) {
+    public void dbEntitySelected(EntityDisplayEvent e) {
         DbEntity entity = (DbEntity) e.getEntity();
         if (entity != null) {
             // TODO: this line seems to slow down the Modeler significantly sometimes
@@ -315,7 +315,7 @@ public class DbEntityRelationshipPanel extends JPanel implements DbEntityDisplay
             editMenu.setEnabled(editEnabled);
         }
 
-        controller.fireDbRelationshipSelected(new RelationshipDisplayEvent(
+        controller.displayDbRelationship(new RelationshipDisplayEvent(
                 this,
                 rels,
                 controller.getSelectedDbEntity(),
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java
index 3190f838d..5db01c2da 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java
@@ -182,10 +182,10 @@ public class DbEntityTab extends JPanel implements ExistingSelectionProcessor, D
     public void processExistingSelection(EventObject e) {
         EntityDisplayEvent ede = new EntityDisplayEvent(this, controller.getSelectedDbEntity(),
                 controller.getSelectedDataMap(), (DataChannelDescriptor) controller.getProject().getRootNode());
-        controller.fireDbEntitySelected(ede);
+        controller.displayDbEntity(ede);
     }
 
-    public void currentDbEntityChanged(EntityDisplayEvent e) {
+    public void dbEntitySelected(EntityDisplayEvent e) {
         DbEntity entity = (DbEntity) e.getEntity();
 
         if (entity == null) {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/domain/DbImportTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/domain/DbImportTabController.java
index 0436af1eb..6feae4a6f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/domain/DbImportTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbimport/domain/DbImportTabController.java
@@ -53,7 +53,7 @@ public class DbImportTabController extends GeneratorsTabController<ReverseEngine
     public void showConfig(DataMap dataMap) {
         if (dataMap != null) {
             DataMapDisplayEvent event = new DataMapDisplayEvent(getView(), dataMap, dataMap.getDataChannelDescriptor());
-            getProjectController().fireDataMapSelected(event);
+            getProjectController().displayDataMap(event);
         }
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/CallbackMethodDisplayListener.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/CallbackMethodDisplayListener.java
index daac8410a..3ef0b3667 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/CallbackMethodDisplayListener.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/CallbackMethodDisplayListener.java
@@ -22,6 +22,6 @@ import java.util.EventListener;
 
 public interface CallbackMethodDisplayListener extends EventListener {
 
-    void currentCallbackMethodChanged(CallbackMethodDisplayEvent e);
+    void callbackMethodSelected(CallbackMethodDisplayEvent e);
 }
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DataMapDisplayListener.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DataMapDisplayListener.java
index 07c46ac54..b0ad62c76 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DataMapDisplayListener.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DataMapDisplayListener.java
@@ -21,5 +21,6 @@ package org.apache.cayenne.modeler.event.display;
 import java.util.EventListener;
 
 public interface DataMapDisplayListener extends EventListener {
-    void currentDataMapChanged(DataMapDisplayEvent e);
+
+    void dataMapSelected(DataMapDisplayEvent e);
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DataNodeDisplayListener.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DataNodeDisplayListener.java
index e35f004ff..72703fb68 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DataNodeDisplayListener.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DataNodeDisplayListener.java
@@ -23,5 +23,6 @@ package org.apache.cayenne.modeler.event.display;
 import java.util.EventListener;
 
 public interface DataNodeDisplayListener extends EventListener {
-	public void currentDataNodeChanged(DataNodeDisplayEvent e);
+
+    void dataNodeSlected(DataNodeDisplayEvent e);
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DbAttributeDisplayListener.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DbAttributeDisplayListener.java
index 9cdbf145c..0c37e757c 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DbAttributeDisplayListener.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DbAttributeDisplayListener.java
@@ -22,11 +22,7 @@ package org.apache.cayenne.modeler.event.display;
 
 import java.util.EventListener;
 
-/**
- * Used to display DbAttribute.
- */
 public interface DbAttributeDisplayListener extends EventListener {
 
-    /** Displays specified db attribute. */
-    public void currentDbAttributeChanged(AttributeDisplayEvent e);
+    void dbAttributeSelected(AttributeDisplayEvent e);
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DbEntityDisplayListener.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DbEntityDisplayListener.java
index de91ae609..78bb026a7 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DbEntityDisplayListener.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DbEntityDisplayListener.java
@@ -21,12 +21,7 @@ package org.apache.cayenne.modeler.event.display;
 
 import java.util.EventListener;
 
-/** 
- * Interface for classes that are interested in DbEntity 
- * display events. 
- * 
- */
 public interface DbEntityDisplayListener extends EventListener {
-    /** Current entity used as a model has changed.*/
-    public void currentDbEntityChanged(EntityDisplayEvent e);
+
+    void dbEntitySelected(EntityDisplayEvent e);
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DbRelationshipDisplayListener.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DbRelationshipDisplayListener.java
index c24fb397b..6910567ce 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DbRelationshipDisplayListener.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DbRelationshipDisplayListener.java
@@ -17,14 +17,10 @@ package org.apache.cayenne.modeler.event.display;
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
-
-
 import java.util.EventListener;
 
-/** Used to display DbRelationship. */
-public interface DbRelationshipDisplayListener extends EventListener
-{
-	/** Display specified DbRelationship. */
-	public void currentDbRelationshipChanged(RelationshipDisplayEvent e);
+public interface DbRelationshipDisplayListener extends EventListener {
+
+    void dbRelationshipSelected(RelationshipDisplayEvent e);
 }
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DomainDisplayListener.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DomainDisplayListener.java
index 4612bde7e..00895e1d1 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DomainDisplayListener.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/DomainDisplayListener.java
@@ -19,10 +19,9 @@ package org.apache.cayenne.modeler.event.display;
  ****************************************************************/
 
 
-
 import java.util.EventListener;
 
-public interface DomainDisplayListener extends EventListener
-{
-	public void currentDomainChanged(DomainDisplayEvent e);
+public interface DomainDisplayListener extends EventListener {
+
+    void domainSelected(DomainDisplayEvent e);
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/EmbeddableAttributeDisplayListener.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/EmbeddableAttributeDisplayListener.java
index fc1678ae0..6f6bc14d1 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/EmbeddableAttributeDisplayListener.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/EmbeddableAttributeDisplayListener.java
@@ -21,7 +21,7 @@ package org.apache.cayenne.modeler.event.display;
 import java.util.EventListener;
 
 
-public interface EmbeddableAttributeDisplayListener extends EventListener{
-   
-    public void currentEmbeddableAttributeChanged(EmbeddableAttributeDisplayEvent e);
+public interface EmbeddableAttributeDisplayListener extends EventListener {
+
+    void embeddableAttributeSelected(EmbeddableAttributeDisplayEvent e);
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/EmbeddableDisplayListener.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/EmbeddableDisplayListener.java
index 7815a7ef9..4073e669f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/EmbeddableDisplayListener.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/EmbeddableDisplayListener.java
@@ -22,5 +22,5 @@ import java.util.EventListener;
 
 public interface EmbeddableDisplayListener extends EventListener {
 
-    public void currentEmbeddableChanged(EmbeddableDisplayEvent e);
+    void embeddableSelected(EmbeddableDisplayEvent e);
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/MultipleObjectsDisplayListener.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/MultipleObjectsDisplayListener.java
index 069d5c1a5..9bb9e6a4b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/MultipleObjectsDisplayListener.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/MultipleObjectsDisplayListener.java
@@ -20,15 +20,7 @@ package org.apache.cayenne.modeler.event.display;
 
 import java.util.EventListener;
 
-import org.apache.cayenne.modeler.Application;
-
-/**
- * Listener for multiple objects selections 
- */
 public interface MultipleObjectsDisplayListener extends EventListener {
-    /**
-     * Invoked when a new set of objects was displayed
-     * @param application 
-     */
-    public void currentObjectsChanged(MultipleObjectsDisplayEvent e, Application application);
+
+    void multipleObjectsSelected(MultipleObjectsDisplayEvent e);
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/ObjAttributeDisplayListener.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/ObjAttributeDisplayListener.java
index dd4225aad..374491580 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/ObjAttributeDisplayListener.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/ObjAttributeDisplayListener.java
@@ -17,13 +17,8 @@ package org.apache.cayenne.modeler.event.display;
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
-
-
 import java.util.EventListener;
 
-/** Used to display ObjAttribute. */
-public interface ObjAttributeDisplayListener extends EventListener
-{
-	/** Display specified ObjAttribute.*/
-	public void currentObjAttributeChanged(AttributeDisplayEvent e);
+public interface ObjAttributeDisplayListener extends EventListener {
+    void objAttributeSelected(AttributeDisplayEvent e);
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/ObjEntityDisplayListener.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/ObjEntityDisplayListener.java
index 34cbf45ad..542a38a27 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/ObjEntityDisplayListener.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/ObjEntityDisplayListener.java
@@ -17,18 +17,10 @@ package org.apache.cayenne.modeler.event.display;
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
-
-
 import java.util.EventListener;
 
-/**
- * Used when the current ObjEntity has changed.
- */
 public interface ObjEntityDisplayListener extends EventListener {
 
-    /**
-     * Current obj entity used as a model has changed.
-     */
-    void currentObjEntityChanged(EntityDisplayEvent e);
+    void objEntitySelected(EntityDisplayEvent e);
 }
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/ProcedureDisplayListener.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/ProcedureDisplayListener.java
index 3df709829..e297a6052 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/ProcedureDisplayListener.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/ProcedureDisplayListener.java
@@ -21,11 +21,6 @@ package org.apache.cayenne.modeler.event.display;
 
 import java.util.EventListener;
 
-/** 
- * Interface for classes that are interested in Procedure 
- * display events. 
- * 
- */
 public interface ProcedureDisplayListener extends EventListener {
-    public void currentProcedureChanged(ProcedureDisplayEvent e);
+    void procedureSelected(ProcedureDisplayEvent e);
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/ProcedureParameterDisplayListener.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/ProcedureParameterDisplayListener.java
index 6373c9d9a..c7ba80706 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/ProcedureParameterDisplayListener.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/ProcedureParameterDisplayListener.java
@@ -21,7 +21,7 @@ package org.apache.cayenne.modeler.event.display;
 
 import java.util.EventListener;
 
-
 public interface ProcedureParameterDisplayListener extends EventListener {
-    void currentProcedureParameterChanged(ProcedureParameterDisplayEvent e);
+
+    void procedureParameterSelected(ProcedureParameterDisplayEvent e);
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/QueryDisplayListener.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/QueryDisplayListener.java
index 18cc0fc9c..a112c9a23 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/QueryDisplayListener.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/display/QueryDisplayListener.java
@@ -22,9 +22,7 @@ package org.apache.cayenne.modeler.event.display;
 
 import java.util.EventListener;
 
-/**
- * @since 1.1
- */
 public interface QueryDisplayListener extends EventListener {
-    public void currentQueryChanged(QueryDisplayEvent e);
+
+    void querySelected(QueryDisplayEvent e);
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/DataDomainGraphTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/DataDomainGraphTab.java
index 7e003632e..3c2532eee 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/DataDomainGraphTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/DataDomainGraphTab.java
@@ -120,7 +120,7 @@ public class DataDomainGraphTab extends JPanel implements DomainDisplayListener,
         add(scrollPane);
     }
 
-    public void currentDomainChanged(DomainDisplayEvent e) {
+    public void domainSelected(DomainDisplayEvent e) {
         if (e instanceof EntityDisplayEvent) {
             // selecting an event
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/ShowGraphEntityAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/ShowGraphEntityAction.java
index 4f31c2516..fb4d36561 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/ShowGraphEntityAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/ShowGraphEntityAction.java
@@ -26,7 +26,7 @@ import org.apache.cayenne.map.Entity;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.CayenneModelerFrame;
 import org.apache.cayenne.modeler.ProjectController;
-import org.apache.cayenne.modeler.editor.EditorView;
+import org.apache.cayenne.modeler.editor.EditorPanel;
 import org.apache.cayenne.modeler.event.display.DomainDisplayEvent;
 import org.apache.cayenne.modeler.event.display.EntityDisplayEvent;
 import org.apache.cayenne.modeler.util.CayenneAction;
@@ -73,10 +73,10 @@ public class ShowGraphEntityAction extends CayenneAction {
 
     void showEntity(Entity<?,?,?> entity) {
         // we're always in same domain
-        EditorView editor = ((CayenneModelerFrame) Application
+        EditorPanel editor = ((CayenneModelerFrame) Application
                 .getInstance()
                 .getFrameController()
-                .getView()).getView();
+                .getView()).getEditorPanel();
 
         editor.getProjectTreeView().getSelectionModel().setSelectionPath(
                 editor
@@ -89,6 +89,6 @@ public class ShowGraphEntityAction extends CayenneAction {
                 entity,
                 entity.getDataMap(),
                 (DataChannelDescriptor) getProjectController().getProject().getRootNode());
-        getProjectController().fireDomainSelected(event);
+        getProjectController().displayDomain(event);
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/BaseRemovePropertyUndoableEdit.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/BaseRemovePropertyUndoableEdit.java
index 4a472d0a9..8ffc407ce 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/BaseRemovePropertyUndoableEdit.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/BaseRemovePropertyUndoableEdit.java
@@ -44,7 +44,7 @@ public abstract class BaseRemovePropertyUndoableEdit extends CayenneUndoableEdit
     }
 
     protected void focusEmbeddable() {
-        controller.fireEmbeddableSelected(new EmbeddableDisplayEvent(
+        controller.displayEmbeddable(new EmbeddableDisplayEvent(
                 this,
                 embeddable,
                 embeddable.getDataMap(),
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/ChangePKGeneratorUndoableEdit.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/ChangePKGeneratorUndoableEdit.java
index fe9c57c66..90c68178c 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/ChangePKGeneratorUndoableEdit.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/ChangePKGeneratorUndoableEdit.java
@@ -75,7 +75,7 @@ public class ChangePKGeneratorUndoableEdit extends CayenneUndoableEdit {
 
     private void fireEvents() {
         controller.fireDbEntityEvent(new EntityEvent(this, dbEntity));
-        controller.fireDbEntitySelected(new EntityDisplayEvent(this, dbEntity));
+        controller.displayDbEntity(new EntityDisplayEvent(this, dbEntity));
     }
 
     public boolean hasRealChange() {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/CreateAttributeUndoableEdit.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/CreateAttributeUndoableEdit.java
index 69b267011..ef1986b58 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/CreateAttributeUndoableEdit.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/CreateAttributeUndoableEdit.java
@@ -76,7 +76,7 @@ public class CreateAttributeUndoableEdit extends CayenneUndoableEdit {
                 objAttr
             });
 
-            controller.fireObjEntitySelected(new EntityDisplayEvent(
+            controller.displayObjEntity(new EntityDisplayEvent(
                     this,
                     objEntity,
                     dataMap,
@@ -88,7 +88,7 @@ public class CreateAttributeUndoableEdit extends CayenneUndoableEdit {
                 dbAttr
             });
 
-            controller.fireDbEntitySelected(new EntityDisplayEvent(
+            controller.displayDbEntity(new EntityDisplayEvent(
                     this,
                     dbEntity,
                     dataMap,
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/CreateDataMapUndoableEdit.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/CreateDataMapUndoableEdit.java
index 16cb3d12e..0d89bb42b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/CreateDataMapUndoableEdit.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/CreateDataMapUndoableEdit.java
@@ -51,7 +51,7 @@ public class CreateDataMapUndoableEdit extends CayenneUndoableEdit {
     public void undo() throws CannotUndoException {
         RemoveAction action = actionManager.getAction(RemoveAction.class);
 
-        controller.fireDomainSelected(new DomainDisplayEvent(this, domain));
+        controller.displayDomain(new DomainDisplayEvent(this, domain));
 
         action.removeDataMap(map);
     }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/CreateProcedureParameterUndoableEdit.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/CreateProcedureParameterUndoableEdit.java
index 3d5beaea9..c8fb3eca6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/CreateProcedureParameterUndoableEdit.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/CreateProcedureParameterUndoableEdit.java
@@ -55,7 +55,7 @@ public class CreateProcedureParameterUndoableEdit extends CayenneUndoableEdit {
                     parameter
             });
 
-            controller.fireProcedureSelected(new ProcedureDisplayEvent(this, procedure, dataMap, domain));
+            controller.displayProcedure(new ProcedureDisplayEvent(this, procedure, dataMap, domain));
         }
     }
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/CreateRelationshipUndoableEdit.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/CreateRelationshipUndoableEdit.java
index 188a549db..909e4b09f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/CreateRelationshipUndoableEdit.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/CreateRelationshipUndoableEdit.java
@@ -78,7 +78,7 @@ public class CreateRelationshipUndoableEdit extends CayenneUndoableEdit {
 
         if (objEnt != null) {
             action.removeObjRelationships(objEnt, objectRel);
-            controller.fireObjEntitySelected(new EntityDisplayEvent(
+            controller.displayObjEntity(new EntityDisplayEvent(
                     this,
                     objEnt,
                     objEnt.getDataMap(),
@@ -87,7 +87,7 @@ public class CreateRelationshipUndoableEdit extends CayenneUndoableEdit {
 
         if (dbEnt != null) {
             action.removeDbRelationships(dbEnt, dbRel);
-            controller.fireDbEntitySelected(new EntityDisplayEvent(this, dbEnt, dbEnt
+            controller.displayDbEntity(new EntityDisplayEvent(this, dbEnt, dbEnt
                     .getDataMap(), (DataChannelDescriptor) controller
                     .getProject()
                     .getRootNode()));
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/JUndoableCheckBoxEdit.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/JUndoableCheckBoxEdit.java
index 7b70b0186..f5a5ad098 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/JUndoableCheckBoxEdit.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/JUndoableCheckBoxEdit.java
@@ -24,7 +24,7 @@ import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.CayenneModelerFrame;
-import org.apache.cayenne.modeler.editor.EditorView;
+import org.apache.cayenne.modeler.editor.EditorPanel;
 import org.apache.cayenne.query.SQLTemplate;
 
 import javax.swing.*;
@@ -42,7 +42,7 @@ public class JUndoableCheckBoxEdit extends AbstractUndoableEdit {
     private JTabbedPane tabbedPane;
     private TreePath treePath;
     private Object targetObject;
-    private EditorView editorView;
+    private EditorPanel editorPanel;
 
     private int selectedTabIndex;
 
@@ -55,9 +55,9 @@ public class JUndoableCheckBoxEdit extends AbstractUndoableEdit {
         this.actionListener = actionListener;
         this.isSelected = checkBox.isSelected();
 
-        editorView = ((CayenneModelerFrame) Application.getInstance().getFrameController().getView()).getView();
+        editorPanel = ((CayenneModelerFrame) Application.getInstance().getFrameController().getView()).getEditorPanel();
 
-        treePath = editorView.getProjectTreeView().getSelectionPath();
+        treePath = editorPanel.getProjectTreeView().getSelectionPath();
 
         if (treePath != null) {
             DefaultMutableTreeNode newPath = (DefaultMutableTreeNode) treePath.getLastPathComponent();
@@ -65,19 +65,19 @@ public class JUndoableCheckBoxEdit extends AbstractUndoableEdit {
         }
 
         if (targetObject instanceof DataChannelDescriptor) {
-            tabbedPane = editorView.getDataDomainView();
+            tabbedPane = editorPanel.getDataDomainView();
         }
 
         if (targetObject instanceof DataMap) {
-            tabbedPane = editorView.getDataMapView();
+            tabbedPane = editorPanel.getDataMapView();
         }
 
         if (targetObject instanceof ObjEntity) {
-            tabbedPane = editorView.getObjDetailView();
+            tabbedPane = editorPanel.getObjDetailView();
         }
 
         if (targetObject instanceof SQLTemplate) {
-            tabbedPane = editorView.getSqlTemplateView();
+            tabbedPane = editorPanel.getSqlTemplateView();
         }
 
         if (tabbedPane != null) {
@@ -87,7 +87,7 @@ public class JUndoableCheckBoxEdit extends AbstractUndoableEdit {
 
     private void restoreSelections() {
 
-        editorView.getProjectTreeView().getSelectionModel().setSelectionPath(treePath);
+        editorPanel.getProjectTreeView().getSelectionModel().setSelectionPath(treePath);
 
         if (tabbedPane != null) {
             tabbedPane.setSelectedIndex(selectedTabIndex);
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/TextCompoundEdit.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/TextCompoundEdit.java
index eec63990e..ac8bac4da 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/TextCompoundEdit.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/TextCompoundEdit.java
@@ -37,7 +37,7 @@ import org.apache.cayenne.map.Embeddable;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.CayenneModelerFrame;
-import org.apache.cayenne.modeler.editor.EditorView;
+import org.apache.cayenne.modeler.editor.EditorPanel;
 import org.apache.cayenne.modeler.editor.SQLTemplateTabbedView;
 import org.apache.cayenne.modeler.util.TextAdapter;
 import org.apache.cayenne.query.EJBQLQuery;
@@ -71,10 +71,10 @@ public class TextCompoundEdit extends CompoundEdit implements DocumentListener {
         this.editor = editor;
         this.listener = listener;
 
-        EditorView editorView = ((CayenneModelerFrame) Application.getInstance().getFrameController().getView())
-                .getView();
+        EditorPanel editorPanel = ((CayenneModelerFrame) Application.getInstance().getFrameController().getView())
+                .getEditorPanel();
 
-        treePath = editorView.getProjectTreeView().getSelectionPath();
+        treePath = editorPanel.getProjectTreeView().getSelectionPath();
 
         if(treePath != null) {
             DefaultMutableTreeNode newPath = (DefaultMutableTreeNode) treePath.getLastPathComponent();
@@ -82,19 +82,19 @@ public class TextCompoundEdit extends CompoundEdit implements DocumentListener {
         }
 
         if (targetObject instanceof ObjEntity) {
-            tabbedPane = editorView.getObjDetailView();
+            tabbedPane = editorPanel.getObjDetailView();
         }
 
         if (targetObject instanceof DbEntity) {
-            tabbedPane = editorView.getDbDetailView();
+            tabbedPane = editorPanel.getDbDetailView();
         }
 
         if (targetObject instanceof Embeddable) {
-            tabbedPane = editorView.getEmbeddableView();
+            tabbedPane = editorPanel.getEmbeddableView();
         }
 
         if (targetObject instanceof SQLTemplate) {
-            tabbedPane = editorView.getSqlTemplateView();
+            tabbedPane = editorPanel.getSqlTemplateView();
 
             if (tabbedPane != null) {
                 selectedItem = ((SQLTemplateTabbedView) tabbedPane).getScriptsTab().getSelectedIndex();
@@ -102,19 +102,19 @@ public class TextCompoundEdit extends CompoundEdit implements DocumentListener {
         }
 
         if (targetObject instanceof EJBQLQuery) {
-            tabbedPane = editorView.getEjbqlQueryView();
+            tabbedPane = editorPanel.getEjbqlQueryView();
         }
 
         if (targetObject instanceof DataNodeDescriptor) {
-            tabbedPane = editorView.getDataNodeView();
+            tabbedPane = editorPanel.getDataNodeView();
         }
 
         if (targetObject instanceof DataMap) {
-            tabbedPane = editorView.getDataMapView();
+            tabbedPane = editorPanel.getDataMapView();
         }
 
         if (targetObject instanceof DataChannelDescriptor) {
-            tabbedPane = editorView.getDataDomainView();
+            tabbedPane = editorPanel.getDataDomainView();
         }
 
         if (tabbedPane != null) {
@@ -124,10 +124,10 @@ public class TextCompoundEdit extends CompoundEdit implements DocumentListener {
 
     private void restoreSelections() {
 
-        EditorView editorView = ((CayenneModelerFrame) Application.getInstance().getFrameController().getView())
-                .getView();
+        EditorPanel editorPanel = ((CayenneModelerFrame) Application.getInstance().getFrameController().getView())
+                .getEditorPanel();
 
-        editorView.getProjectTreeView().getSelectionModel().setSelectionPath(treePath);
+        editorPanel.getProjectTreeView().getSelectionModel().setSelectionPath(treePath);
 
         if (tabbedPane != null) {
             tabbedPane.setSelectedIndex(selectedTabIndex);
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneAction.java
index 5fb6d1c76..a8aa0f809 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneAction.java
@@ -28,7 +28,7 @@ import org.apache.cayenne.modeler.CayenneModelerFrame;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.ProjectTreeModel;
 import org.apache.cayenne.modeler.dialog.ErrorDebugDialog;
-import org.apache.cayenne.modeler.editor.EditorView;
+import org.apache.cayenne.modeler.editor.EditorPanel;
 import org.apache.cayenne.project.Project;
 import org.apache.cayenne.swing.components.image.FilteredIconFactory;
 import org.apache.cayenne.util.Util;
@@ -258,11 +258,11 @@ public abstract class CayenneAction extends AbstractAction {
         }
     }
     
-    protected static EditorView editor() {
+    protected static EditorPanel editor() {
         return ((CayenneModelerFrame) Application
                 .getInstance()
                 .getFrameController()
-                .getView()).getView();
+                .getView()).getEditorPanel();
     }
     
     /**
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/AttributeDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/AttributeDisplayEventType.java
index 43754e596..687da769f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/AttributeDisplayEventType.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/AttributeDisplayEventType.java
@@ -63,11 +63,11 @@ class AttributeDisplayEventType extends EntityDisplayEventType {
         AttributeDisplayEvent attributeDisplayEvent = new AttributeDisplayEvent(this, attributes, entity, dataMap, dataChannel);
 
         if (entity instanceof ObjEntity) {
-            controller.fireObjEntitySelected(entityDisplayEvent);
-            controller.fireObjAttributeSelected(attributeDisplayEvent);
+            controller.displayObjEntity(entityDisplayEvent);
+            controller.displayObjAttribute(attributeDisplayEvent);
         } else if (entity instanceof DbEntity) {
-            controller.fireDbEntitySelected(entityDisplayEvent);
-            controller.fireDbAttributeSelected(attributeDisplayEvent);
+            controller.displayDbEntity(entityDisplayEvent);
+            controller.displayDbAttribute(attributeDisplayEvent);
         }
     }
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DataMapDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DataMapDisplayEventType.java
index 8baf6cf6c..82f60ba9d 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DataMapDisplayEventType.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DataMapDisplayEventType.java
@@ -45,14 +45,24 @@ class DataMapDisplayEventType extends DisplayEventType {
         }
 
         DataMapDisplayEvent dataMapDisplayEvent = new DataMapDisplayEvent(this, dataMap, dataChannel, dataNode);
-        controller.fireDataMapSelected(dataMapDisplayEvent);
+        controller.displayDataMap(dataMapDisplayEvent);
     }
 
     @Override
     public void saveLastDisplayEvent() {
         preferences.setEvent(DataMapDisplayEvent.class.getSimpleName());
-        preferences.setDomain(controller.getSelectedDataDomain().getName());
-        preferences.setNode(controller.getSelectedDataNode() != null ? controller.getSelectedDataNode().getName() : "");
-        preferences.setDataMap(controller.getSelectedDataMap().getName());
+
+        DataChannelDescriptor domain = controller.getSelectedDataDomain();
+        DataNodeDescriptor node = controller.getSelectedDataNode();
+        DataMap dataMap = controller.getSelectedDataMap();
+
+        if (domain != null) {
+            preferences.setDomain(domain.getName());
+            preferences.setNode(node != null ? node.getName() : "");
+
+            if (dataMap != null) {
+                preferences.setDataMap(dataMap.getName());
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DataNodeDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DataNodeDisplayEventType.java
index 127df4408..1b352f044 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DataNodeDisplayEventType.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DataNodeDisplayEventType.java
@@ -43,7 +43,7 @@ class DataNodeDisplayEventType extends DisplayEventType {
         }
 
         DataNodeDisplayEvent dataNodeDisplayEvent = new DataNodeDisplayEvent(this, dataChannel, dataNode);
-        controller.fireDataNodeSelected(dataNodeDisplayEvent);
+        controller.displayDataNode(dataNodeDisplayEvent);
     }
 
     @Override
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DisplayEventTypes.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DisplayEventTypes.java
index 26e4e17b7..74cfec88a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DisplayEventTypes.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DisplayEventTypes.java
@@ -37,7 +37,7 @@ public enum DisplayEventTypes {
 
     DomainDisplayEvent {
         @Override
-        DisplayEventType createDisplayEventType(ProjectController controller) {
+        public DisplayEventType createDisplayEventType(ProjectController controller) {
             return new DomainDisplayEventType(controller);
         }
 
@@ -49,7 +49,7 @@ public enum DisplayEventTypes {
 
     DataNodeDisplayEvent {
         @Override
-        DisplayEventType createDisplayEventType(ProjectController controller) {
+        public DisplayEventType createDisplayEventType(ProjectController controller) {
             return new DataNodeDisplayEventType(controller);
         }
 
@@ -61,7 +61,7 @@ public enum DisplayEventTypes {
 
     DataMapDisplayEvent {
         @Override
-        DisplayEventType createDisplayEventType(ProjectController controller) {
+        public DisplayEventType createDisplayEventType(ProjectController controller) {
             return new DataMapDisplayEventType(controller);
         }
 
@@ -73,7 +73,7 @@ public enum DisplayEventTypes {
 
     EntityDisplayEvent {
         @Override
-        DisplayEventType createDisplayEventType(ProjectController controller) {
+        public DisplayEventType createDisplayEventType(ProjectController controller) {
             if (controller.getSelectedObjAttributes().length != 0 || controller.getSelectedDbAttributes().length != 0) {
                 return new AttributeDisplayEventType(controller);
             } else if (controller.getSelectedObjRelationships().length != 0 || controller.getSelectedDbRelationships().length != 0) {
@@ -91,7 +91,7 @@ public enum DisplayEventTypes {
 
     AttributeDisplayEvent {
         @Override
-        DisplayEventType createDisplayEventType(ProjectController controller) {
+        public DisplayEventType createDisplayEventType(ProjectController controller) {
             return new AttributeDisplayEventType(controller);
         }
 
@@ -103,7 +103,7 @@ public enum DisplayEventTypes {
 
     RelationshipDisplayEvent {
         @Override
-        DisplayEventType createDisplayEventType(ProjectController controller) {
+        public DisplayEventType createDisplayEventType(ProjectController controller) {
             return new RelationshipDisplayEventType(controller);
         }
 
@@ -115,7 +115,7 @@ public enum DisplayEventTypes {
 
     EmbeddableDisplayEvent {
         @Override
-        DisplayEventType createDisplayEventType(ProjectController controller) {
+        public DisplayEventType createDisplayEventType(ProjectController controller) {
             if (controller.getSelectedEmbeddableAttributes().length != 0) {
                 return new EmbeddableAttributeDisplayEventType(controller);
             } else {
@@ -131,7 +131,7 @@ public enum DisplayEventTypes {
 
     EmbeddableAttributeDisplayEvent {
         @Override
-        DisplayEventType createDisplayEventType(ProjectController controller) {
+        public DisplayEventType createDisplayEventType(ProjectController controller) {
             return new EmbeddableAttributeDisplayEventType(controller);
         }
 
@@ -143,7 +143,7 @@ public enum DisplayEventTypes {
 
     ProcedureDisplayEvent {
         @Override
-        DisplayEventType createDisplayEventType(ProjectController controller) {
+        public DisplayEventType createDisplayEventType(ProjectController controller) {
             if (controller.getSelectedProcedureParameters().length != 0) {
                 return new ProcedureParameterDisplayEventType(controller);
             } else {
@@ -159,7 +159,7 @@ public enum DisplayEventTypes {
 
     ProcedureParameterDisplayEvent {
         @Override
-        DisplayEventType createDisplayEventType(ProjectController controller) {
+        public DisplayEventType createDisplayEventType(ProjectController controller) {
             return new ProcedureParameterDisplayEventType(controller);
         }
 
@@ -171,7 +171,7 @@ public enum DisplayEventTypes {
 
     QueryDisplayEvent {
         @Override
-        DisplayEventType createDisplayEventType(ProjectController controller) {
+        public DisplayEventType createDisplayEventType(ProjectController controller) {
             return new QueryDisplayEventType(controller);
         }
 
@@ -183,7 +183,7 @@ public enum DisplayEventTypes {
 
     MultipleObjectsDisplayEvent {
         @Override
-        DisplayEventType createDisplayEventType(ProjectController controller) {
+        public DisplayEventType createDisplayEventType(ProjectController controller) {
             return new MultipleObjectsDisplayEventType(controller);
         }
 
@@ -193,6 +193,6 @@ public enum DisplayEventTypes {
         }
     };
 
-    abstract DisplayEventType createDisplayEventType(ProjectController controller);
+    public abstract DisplayEventType createDisplayEventType(ProjectController controller);
 
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DomainDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DomainDisplayEventType.java
index dfcc8a7b1..7373e0a2f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DomainDisplayEventType.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DomainDisplayEventType.java
@@ -37,7 +37,7 @@ class DomainDisplayEventType extends DisplayEventType {
         }
 
         DomainDisplayEvent domainDisplayEvent = new DomainDisplayEvent(this, dataChannel);
-        controller.fireDomainSelected(domainDisplayEvent);
+        controller.displayDomain(domainDisplayEvent);
     }
 
     @Override
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EmbeddableAttributeDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EmbeddableAttributeDisplayEventType.java
index dbccb2258..a8166e030 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EmbeddableAttributeDisplayEventType.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EmbeddableAttributeDisplayEventType.java
@@ -54,11 +54,11 @@ class EmbeddableAttributeDisplayEventType extends EmbeddableDisplayEventType {
         }
 
         EmbeddableDisplayEvent embeddableDisplayEvent = new EmbeddableDisplayEvent(this, embeddable, dataMap, dataChannel);
-        controller.fireEmbeddableSelected(embeddableDisplayEvent);
+        controller.displayEmbeddable(embeddableDisplayEvent);
 
         EmbeddableAttribute[] embeddableAttributes = getLastEmbeddableAttributes(embeddable);
         EmbeddableAttributeDisplayEvent attributeDisplayEvent = new EmbeddableAttributeDisplayEvent(this, embeddable, embeddableAttributes, dataMap, dataChannel);
-        controller.fireEmbeddableAttributeSelected(attributeDisplayEvent);
+        controller.displayEmbeddableAttribute(attributeDisplayEvent);
     }
 
     @Override
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EmbeddableDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EmbeddableDisplayEventType.java
index 092e1d43c..374faadc0 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EmbeddableDisplayEventType.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EmbeddableDisplayEventType.java
@@ -49,7 +49,7 @@ class EmbeddableDisplayEventType extends DisplayEventType {
         }
 
         EmbeddableDisplayEvent embeddableDisplayEvent = new EmbeddableDisplayEvent(this, embeddable, dataMap, dataChannel);
-        controller.fireEmbeddableSelected(embeddableDisplayEvent);
+        controller.displayEmbeddable(embeddableDisplayEvent);
     }
 
     @Override
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EntityDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EntityDisplayEventType.java
index 74254ca8e..4c6b910d6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EntityDisplayEventType.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EntityDisplayEventType.java
@@ -47,36 +47,50 @@ class EntityDisplayEventType extends DisplayEventType {
             return;
         }
 
-        Entity<?,?,?> entity = getLastEntity(dataMap);
+        Entity<?, ?, ?> entity = getLastEntity(dataMap);
         if (entity == null) {
             return;
         }
 
         EntityDisplayEvent entityDisplayEvent = new EntityDisplayEvent(this, entity, dataMap, dataNode, dataChannel);
         if (entity instanceof ObjEntity) {
-            controller.fireObjEntitySelected(entityDisplayEvent);
+            controller.displayObjEntity(entityDisplayEvent);
         } else if (entity instanceof DbEntity) {
-            controller.fireDbEntitySelected(entityDisplayEvent);
+            controller.displayDbEntity(entityDisplayEvent);
         }
     }
 
     @Override
     public void saveLastDisplayEvent() {
+
         preferences.setEvent(EntityDisplayEvent.class.getSimpleName());
-        preferences.setDomain(controller.getSelectedDataDomain().getName());
-        preferences.setNode(controller.getSelectedDataNode() != null ? controller.getSelectedDataNode().getName() : "");
-        preferences.setDataMap(controller.getSelectedDataMap().getName());
-
-        if (controller.getSelectedObjEntity() != null) {
-            preferences.setObjEntity(controller.getSelectedObjEntity().getName());
-            preferences.setDbEntity(null);
-        } else if (controller.getSelectedDbEntity() != null) {
-            preferences.setDbEntity(controller.getSelectedDbEntity().getName());
-            preferences.setObjEntity(null);
+
+        DataChannelDescriptor domain = controller.getSelectedDataDomain();
+        DataNodeDescriptor node = controller.getSelectedDataNode();
+        DataMap dataMap = controller.getSelectedDataMap();
+        DbEntity dbEntity = controller.getSelectedDbEntity();
+        ObjEntity objEntity = controller.getSelectedObjEntity();
+
+        if (domain != null) {
+            preferences.setDomain(domain.getName());
+            preferences.setNode(node != null ? node.getName() : "");
+
+            if (dataMap != null) {
+
+                preferences.setDataMap(dataMap.getName());
+
+                if (objEntity != null) {
+                    preferences.setObjEntity(objEntity.getName());
+                    preferences.setDbEntity(null);
+                } else if (dbEntity != null) {
+                    preferences.setDbEntity(dbEntity.getName());
+                    preferences.setObjEntity(null);
+                }
+            }
         }
     }
 
-    Entity<?,?,?> getLastEntity(DataMap dataMap) {
+    Entity<?, ?, ?> getLastEntity(DataMap dataMap) {
         return !preferences.getObjEntity().isEmpty()
                 ? dataMap.getObjEntity(preferences.getObjEntity())
                 : dataMap.getDbEntity(preferences.getDbEntity());
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/MultipleObjectsDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/MultipleObjectsDisplayEventType.java
index 993efa8cd..364632bba 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/MultipleObjectsDisplayEventType.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/MultipleObjectsDisplayEventType.java
@@ -29,7 +29,7 @@ import org.apache.cayenne.modeler.event.display.MultipleObjectsDisplayEvent;
 import java.util.ArrayList;
 import java.util.List;
 
-class MultipleObjectsDisplayEventType extends DisplayEventType {
+public class MultipleObjectsDisplayEventType extends DisplayEventType {
 
     public MultipleObjectsDisplayEventType(ProjectController controller) {
         super(controller);
@@ -57,7 +57,7 @@ class MultipleObjectsDisplayEventType extends DisplayEventType {
         }
 
         MultipleObjectsDisplayEvent multipleDisplayEvent = new MultipleObjectsDisplayEvent(this, multipleObjects, parentObject);
-        controller.fireMultipleObjectsSelected(multipleDisplayEvent);
+        controller.displayMultipleObjects(multipleDisplayEvent);
     }
 
     @Override
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProcedureDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProcedureDisplayEventType.java
index 96c3ed91f..16831fc14 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProcedureDisplayEventType.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProcedureDisplayEventType.java
@@ -49,7 +49,7 @@ class ProcedureDisplayEventType extends DisplayEventType {
         }
 
         ProcedureDisplayEvent procedureDisplayEvent = new ProcedureDisplayEvent(this, procedure, dataMap, dataChannel);
-        controller.fireProcedureSelected(procedureDisplayEvent);
+        controller.displayProcedure(procedureDisplayEvent);
     }
 
     @Override
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProcedureParameterDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProcedureParameterDisplayEventType.java
index 37ed127af..242d903c7 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProcedureParameterDisplayEventType.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProcedureParameterDisplayEventType.java
@@ -54,12 +54,12 @@ class ProcedureParameterDisplayEventType extends ProcedureDisplayEventType {
         }
 
         ProcedureDisplayEvent procedureDisplayEvent = new ProcedureDisplayEvent(this, procedure, dataMap, dataChannel);
-        controller.fireProcedureSelected(procedureDisplayEvent);
+        controller.displayProcedure(procedureDisplayEvent);
 
         ProcedureParameter[] procedureParameters = getLastProcedureParameters(procedure);
         ProcedureParameterDisplayEvent procedureParameterDisplayEvent =
                 new ProcedureParameterDisplayEvent(this, procedureParameters, procedure, dataMap, dataChannel);
-        controller.fireProcedureParameterSelected(procedureParameterDisplayEvent);
+        controller.displayProcedureParameter(procedureParameterDisplayEvent);
     }
 
     @Override
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProjectStateUtil.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProjectStateUtil.java
deleted file mode 100644
index 7f2bc814a..000000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProjectStateUtil.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.util.state;
-
-import org.apache.cayenne.configuration.ConfigurationNode;
-import org.apache.cayenne.modeler.ProjectController;
-import org.apache.cayenne.modeler.pref.ProjectStatePreferences;
-
-import java.util.EventObject;
-import java.util.prefs.BackingStoreException;
-
-public final class ProjectStateUtil {
-
-    public ProjectStateUtil() {
-    }
-
-    public void saveLastState(ProjectController controller) {
-        EventObject displayEvent = controller.getLastDisplayEvent();
-        ConfigurationNode[] multiplyObjects = controller.getSelectedPaths();
-
-        if (displayEvent == null && multiplyObjects == null) {
-            return;
-        }
-
-        ProjectStatePreferences preferences = controller.getProjectStatePreferences();
-        if (preferences.getCurrentPreference() == null) {
-            return;
-        }
-
-        try {
-            preferences.getCurrentPreference().clear();
-        } catch (BackingStoreException e) {
-            // ignore exception
-        }
-
-        if (displayEvent != null) {
-            DisplayEventTypes.valueOf(displayEvent.getClass().getSimpleName())
-                    .createDisplayEventType(controller)
-                    .saveLastDisplayEvent();
-        } else if (multiplyObjects.length != 0) {
-            new MultipleObjectsDisplayEventType(controller).saveLastDisplayEvent();
-        }
-    }
-
-    public void fireLastState(ProjectController controller) {
-        ProjectStatePreferences preferences = controller.getProjectStatePreferences();
-
-        String displayEventName = preferences.getEvent();
-        if (!displayEventName.isEmpty()) {
-            DisplayEventTypes.valueOf(displayEventName)
-                    .createDisplayEventType(controller)
-                    .fireLastDisplayEvent();
-        }
-    }
-
-}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/QueryDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/QueryDisplayEventType.java
index 4bfa54b08..8a1761f39 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/QueryDisplayEventType.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/QueryDisplayEventType.java
@@ -49,7 +49,7 @@ class QueryDisplayEventType extends DisplayEventType {
         }
 
         QueryDisplayEvent queryDisplayEvent = new QueryDisplayEvent(this, query, dataMap, dataChannel);
-        controller.fireQuerySelected(queryDisplayEvent);
+        controller.displayQuery(queryDisplayEvent);
     }
 
     @Override
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/RelationshipDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/RelationshipDisplayEventType.java
index a41e153df..d9eb552b4 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/RelationshipDisplayEventType.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/RelationshipDisplayEventType.java
@@ -63,11 +63,11 @@ class RelationshipDisplayEventType extends EntityDisplayEventType {
         RelationshipDisplayEvent displayEvent = new RelationshipDisplayEvent(this, relationships, entity, dataMap, dataChannel);
 
         if (entity instanceof ObjEntity) {
-            controller.fireObjEntitySelected(entityDisplayEvent);
-            controller.fireObjRelationshipSelected(displayEvent);
+            controller.displayObjEntity(entityDisplayEvent);
+            controller.displayObjRelationship(displayEvent);
         } else if (entity instanceof DbEntity) {
-            controller.fireDbEntitySelected(entityDisplayEvent);
-            controller.fireDbRelationshipSelected(displayEvent);
+            controller.displayDbEntity(entityDisplayEvent);
+            controller.displayDbRelationship(displayEvent);
         }
     }