diff --git a/todolist/config/spotbugs/exclude.xml b/todolist/config/spotbugs/exclude.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e10c615e8d797fb3c89ba5554e17d8a60efb60f8
--- /dev/null
+++ b/todolist/config/spotbugs/exclude.xml
@@ -0,0 +1,11 @@
+<FindBugsFilter>
+    <Match>
+        <Bug pattern="SA_LOCAL_SELF_COMPARISON" />
+    </Match>
+    <Match>
+        <Bug pattern="EI_EXPOSE_REP" />
+    </Match>
+    <Match>
+        <Bug pattern="EI_EXPOSE_REP2" />
+    </Match>
+</FindBugsFilter>
diff --git a/todolist/fxui/pom.xml b/todolist/fxui/pom.xml
index 70d43d8e329e36d58a6377b6ebca7783f8d1b640..5aab5ecb06c58b7178f6177ee1637385dd9aeff1 100644
--- a/todolist/fxui/pom.xml
+++ b/todolist/fxui/pom.xml
@@ -11,6 +11,10 @@
 
     <artifactId>fxui</artifactId>
 
+    <properties>
+        <skipUiTests>false</skipUiTests>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>it1901.todolist</groupId>
@@ -173,6 +177,9 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>${skipUiTests}</skipTests>
+                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.openjfx</groupId>
diff --git a/todolist/fxui/src/main/java/todolist/ui/TodoApp.java b/todolist/fxui/src/main/java/todolist/ui/TodoApp.java
index a69c47b49bedc0586a2fde364fbfffd2eb718359..ff4f8268f17c25b391decfe102b439ad1c8b8c07 100644
--- a/todolist/fxui/src/main/java/todolist/ui/TodoApp.java
+++ b/todolist/fxui/src/main/java/todolist/ui/TodoApp.java
@@ -6,6 +6,9 @@ import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.stage.Stage;
 
