Changes needed due to updating to the Cayenne 4.0 Beta.
diff --git a/pom.xml b/pom.xml
index 58fe70f..6a547d5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
 	<name>Cayenne Modeler Prototype</name>
 
 	<properties>
-		<cayenne.version>4.0.M5</cayenne.version>
+		<cayenne.version>4.0.B1</cayenne.version>
 		<fontawesomefx.version>8.9</fontawesomefx.version>
 		<java.version>1.8</java.version>
 		<jfxtras.version>8.0-r4</jfxtras.version>
@@ -54,11 +54,31 @@
 			<artifactId>log4j</artifactId>
 			<version>1.2.17</version>
 		</dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <version>1.7.25</version>
+        </dependency>
 		<dependency>
 			<groupId>org.apache.cayenne</groupId>
 			<artifactId>cayenne-server</artifactId>
 			<version>${cayenne.version}</version>
 		</dependency>
+        <dependency>
+            <groupId>org.apache.cayenne</groupId>
+            <artifactId>cayenne-jgroups</artifactId>
+            <version>${cayenne.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cayenne</groupId>
+            <artifactId>cayenne-jms</artifactId>
+            <version>${cayenne.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cayenne</groupId>
+            <artifactId>cayenne-xmpp</artifactId>
+            <version>${cayenne.version}</version>
+        </dependency>
 		<dependency>
 			<groupId>org.apache.cayenne</groupId>
 			<artifactId>cayenne-project</artifactId>
diff --git a/src/main/java/org/apache/cayenne/modeler/CayenneModeler.java b/src/main/java/org/apache/cayenne/modeler/CayenneModeler.java
index 3422527..ca4ac5d 100644
--- a/src/main/java/org/apache/cayenne/modeler/CayenneModeler.java
+++ b/src/main/java/org/apache/cayenne/modeler/CayenneModeler.java
@@ -30,17 +30,16 @@
 import org.apache.cayenne.modeler.layout.PreferencesLayout;
 import org.apache.cayenne.modeler.layout.SplashLayout;
 import org.apache.cayenne.modeler.project.CayenneProject;
-import org.apache.cayenne.project.CayenneProjectModule;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.apache.cayenne.project.ProjectModule;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javafx.application.Application;
 import javafx.stage.Stage;
 
 public class CayenneModeler extends Application
 {
-    private static final Log LOGGER = LogFactory.getLog(CayenneModeler.class);
-//    private static final Logger LOGGER = LogManager.getLogger(CayenneModeler.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(CayenneModeler.class);
 
 //    private Stage      primaryStage;
     private SplashLayout splashLayout;
@@ -177,7 +176,8 @@
     protected static Collection<Module> appendModules(final Collection<Module> modules)
     {
         modules.add(new ServerModule("CayenneModeler"));
-        modules.add(new CayenneProjectModule());
+//        modules.add(ServerRuntime.builder().addConfig("CayenneModeler").build());
+        modules.add(new ProjectModule());
 //        modules.add(new CayenneModelerModule());
 
         return modules;
diff --git a/src/main/java/org/apache/cayenne/modeler/CayenneProjectManager.java b/src/main/java/org/apache/cayenne/modeler/CayenneProjectManager.java
index f2c88db..271a095 100644
--- a/src/main/java/org/apache/cayenne/modeler/CayenneProjectManager.java
+++ b/src/main/java/org/apache/cayenne/modeler/CayenneProjectManager.java
@@ -24,14 +24,14 @@
 import java.util.List;
 
 import org.apache.cayenne.modeler.project.CayenneProject;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class CayenneProjectManager
 {
-    private static final Log LOGGER = LogFactory.getLog(CayenneProjectManager.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(CayenneProjectManager.class);
 
-    private static List<CayenneProject> projects = new ArrayList<CayenneProject>();
+    private static List<CayenneProject> projects = new ArrayList<>();
 
     public static CayenneProject projectForPath(final String path)
     {
diff --git a/src/main/java/org/apache/cayenne/modeler/adapters/CayennePropertyAdapter.java b/src/main/java/org/apache/cayenne/modeler/adapters/CayennePropertyAdapter.java
index 13a5ba0..db20e55 100644
--- a/src/main/java/org/apache/cayenne/modeler/adapters/CayennePropertyAdapter.java
+++ b/src/main/java/org/apache/cayenne/modeler/adapters/CayennePropertyAdapter.java
@@ -20,8 +20,8 @@
 package org.apache.cayenne.modeler.adapters;
 
 import org.apache.cayenne.modeler.project.CayenneProject;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javafx.beans.property.BooleanProperty;
 import javafx.beans.property.IntegerProperty;
@@ -39,7 +39,7 @@
  */
 public abstract class CayennePropertyAdapter
 {
-    private static final Log LOGGER = LogFactory.getLog(CayennePropertyAdapter.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(CayennePropertyAdapter.class);
 
     /**
      * Binds a Java/Bean String property to a JavaFX property. Note: The JavaFX
diff --git a/src/main/java/org/apache/cayenne/modeler/adapters/DataDomainAdapter.java b/src/main/java/org/apache/cayenne/modeler/adapters/DataDomainAdapter.java
index a45b6f8..c1cf666 100644
--- a/src/main/java/org/apache/cayenne/modeler/adapters/DataDomainAdapter.java
+++ b/src/main/java/org/apache/cayenne/modeler/adapters/DataDomainAdapter.java
@@ -23,8 +23,8 @@
 import java.util.List;
 
 import org.apache.cayenne.modeler.project.CayenneProject;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javafx.beans.property.BooleanProperty;
 import javafx.beans.property.IntegerProperty;
@@ -32,7 +32,7 @@
 
 public class DataDomainAdapter extends CayennePropertyAdapter // implements AdapterSupport<CayenneProject>
 {
-    private static final Log LOGGER = LogFactory.getLog(DataDomainAdapter.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(DataDomainAdapter.class);
 
     private static final String DATA_DOMAIN_NAME              = "dataDomainName";
     private static final String VALIDATING_OBJECTS            = "dataDomainValidatingObjects";
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/AbstractViewLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/AbstractViewLayout.java
index 28707fd..972fdd9 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/AbstractViewLayout.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/AbstractViewLayout.java
@@ -22,8 +22,8 @@
 import java.io.IOException;
 import java.util.Arrays;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javafx.scene.Node;
 import javafx.scene.layout.AnchorPane;
@@ -32,7 +32,7 @@
     extends AnchorPane
     implements LayoutSupport, MainWindowSupport
 {
-    private static final Log LOGGER = LogFactory.getLog(AbstractViewLayout.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(AbstractViewLayout.class);
 
     private final MainWindowSupport parentLayout;
 
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/AbstractWindowLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/AbstractWindowLayout.java
index 2d8d9bb..932d9df 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/AbstractWindowLayout.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/AbstractWindowLayout.java
@@ -21,8 +21,8 @@
 
 import java.io.IOException;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javafx.scene.Scene;
 import javafx.scene.layout.AnchorPane;
@@ -33,7 +33,7 @@
     extends AnchorPane
     implements LayoutSupport
 {
-    private static final Log LOGGER = LogFactory.getLog(AbstractWindowLayout.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(AbstractWindowLayout.class);
 
     private final Stage stage;
 
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/DataDomainLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/DataDomainLayout.java
index 3e1c6e6..bd71f42 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/DataDomainLayout.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/DataDomainLayout.java
@@ -30,8 +30,8 @@
 import org.apache.cayenne.modeler.notification.event.DataDomainChangeEvent;
 import org.apache.cayenne.modeler.notification.listener.DataDomainListener;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javafx.fxml.FXML;
 import javafx.scene.control.CheckBox;
@@ -47,7 +47,7 @@
     implements DataDomainListener,
                DetailEditorSupport<DataDomainAdapter>
 {
-    private static final Log LOGGER = LogFactory.getLog(DataDomainLayout.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(DataDomainLayout.class);
 
 //    private MainWindowLayout mainWindow;
 
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/DataMapLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/DataMapLayout.java
index cb8d9e6..757444a 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/DataMapLayout.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/DataMapLayout.java
@@ -24,8 +24,8 @@
 import java.util.List;
 
 import org.apache.cayenne.modeler.adapters.DataMapAdapter;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javafx.fxml.FXML;
 import javafx.scene.control.CheckBox;
@@ -35,7 +35,7 @@
     extends AbstractViewLayout
     implements DetailEditorSupport<DataMapAdapter>
 {
-    private static final Log LOGGER = LogFactory.getLog(DataMapLayout.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(DataMapLayout.class);
 
 //    private MainWindowLayout mainWindow;
 
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/DataNodeConfigurationTabLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/DataNodeConfigurationTabLayout.java
index d182f10..8a9732b 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/DataNodeConfigurationTabLayout.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/DataNodeConfigurationTabLayout.java
@@ -30,8 +30,8 @@
 import org.apache.cayenne.configuration.server.JNDIDataSourceFactory;
 import org.apache.cayenne.configuration.server.XMLPoolingDataSourceFactory;
 import org.apache.cayenne.modeler.adapters.DataNodeAdapter;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import de.jensd.fx.glyphs.GlyphsDude;
 import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
@@ -47,7 +47,7 @@
     extends AbstractViewLayout
     implements DetailEditorSupport<DataNodeAdapter>
 {
-    private static final Log LOGGER = LogFactory.getLog(DataNodeConfigurationTabLayout.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(DataNodeConfigurationTabLayout.class);
 
     @FXML
     private TextField nameTextField;
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/DataNodeDatabaseAdapterTabLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/DataNodeDatabaseAdapterTabLayout.java
index 56e5e33..4a0e610 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/DataNodeDatabaseAdapterTabLayout.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/DataNodeDatabaseAdapterTabLayout.java
@@ -22,15 +22,15 @@
 import java.io.IOException;
 
 import org.apache.cayenne.modeler.adapters.DataNodeAdapter;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class DataNodeDatabaseAdapterTabLayout
     extends AbstractViewLayout
     implements DetailEditorSupport<DataNodeAdapter>
 
 {
-    private static final Log LOGGER = LogFactory.getLog(DataNodeDatabaseAdapterTabLayout.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(DataNodeDatabaseAdapterTabLayout.class);
 
     private DataNodeAdapter dataNodeAdapter;
 
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/DataNodeLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/DataNodeLayout.java
index e7da80b..2fe87fb 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/DataNodeLayout.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/DataNodeLayout.java
@@ -22,8 +22,8 @@
 import java.io.IOException;
 
 import org.apache.cayenne.modeler.adapters.DataNodeAdapter;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javafx.fxml.FXML;
 import javafx.scene.control.Tab;
@@ -33,7 +33,7 @@
     extends AbstractViewLayout
     implements DetailEditorSupport<DataNodeAdapter>
 {
-    private static final Log LOGGER = LogFactory.getLog(DataNodeLayout.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(DataNodeLayout.class);
 
     @FXML
     private AnchorPane configurationTabAnchorPane, databaseAdapterTabAnchorPane, passwordEncoderTabAnchorPane;
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/DataNodePasswordEncoderTabLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/DataNodePasswordEncoderTabLayout.java
index 9979b00..6d8e1b3 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/DataNodePasswordEncoderTabLayout.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/DataNodePasswordEncoderTabLayout.java
@@ -22,8 +22,8 @@
 import java.io.IOException;
 
 import org.apache.cayenne.modeler.adapters.DataNodeAdapter;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javafx.fxml.FXML;
 import javafx.scene.control.ChoiceBox;
@@ -35,7 +35,7 @@
     extends AbstractViewLayout
     implements DetailEditorSupport<DataNodeAdapter>
 {
-    private static final Log LOGGER = LogFactory.getLog(DataNodePasswordEncoderTabLayout.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(DataNodePasswordEncoderTabLayout.class);
 
     @FXML
     private ComboBox<String> passwordEncoderComboBox;
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityColumnsTabLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityColumnsTabLayout.java
index 6fc8fce..b2545e0 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityColumnsTabLayout.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityColumnsTabLayout.java
@@ -25,8 +25,8 @@
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.modeler.adapters.DatabaseEntityAdapter;
 import org.apache.cayenne.modeler.utility.ObjectEntityUtilities;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import de.jensd.fx.glyphs.GlyphsDude;
 import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
@@ -40,7 +40,7 @@
     implements DetailEditorSupport<DatabaseEntityAdapter>
 
 {
-    private static final Log LOGGER = LogFactory.getLog(DatabaseEntityColumnsTabLayout.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseEntityColumnsTabLayout.class);
 
 //    @FXML
 //    private TableView<ObjAttribute> attributesTableView;
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityLayout.java
index bb991c6..835b8c1 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityLayout.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/DatabaseEntityLayout.java
@@ -22,8 +22,8 @@
 import java.io.IOException;
 
 import org.apache.cayenne.modeler.adapters.DatabaseEntityAdapter;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javafx.fxml.FXML;
 import javafx.scene.layout.AnchorPane;
@@ -32,7 +32,7 @@
     extends AbstractViewLayout
     implements DetailEditorSupport<DatabaseEntityAdapter>
 {
-    private static final Log LOGGER = LogFactory.getLog(DatabaseEntityLayout.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseEntityLayout.class);
 
     @FXML
     private AnchorPane tableTabAnchorPane, columnsTabAnchorPane;
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/DetailEditorSupport.java b/src/main/java/org/apache/cayenne/modeler/layout/DetailEditorSupport.java
index 6e876dc..b43cb0c 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/DetailEditorSupport.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/DetailEditorSupport.java
@@ -23,12 +23,12 @@
 import java.util.List;
 
 import org.apache.cayenne.modeler.adapters.CayennePropertyAdapter;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public interface DetailEditorSupport<T extends CayennePropertyAdapter>
 {
-    static final Log LOGGER = LogFactory.getLog(DetailEditorSupport.class);
+    static final Logger LOGGER = LoggerFactory.getLogger(DetailEditorSupport.class);
 
     default void showEditor(final T propertyAdapter)
     {
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/LayoutSupport.java b/src/main/java/org/apache/cayenne/modeler/layout/LayoutSupport.java
index 1d6ec48..da34bb7 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/LayoutSupport.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/LayoutSupport.java
@@ -21,8 +21,8 @@
 
 import java.io.IOException;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javafx.fxml.FXMLLoader;
 import javafx.scene.Node;
@@ -30,7 +30,7 @@
 
 public interface LayoutSupport
 {
-    static final Log LOGGER = LogFactory.getLog(LayoutSupport.class);
+    static final Logger LOGGER = LoggerFactory.getLogger(LayoutSupport.class);
 
     default FXMLLoader loadFXML(final String fxmlPath) throws IOException
     {
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/MainToolBarLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/MainToolBarLayout.java
index 5c3f746..410af35 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/MainToolBarLayout.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/MainToolBarLayout.java
@@ -21,8 +21,8 @@
 
 import java.io.IOException;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import de.jensd.fx.glyphs.GlyphsDude;
 import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
@@ -33,7 +33,7 @@
 public class MainToolBarLayout
     extends AbstractViewLayout
 {
-    private static final Log LOGGER = LogFactory.getLog(MainToolBarLayout.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(MainToolBarLayout.class);
 
     @FXML
     private Button newButton, openButton, saveButton;
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/MainWindowLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/MainWindowLayout.java
index c32fc9c..0eade88 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/MainWindowLayout.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/MainWindowLayout.java
@@ -39,8 +39,8 @@
 import org.apache.cayenne.modeler.project.DatabaseEntityTreeItem;
 import org.apache.cayenne.modeler.project.ObjectEntityTreeItem;
 import org.apache.cayenne.modeler.project.ProjectTreeCell;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javafx.beans.property.SimpleStringProperty;
 import javafx.beans.property.StringProperty;
@@ -61,7 +61,7 @@
     implements DataDomainListener,
                MainWindowSupport
 {
-    private static final Log LOGGER = LogFactory.getLog(MainWindowLayout.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(MainWindowLayout.class);
 
     @FXML
     private TreeView<String> treeView;
@@ -242,7 +242,7 @@
                 }
                 catch (final IOException e)
                 {
-                    LOGGER.fatal("Cannot load UI.", e);
+                    LOGGER.error("Cannot load UI.", e);
                 }
             });
 
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityAttributesTabLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityAttributesTabLayout.java
index 1e38739..3aa9fed 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityAttributesTabLayout.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityAttributesTabLayout.java
@@ -26,8 +26,8 @@
 import org.apache.cayenne.modeler.adapters.ObjectAttributeAdapter;
 import org.apache.cayenne.modeler.adapters.ObjectEntityAdapter;
 import org.apache.cayenne.modeler.utility.ObjectEntityUtilities;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import de.jensd.fx.glyphs.GlyphsDude;
 import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
@@ -49,7 +49,7 @@
     extends AbstractViewLayout
     implements DetailEditorSupport<ObjectEntityAdapter>
 {
-    private static final Log LOGGER = LogFactory.getLog(ObjectEntityAttributesTabLayout.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(ObjectEntityAttributesTabLayout.class);
 
     @FXML
     private Button newAttributeButton;
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityClassTabLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityClassTabLayout.java
index a483e5d..081cddf 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityClassTabLayout.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityClassTabLayout.java
@@ -24,8 +24,8 @@
 import java.util.List;
 
 import org.apache.cayenne.modeler.adapters.ObjectEntityAdapter;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import de.jensd.fx.glyphs.GlyphsDude;
 import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
@@ -37,7 +37,7 @@
     extends AbstractViewLayout
     implements DetailEditorSupport<ObjectEntityAdapter>
 {
-    private static final Log LOGGER = LogFactory.getLog(ObjectEntityClassTabLayout.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(ObjectEntityClassTabLayout.class);
 
     @FXML
     private Button synchronizeWithDatabaseEntityButton, viewRelatedDatabaseEntityButton;
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityLayout.java
index 19118d9..75ef3d5 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityLayout.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityLayout.java
@@ -22,8 +22,8 @@
 import java.io.IOException;
 
 import org.apache.cayenne.modeler.adapters.ObjectEntityAdapter;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javafx.fxml.FXML;
 import javafx.scene.layout.AnchorPane;
@@ -32,7 +32,7 @@
     extends AbstractViewLayout
     implements DetailEditorSupport<ObjectEntityAdapter>
 {
-    private static final Log LOGGER = LogFactory.getLog(ObjectEntityLayout.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(ObjectEntityLayout.class);
 
     @FXML
     private AnchorPane classTabAnchorPane, attributesTabAnchorPane, relationshipsTabAnchorPane;
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityRelationshipsTabLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityRelationshipsTabLayout.java
index acbc2bb..f752365 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityRelationshipsTabLayout.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/ObjectEntityRelationshipsTabLayout.java
@@ -26,8 +26,8 @@
 import org.apache.cayenne.modeler.adapters.ObjectAttributeAdapter;
 import org.apache.cayenne.modeler.adapters.ObjectEntityAdapter;
 import org.apache.cayenne.modeler.utility.ObjectEntityUtilities;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import de.jensd.fx.glyphs.GlyphsDude;
 import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
@@ -49,7 +49,7 @@
     extends AbstractViewLayout
     implements DetailEditorSupport<ObjectEntityAdapter>
 {
-    private static final Log LOGGER = LogFactory.getLog(ObjectEntityRelationshipsTabLayout.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(ObjectEntityRelationshipsTabLayout.class);
 
     @FXML
     private Button newRelationshipButton;
diff --git a/src/main/java/org/apache/cayenne/modeler/layout/SplashLayout.java b/src/main/java/org/apache/cayenne/modeler/layout/SplashLayout.java
index 85d5a3f..c089c7b 100644
--- a/src/main/java/org/apache/cayenne/modeler/layout/SplashLayout.java
+++ b/src/main/java/org/apache/cayenne/modeler/layout/SplashLayout.java
@@ -24,8 +24,8 @@
 
 import org.apache.cayenne.modeler.CayenneModeler;
 import org.apache.cayenne.modeler.preferences.ModelerPreferences;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import de.jensd.fx.glyphs.GlyphsDude;
 import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
@@ -42,7 +42,7 @@
 
 public class SplashLayout extends AbstractWindowLayout
 {
-    private static final Log LOGGER = LogFactory.getLog(SplashLayout.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(SplashLayout.class);
 
     @FXML
     private ListView<String> projectListView;
diff --git a/src/main/java/org/apache/cayenne/modeler/preferences/ModelerPreferences.java b/src/main/java/org/apache/cayenne/modeler/preferences/ModelerPreferences.java
index 0a7f579..bb86153 100644
--- a/src/main/java/org/apache/cayenne/modeler/preferences/ModelerPreferences.java
+++ b/src/main/java/org/apache/cayenne/modeler/preferences/ModelerPreferences.java
@@ -27,8 +27,8 @@
 import java.util.prefs.PreferenceChangeListener;
 import java.util.prefs.Preferences;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * ModelerPreferences class supports persistent user preferences. Preferences are saved in
@@ -41,7 +41,7 @@
 
     private static Preferences cayennePrefs;
 
-    private static final Log logObj = LogFactory.getLog(ModelerPreferences.class);
+    private static final Logger logObj = LoggerFactory.getLogger(ModelerPreferences.class);
 
     /** Name of the log file. */
     public static final String LOGFILE_NAME = "modeler.log";
@@ -81,7 +81,7 @@
 
     public static List<String> getLastProjFiles() {
         Preferences filesPrefs = getLastProjFilesPref();
-        ArrayList<String> arrayLastProjFiles = new ArrayList<String>();
+        ArrayList<String> arrayLastProjFiles = new ArrayList<>();
         String[] keys = null;
         try {
             keys = filesPrefs.keys();
@@ -93,7 +93,7 @@
         if (keys != null) {
             int len = keys.length;
 
-            ArrayList<Integer> keysInteger = new ArrayList<Integer>();
+            ArrayList<Integer> keysInteger = new ArrayList<>();
             for (int i = 0; i < len; i++) {
                 keysInteger.add(new Integer(i));
             }
diff --git a/src/main/java/org/apache/cayenne/modeler/preferences/UpgradeCayennePreference.java b/src/main/java/org/apache/cayenne/modeler/preferences/UpgradeCayennePreference.java
index f7582e7..786f9c7 100644
--- a/src/main/java/org/apache/cayenne/modeler/preferences/UpgradeCayennePreference.java
+++ b/src/main/java/org/apache/cayenne/modeler/preferences/UpgradeCayennePreference.java
@@ -29,11 +29,11 @@
 import org.apache.cayenne.modeler.CayenneProjectManager;
 import org.apache.cayenne.modeler.utility.CayenneUserDir;
 import org.apache.commons.collections.ExtendedProperties;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class UpgradeCayennePreference extends PreferenceDecorator {
-    private static final Log LOGGER = LogFactory.getLog(CayenneProjectManager.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(CayenneProjectManager.class);
 
     /** Name of the preferences file. */
     public static final String PREFERENCES_NAME_OLD = "modeler.preferences";
@@ -90,10 +90,10 @@
                         }
                     }
                     catch (FileNotFoundException e) {
-                        LOGGER.error(e);
+                        LOGGER.error("", e);
                     }
                     catch (IOException e) {
-                        LOGGER.error(e);
+                        LOGGER.error("", e);
                     }
                 }
             }
diff --git a/src/main/java/org/apache/cayenne/modeler/project/CayenneProject.java b/src/main/java/org/apache/cayenne/modeler/project/CayenneProject.java
index 8dcaabb..9e06078 100644
--- a/src/main/java/org/apache/cayenne/modeler/project/CayenneProject.java
+++ b/src/main/java/org/apache/cayenne/modeler/project/CayenneProject.java
@@ -29,8 +29,8 @@
 import org.apache.cayenne.access.DataRowStore;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
-import org.apache.cayenne.event.JMSBridgeFactory;
-import org.apache.cayenne.event.JavaGroupsBridgeFactory;
+import org.apache.cayenne.event.JMSBridge;
+import org.apache.cayenne.event.JavaGroupsBridge;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.modeler.adapters.DataDomainAdapter;
 import org.apache.cayenne.modeler.di.Injection;
@@ -43,15 +43,15 @@
 import org.apache.cayenne.resource.Resource;
 import org.apache.cayenne.resource.URLResource;
 import org.apache.cayenne.util.Util;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javafx.beans.property.BooleanProperty;
 import javafx.beans.property.SimpleBooleanProperty;
 
 public class CayenneProject
 {
-    private static final Log LOGGER = LogFactory.getLog(CayenneProject.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(CayenneProject.class);
 
     private final String path;
     private final DataDomainAdapter dataDomainAdapter;
@@ -91,15 +91,15 @@
         // FIXME: These should be handled better.
         if (UpgradeType.DOWNGRADE_NEEDED == md.getUpgradeType())
         {
-            LOGGER.fatal("Can't open project - it was created using a newer version of Cayenne Modeler");
+            LOGGER.error("Can't open project - it was created using a newer version of Cayenne Modeler");
         }
         else if (UpgradeType.INTERMEDIATE_UPGRADE_NEEDED == md.getUpgradeType())
         {
-            LOGGER.fatal("Can't open project - it was created using an older version of Cayenne Modeler");
+            LOGGER.error("Can't open project - it was created using an older version of Cayenne Modeler");
         }
         else if (UpgradeType.UPGRADE_NEEDED == md.getUpgradeType())
         {
-            LOGGER.fatal("Can't open project - it was created using an older version of Cayenne Modeler");
+            LOGGER.error("Can't open project - it was created using an older version of Cayenne Modeler");
         }
         else
         {
@@ -197,42 +197,42 @@
 
     public String getJavaGroupsMulticastAddress()
     {
-        return getDomainProperty(JavaGroupsBridgeFactory.MCAST_ADDRESS_PROPERTY, JavaGroupsBridgeFactory.MCAST_ADDRESS_DEFAULT);
+        return getDomainProperty(JavaGroupsBridge.MCAST_ADDRESS_PROPERTY, JavaGroupsBridge.MCAST_ADDRESS_DEFAULT);
     }
 
     public void setJavaGroupsMulticastAddress(String multicastAddress)
     {
-        setDomainStringProperty(JavaGroupsBridgeFactory.MCAST_ADDRESS_PROPERTY, multicastAddress, JavaGroupsBridgeFactory.MCAST_ADDRESS_DEFAULT);
+        setDomainStringProperty(JavaGroupsBridge.MCAST_ADDRESS_PROPERTY, multicastAddress, JavaGroupsBridge.MCAST_ADDRESS_DEFAULT);
     }
 
     public String getJavaGroupsMulticastPort()
     {
-        return getDomainProperty(JavaGroupsBridgeFactory.MCAST_PORT_PROPERTY, JavaGroupsBridgeFactory.MCAST_PORT_DEFAULT);
+        return getDomainProperty(JavaGroupsBridge.MCAST_PORT_PROPERTY, JavaGroupsBridge.MCAST_PORT_DEFAULT);
     }
 
     public void setJavaGroupsMulticastPort(String multicastPort)
     {
-        setDomainStringProperty(JavaGroupsBridgeFactory.MCAST_PORT_PROPERTY, multicastPort, JavaGroupsBridgeFactory.MCAST_PORT_DEFAULT);
+        setDomainStringProperty(JavaGroupsBridge.MCAST_PORT_PROPERTY, multicastPort, JavaGroupsBridge.MCAST_PORT_DEFAULT);
     }
 
     public String getJavaGroupsFile()
     {
-        return getDomainProperty(JavaGroupsBridgeFactory.JGROUPS_CONFIG_URL_PROPERTY, "");
+        return getDomainProperty(JavaGroupsBridge.JGROUPS_CONFIG_URL_PROPERTY, "");
     }
 
     public void setJavaGroupsFile(String javaGroupsFile)
     {
-        setDomainStringProperty(JavaGroupsBridgeFactory.JGROUPS_CONFIG_URL_PROPERTY, javaGroupsFile, "");
+        setDomainStringProperty(JavaGroupsBridge.JGROUPS_CONFIG_URL_PROPERTY, javaGroupsFile, "");
     }
 
     public String getJmsConnectionFactory()
     {
-        return getDomainProperty(JMSBridgeFactory.TOPIC_CONNECTION_FACTORY_PROPERTY, JMSBridgeFactory.TOPIC_CONNECTION_FACTORY_DEFAULT);
+        return getDomainProperty(JMSBridge.TOPIC_CONNECTION_FACTORY_PROPERTY, JMSBridge.TOPIC_CONNECTION_FACTORY_DEFAULT);
     }
 
     public void setJmsConnectionFactory(String jmsConnectionFactory)
     {
-        setDomainStringProperty(JMSBridgeFactory.TOPIC_CONNECTION_FACTORY_PROPERTY, jmsConnectionFactory, JMSBridgeFactory.TOPIC_CONNECTION_FACTORY_DEFAULT);
+        setDomainStringProperty(JMSBridge.TOPIC_CONNECTION_FACTORY_PROPERTY, jmsConnectionFactory, JMSBridge.TOPIC_CONNECTION_FACTORY_DEFAULT);
     }
 
     public Collection<DataMap> getDataMaps()
diff --git a/src/main/java/org/apache/cayenne/modeler/project/DataDomainTreeItem.java b/src/main/java/org/apache/cayenne/modeler/project/DataDomainTreeItem.java
index 8a18f87..00044d5 100644
--- a/src/main/java/org/apache/cayenne/modeler/project/DataDomainTreeItem.java
+++ b/src/main/java/org/apache/cayenne/modeler/project/DataDomainTreeItem.java
@@ -20,8 +20,8 @@
 package org.apache.cayenne.modeler.project;
 
 import org.apache.cayenne.modeler.adapters.DataDomainAdapter;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import de.jensd.fx.glyphs.GlyphsDude;
 import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
@@ -32,7 +32,7 @@
 //public class DataDomainTreeItem extends CayenneTreeItem<String>
 public class DataDomainTreeItem extends TreeItem<String> implements CayenneTreeItem<DataDomainAdapter>
 {
-    private static final Log LOGGER = LogFactory.getLog(DataDomainTreeItem.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(DataDomainTreeItem.class);
 
     private final DataDomainAdapter dataDomainAdapter;
 
diff --git a/src/main/java/org/apache/cayenne/modeler/project/DataMapTreeItem.java b/src/main/java/org/apache/cayenne/modeler/project/DataMapTreeItem.java
index d22fdb1..391b390 100644
--- a/src/main/java/org/apache/cayenne/modeler/project/DataMapTreeItem.java
+++ b/src/main/java/org/apache/cayenne/modeler/project/DataMapTreeItem.java
@@ -20,8 +20,8 @@
 package org.apache.cayenne.modeler.project;
 
 import org.apache.cayenne.modeler.adapters.DataMapAdapter;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import de.jensd.fx.glyphs.GlyphsDude;
 import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
@@ -31,7 +31,7 @@
 
 public class DataMapTreeItem extends TreeItem<String> implements CayenneTreeItem<DataMapAdapter>
 {
-    private static final Log LOGGER = LogFactory.getLog(DataMapTreeItem.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(DataMapTreeItem.class);
 
     private final DataMapAdapter dataMapAdapter;
 
diff --git a/src/main/java/org/apache/cayenne/modeler/project/DataNodeTreeItem.java b/src/main/java/org/apache/cayenne/modeler/project/DataNodeTreeItem.java
index 7ae1ed5..322f958 100644
--- a/src/main/java/org/apache/cayenne/modeler/project/DataNodeTreeItem.java
+++ b/src/main/java/org/apache/cayenne/modeler/project/DataNodeTreeItem.java
@@ -20,8 +20,8 @@
 package org.apache.cayenne.modeler.project;
 
 import org.apache.cayenne.modeler.adapters.DataNodeAdapter;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import de.jensd.fx.glyphs.GlyphsDude;
 import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
@@ -31,7 +31,7 @@
 
 public class DataNodeTreeItem extends TreeItem<String> implements CayenneTreeItem<DataNodeAdapter>
 {
-    private static final Log LOGGER = LogFactory.getLog(DataNodeTreeItem.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(DataNodeTreeItem.class);
 
     private final DataNodeAdapter dataNodeAdapter;
 
diff --git a/src/main/java/org/apache/cayenne/modeler/project/DatabaseEntityTreeItem.java b/src/main/java/org/apache/cayenne/modeler/project/DatabaseEntityTreeItem.java
index 64e5434..721523d 100644
--- a/src/main/java/org/apache/cayenne/modeler/project/DatabaseEntityTreeItem.java
+++ b/src/main/java/org/apache/cayenne/modeler/project/DatabaseEntityTreeItem.java
@@ -20,8 +20,8 @@
 package org.apache.cayenne.modeler.project;
 
 import org.apache.cayenne.modeler.adapters.DatabaseEntityAdapter;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import de.jensd.fx.glyphs.GlyphsDude;
 import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
@@ -31,7 +31,7 @@
 
 public class DatabaseEntityTreeItem extends TreeItem<String> implements CayenneTreeItem<DatabaseEntityAdapter>
 {
-    private static final Log LOGGER = LogFactory.getLog(DatabaseEntityTreeItem.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseEntityTreeItem.class);
 
     private final DatabaseEntityAdapter databaseEntityAdapter;
 
diff --git a/src/main/java/org/apache/cayenne/modeler/project/ObjectEntityTreeItem.java b/src/main/java/org/apache/cayenne/modeler/project/ObjectEntityTreeItem.java
index 0b8aa63..4ca821a 100644
--- a/src/main/java/org/apache/cayenne/modeler/project/ObjectEntityTreeItem.java
+++ b/src/main/java/org/apache/cayenne/modeler/project/ObjectEntityTreeItem.java
@@ -22,8 +22,8 @@
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.modeler.adapters.ObjectEntityAdapter;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import de.jensd.fx.glyphs.GlyphsDude;
 import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
@@ -33,7 +33,7 @@
 
 public class ObjectEntityTreeItem extends TreeItem<String> implements CayenneTreeItem<ObjectEntityAdapter>
 {
-    private static final Log LOGGER = LogFactory.getLog(DataDomainTreeItem.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(DataDomainTreeItem.class);
 
     private final ObjectEntityAdapter objectEntityAdapter;
 
diff --git a/src/test/java/org/apache/cayenne/modeler/adapters/TestDataDomainAdapter.java b/src/test/java/org/apache/cayenne/modeler/adapters/TestDataDomainAdapter.java
index fc4efc3..eb0cc43 100644
--- a/src/test/java/org/apache/cayenne/modeler/adapters/TestDataDomainAdapter.java
+++ b/src/test/java/org/apache/cayenne/modeler/adapters/TestDataDomainAdapter.java
@@ -8,7 +8,7 @@
 import org.apache.cayenne.di.Module;
 import org.apache.cayenne.modeler.CayenneProjectManager;
 import org.apache.cayenne.modeler.di.Injection;
-import org.apache.cayenne.project.CayenneProjectModule;
+import org.apache.cayenne.project.ProjectModule;
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -20,7 +20,7 @@
     protected static Collection<Module> appendModules(final Collection<Module> modules)
     {
         modules.add(new ServerModule());
-        modules.add(new CayenneProjectModule());
+        modules.add(new ProjectModule());
 //        modules.add(new CayenneModelerModule());
 
         return modules;