+/**
+ * Standalone version of the app.
+ */
 public class TodoApp extends Application {
 
   @Override
diff --git a/todolist/fxui/src/main/java/todolist/ui/TodoAppController.java b/todolist/fxui/src/main/java/todolist/ui/TodoAppController.java
index 9bff89e6c3ee641a931014492791164ee509d52b..456e27e7aa8a348773e42e04043f2f49571c947e 100644
--- a/todolist/fxui/src/main/java/todolist/ui/TodoAppController.java
+++ b/todolist/fxui/src/main/java/todolist/ui/TodoAppController.java
@@ -14,11 +14,31 @@ import todolist.core.TodoList;
 import todolist.core.TodoModel;
 import todolist.json.TodoPersistence;
 
+/**
+ * Top-level controller.
+ */
 public class TodoAppController {
 
-  private static final String todoListWithTwoItems =
-      "{\"lists\":[" + "{\"name\":\"todo\",\"items\":[{\"text\":\"item1\",\"checked\":false},"
-          + "{\"text\":\"item2\",\"checked\":true,\"deadline\":\"2020-10-01T14:53:11\"}]}" + "]}";
+  private static final String todoListWithTwoItems = """
+      {
+        "lists" : [
+          {
+            "name": "todo",
+            "items": [
+              {
+                "text": "item1",
+                "checked":false
+              },
+              {
+                "text": "item2",
+                "checked": true,
+                "deadline": "2020-10-01T14:53:11"
+              }
+            ]
+          }
+        ]
+      }
+      """;
 
   @FXML
   String userTodoModelPath;
diff --git a/todolist/fxui/src/main/java/todolist/ui/TodoDocumentApp.java b/todolist/fxui/src/main/java/todolist/ui/TodoDocumentApp.java
index 81fa81eac8b60f894de053e7e84287ffe66675ef..0e3424b992f32b20c2bce35d247676ee2c8b9196 100644
--- a/todolist/fxui/src/main/java/todolist/ui/TodoDocumentApp.java
+++ b/todolist/fxui/src/main/java/todolist/ui/TodoDocumentApp.java
@@ -6,6 +6,9 @@ import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.stage.Stage;
 
+/**
+ * Variant of the app with document metaphor and File menu.
+ */
 public class TodoDocumentApp extends Application {
 
   private TodoDocumentAppController controller;
diff --git a/todolist/fxui/src/main/java/todolist/ui/TodoDocumentAppController.java b/todolist/fxui/src/main/java/todolist/ui/TodoDocumentAppController.java
index b9730ccf6c8827cac1b855780714095661f48c54..a6958ff5fe2edd73e51bfe0c840ccfd4de900700 100644
--- a/todolist/fxui/src/main/java/todolist/ui/TodoDocumentAppController.java
+++ b/todolist/fxui/src/main/java/todolist/ui/TodoDocumentAppController.java
@@ -18,6 +18,9 @@ import java.util.List;
 import javafx.fxml.FXML;
 import todolist.core.TodoModel;
 
+/**
+ * Controller for the document metaphor variant of the app.
+ */
 public class TodoDocumentAppController implements DocumentListener<TodoModel, File> {
 
   private final TodoModelStorage todoModelStorage;
diff --git a/todolist/fxui/src/main/java/todolist/ui/TodoItemListCell.java b/todolist/fxui/src/main/java/todolist/ui/TodoItemListCell.java
index 3223e8a14cbebd218aa099107457d1743d5432a0..0eb783245557926976711c48982808de6ffb3d0d 100644
--- a/todolist/fxui/src/main/java/todolist/ui/TodoItemListCell.java
+++ b/todolist/fxui/src/main/java/todolist/ui/TodoItemListCell.java
@@ -10,6 +10,10 @@ import javafx.scene.control.TextField;
 import javafx.scene.layout.HBox;
 import todolist.core.TodoItem;
 
+/**
+ * ListCell for TodoItems.
+ * Supports editing the text and checking the item.
+ */
 public class TodoItemListCell extends ListCell<TodoItem> {
 
   // for whole row
diff --git a/todolist/fxui/src/main/java/todolist/ui/TodoListController.java b/todolist/fxui/src/main/java/todolist/ui/TodoListController.java
index d77155c9c999cf6b4462e7128a7cdbca036049ce..83eeaac9f75ab35e0a0d364c11a9c52375ba28b5 100644
--- a/todolist/fxui/src/main/java/todolist/ui/TodoListController.java
+++ b/todolist/fxui/src/main/java/todolist/ui/TodoListController.java
@@ -15,6 +15,10 @@ import todolist.core.TodoItem;
 import todolist.core.TodoList;
 import todolist.core.TodoListListener;
 
+/**
+ * Controller for a TodoList.
+ * Supports adding, editing and removing elements.
+ */
 public class TodoListController {
 
   @FXML
@@ -33,7 +37,7 @@ public class TodoListController {
 
   private TodoList todoList = null;
 
-  public TodoList getTodoList() {
+  TodoList getTodoList() {
     return todoList;
   }
 
diff --git a/todolist/fxui/src/main/java/todolist/ui/TodoModelController.java b/todolist/fxui/src/main/java/todolist/ui/TodoModelController.java
index f42bf42121d9f1c98de07c3e42328380b3b68fec..409f1ed09f91291d9c695276f55b86301bc644e3 100644
--- a/todolist/fxui/src/main/java/todolist/ui/TodoModelController.java
+++ b/todolist/fxui/src/main/java/todolist/ui/TodoModelController.java
@@ -8,6 +8,11 @@ import javafx.scene.control.ComboBox;
 import todolist.core.AbstractTodoList;
 import todolist.core.TodoList;
 
+/**
+ * Controller for TodoModel objects.
+ * Supports adding new TodoList objects and
+ * selecting one for viewing and editing.
+ */
 public class TodoModelController {
 
   private TodoModelAccess todoModelAccess;
@@ -73,7 +78,7 @@ public class TodoModelController {
           // retrieve actual list
           todoList = todoModelAccess.getTodoList(todoList.getName());
         }
-        todoListViewController.setTodoList(todoList instanceof TodoList ? (TodoList) todoList : null);
+        todoListViewController.setTodoList(todoList instanceof TodoList tl ? tl : null);
       }
     });
   }
diff --git a/todolist/fxui/src/main/java/todolist/ui/TodoModelStorage.java b/todolist/fxui/src/main/java/todolist/ui/TodoModelStorage.java
index 4c987183af15643780735baed224dbab8b4023d6..df9a6c8209521b4b88413a5321ff49b08fce580f 100644
--- a/todolist/fxui/src/main/java/todolist/ui/TodoModelStorage.java
+++ b/todolist/fxui/src/main/java/todolist/ui/TodoModelStorage.java
@@ -12,6 +12,9 @@ import java.nio.charset.StandardCharsets;
 import todolist.core.TodoModel;
 import todolist.json.TodoPersistence;
 
+/**
+ * DocumentStorage for TodoModel objects addressed by File.
+ */
 public class TodoModelStorage extends AbstractDocumentStorage<TodoModel, File> {
 
   @Override
diff --git a/todolist/fxui/src/main/java/todolist/ui/TodoRemoteApp.java b/todolist/fxui/src/main/java/todolist/ui/TodoRemoteApp.java
index 6a849cd9474335c0c98d6eed94118af2ee1f3436..f25325c8168a9d608c782f106e739478e7114919 100644
--- a/todolist/fxui/src/main/java/todolist/ui/TodoRemoteApp.java
+++ b/todolist/fxui/src/main/java/todolist/ui/TodoRemoteApp.java
@@ -6,6 +6,9 @@ import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.stage.Stage;
 
+/**
+ * Variant of the app that connects to a REST service.
+ */
 public class TodoRemoteApp extends Application {
 
   @Override
diff --git a/todolist/pom.xml b/todolist/pom.xml
index f469e16b50433d6c0a62a9af86a72c65a95f5e67..374c38935e2c273901e0e9d0d9e5313ed88b6784 100644
--- a/todolist/pom.xml
+++ b/todolist/pom.xml
@@ -118,6 +118,7 @@
                     <configuration>
                         <xmlOutput>false</xmlOutput>
                         <htmlOutput>true</htmlOutput>
+                        <excludeFilterFile>config/spotbugs/exclude.xml</excludeFilterFile>
                     </configuration>
                     <executions>
                         <execution>