diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md
index 7a8c01251891d47d3aa1b57028719e817843b0bc..55949748d9d513367c2fbb98b5354bd95d97713e 100644
--- a/DEPENDENCIES.md
+++ b/DEPENDENCIES.md
@@ -1,7 +1,7 @@
 # GENERAL
 
 * >=conan-1.37.2 (e.g. with `pip install conan`)
-* >=cmake-3.14
+* >=cmake-3.13
 * >=gcc-10.2.0 | >=clang-11
 
 # OPTIONAL
diff --git a/include/caosdb/connection.h b/include/caosdb/connection.h
index 22bdc6f9f5b524ae895469d25d540f9679e65353..5d7930a0d63e484f01be52dab7749d02b3916c33 100644
--- a/include/caosdb/connection.h
+++ b/include/caosdb/connection.h
@@ -149,6 +149,9 @@ public:
     return ConnectionManager::GetInstance().mGetConnection(name);
   };
 
+  /**
+   * Get the connection marked by the "default" key in the configuration.
+   */
   inline static auto GetDefaultConnection()
     -> const std::shared_ptr<Connection> & {
     return ConnectionManager::GetInstance().mGetDefaultConnection();
diff --git a/include/caosdb/entity.h b/include/caosdb/entity.h
index ace778c11fd03c4533574a7930cc55ebe665a623..c84f044a68a94bed72970b8f387a3e61513e7216 100644
--- a/include/caosdb/entity.h
+++ b/include/caosdb/entity.h
@@ -38,6 +38,12 @@ using caosdb::entity::v1alpha1::IdResponse;
 using ProtoParent = caosdb::entity::v1alpha1::Parent;
 using ProtoEntity = caosdb::entity::v1alpha1::Entity;
 
+/**
+ * Messages convey information about the state and result of transactions.
+ *
+ * A Message object can be thought of as kinf of a generalized error object in
+ * other frameworks. Please have a look at MessageCodes for more details.
+ */
 class Message {
 public:
   [[nodiscard]] inline auto GetCode() const -> MessageCode {
@@ -58,187 +64,187 @@ private:
 };
 
 /**
- * Container for Messages.
- */
+* Container for Messages.
+*/
 class Messages {
 public:
-  [[nodiscard]] inline auto Size() const -> int { return wrapped->size(); }
-  [[nodiscard]] inline auto At(int index) const -> const Message {
-    return Message(&(wrapped->at(index)));
-  }
+[[nodiscard]] inline auto Size() const -> int { return wrapped->size(); }
+[[nodiscard]] inline auto At(int index) const -> const Message {
+  return Message(&(wrapped->at(index)));
+}
 
-  friend class Entity;
+friend class Entity;
 
 private:
-  inline Messages() : wrapped(nullptr){};
+inline Messages() : wrapped(nullptr){};
 
-  ::google::protobuf::RepeatedPtrField<caosdb::entity::v1alpha1::Message>
-    *wrapped;
+::google::protobuf::RepeatedPtrField<caosdb::entity::v1alpha1::Message>
+  *wrapped;
 };
 
 /**
- * Parent of an Entity.
- *
- * This implementation uses protobuf messages as storage backends. In other
- * words, this class wraps a protobuf message and provides getter and setter
- * methods.
- */
+* Parent of an Entity.
+*
+* This implementation uses protobuf messages as storage backends. In other
+* words, this class wraps a protobuf message and provides getter and setter
+* methods.
+*/
 class Parent {
 public:
-  explicit inline Parent(caosdb::entity::v1alpha1::Parent *wrapped)
-    : wrapped(wrapped){};
-  Parent();
-
-  /**
-   * Return the id of the parent entity.
-   */
-  [[nodiscard]] auto GetId() const -> const std::string &;
-  /**
-   * Return the name of the parent entity.
-   */
-  [[nodiscard]] auto GetName() const -> const std::string &;
-  /**
-   * Return the description of the parent entity.
-   */
-  [[nodiscard]] auto GetDescription() const -> const std::string &;
-
-  /**
-   * Set the id of the parent.
-   */
-  auto SetId(const std::string &id) -> void;
-  /**
-   * Set the name of the parent.
-   */
-  auto SetName(const std::string &name) -> void;
+explicit inline Parent(caosdb::entity::v1alpha1::Parent *wrapped)
+  : wrapped(wrapped){};
+Parent();
 
-  /**
-   * Return a json string representing this parent.
-   *
-   * This is intended for debugging.
-   */
-  inline auto ToString() const -> const std::string {
-    google::protobuf::util::JsonOptions options;
-    std::string out;
-    google::protobuf::util::MessageToJsonString(*(this->wrapped), &out,
-                                                options);
-    return out;
-  }
+/**
+ * Return the id of the parent entity.
+ */
+[[nodiscard]] auto GetId() const -> const std::string &;
+/**
+ * Return the name of the parent entity.
+ */
+[[nodiscard]] auto GetName() const -> const std::string &;
+/**
+ * Return the description of the parent entity.
+ */
+[[nodiscard]] auto GetDescription() const -> const std::string &;
 
-  // TODO(fspreck) These need implementations. See Entity::GetErrors for
-  // inspiration.
-  /**
-   * Return the error messages of this parent.
-   */
-  [[nodiscard]] inline auto GetErrors() const -> const Messages &;
-  /**
-   * Return the warning messages of this parent.
-   */
-  [[nodiscard]] inline auto GetWarnings() const -> const Messages &;
-  /**
-   * Return the info messages of this parent.
-   */
-  [[nodiscard]] inline auto GetInfos() const -> const Messages &;
+/**
+ * Set the id of the parent.
+ */
+auto SetId(const std::string &id) -> void;
+/**
+ * Set the name of the parent.
+ */
+auto SetName(const std::string &name) -> void;
 
-  friend class Entity;
-  friend class Parents;
+/**
+ * Return a json string representing this parent.
+ *
+ * This is intended for debugging.
+ */
+inline auto ToString() const -> const std::string {
+  google::protobuf::util::JsonOptions options;
+  std::string out;
+  google::protobuf::util::MessageToJsonString(*(this->wrapped), &out,
+                                              options);
+  return out;
+}
+
+// TODO(fspreck) These need implementations. See Entity::GetErrors for
+// inspiration.
+/**
+ * Return the error messages of this parent.
+ */
+[[nodiscard]] inline auto GetErrors() const -> const Messages &;
+/**
+ * Return the warning messages of this parent.
+ */
+[[nodiscard]] inline auto GetWarnings() const -> const Messages &;
+/**
+ * Return the info messages of this parent.
+ */
+[[nodiscard]] inline auto GetInfos() const -> const Messages &;
 
-private:
-  /**
-   * Return an empty protobuf message pointer.
-   *
-   * This function is called by the default constructor of the
-   * caosdb::entity::Parent class and the protobuf message is used as the
-   * storage-backend for the new Parent instance.
-   *
-   * An 'Arena' takes care of the the memory management. Don't try to delete
-   * this.
-   */
-  static auto CreateProtoParent() -> ProtoParent *;
-
-  /**
-   * Message which serves as storage backend.
-   */
-  mutable caosdb::entity::v1alpha1::Parent *wrapped;
-};
+friend class Entity;
+friend class Parents;
 
+private:
 /**
- * Container for parents of entities.
+ * Return an empty protobuf message pointer.
  *
- * Should only be instantiated and write-accessed by the owning entity.
+ * This function is called by the default constructor of the
+ * caosdb::entity::Parent class and the protobuf message is used as the
+ * storage-backend for the new Parent instance.
+ *
+ * An 'Arena' takes care of the the memory management. Don't try to delete
+ * this.
+ */
+static auto CreateProtoParent() -> ProtoParent *;
+
+/**
+ * Message which serves as storage backend.
  */
+mutable caosdb::entity::v1alpha1::Parent *wrapped;
+};
+
+/**
+* Container for parents of entities.
+*
+* Should only be instantiated and write-accessed by the owning entity.
+*/
 class Parents {
 public:
-  /**
-   * Return the current size of the parent container.
-   *
-   * That is also the number of parents the owning entity currently has.
-   */
-  [[nodiscard]] inline auto Size() const -> int { return wrapped->size(); }
-  /**
-   * Return the parent at the given index.
-   */
-  [[nodiscard]] inline auto At(int index) const -> const Parent {
-    return Parent(&(wrapped->at(index)));
-  }
+/**
+ * Return the current size of the parent container.
+ *
+ * That is also the number of parents the owning entity currently has.
+ */
+[[nodiscard]] inline auto Size() const -> int { return wrapped->size(); }
+/**
+ * Return the parent at the given index.
+ */
+[[nodiscard]] inline auto At(int index) const -> const Parent {
+  return Parent(&(wrapped->at(index)));
+}
 
-  friend class Entity;
+friend class Entity;
 
 private:
-  inline Parents(){};
-  explicit inline Parents(
-    ::google::protobuf::RepeatedPtrField<caosdb::entity::v1alpha1::Parent>
-      *wrapped)
-    : wrapped(wrapped){};
-
-  /**
-   * Append a parent.
-   *
-   * This increases the Size() by one.
-   */
-  auto Append(const Parent &parent) -> void;
-  /**
-   * The collection of parent messages which serves as a backend for this
-   * class.
-   */
+inline Parents(){};
+explicit inline Parents(
   ::google::protobuf::RepeatedPtrField<caosdb::entity::v1alpha1::Parent>
-    *wrapped;
-};
+    *wrapped)
+  : wrapped(wrapped){};
 
 /**
- * Property of an Entity.
+ * Append a parent.
  *
- * This is a property which belongs to another entity. Don't confuse it with
- * an Entity with the "Property" role.
+ * This increases the Size() by one.
  */
+auto Append(const Parent &parent) -> void;
+/**
+ * The collection of parent messages which serves as a backend for this
+ * class.
+ */
+::google::protobuf::RepeatedPtrField<caosdb::entity::v1alpha1::Parent>
+  *wrapped;
+};
+
+/**
+* Property of an Entity.
+*
+* This is a property which belongs to another entity. Don't confuse it with
+* an Entity with the "Property" role.
+*/
 class Property {
 public:
-  explicit inline Property(caosdb::entity::v1alpha1::Property *wrapped)
-    : wrapped(wrapped){};
-
-  // TODO(fspreck) All of these methods need implementations.
-  [[nodiscard]] auto GetId() const -> const std::string &;
-  [[nodiscard]] auto GetName() const -> const std::string &;
-  [[nodiscard]] auto GetDescription() const -> const std::string &;
-  [[nodiscard]] auto GetImportance() const -> const std::string &;
-  [[nodiscard]] auto GetValue() const -> const std::string &;
-  [[nodiscard]] auto GetUnit() const -> const std::string &;
-  [[nodiscard]] auto GetDatatype() const -> const std::string &;
-  [[nodiscard]] auto GetErrors() const -> const Messages &;
-  [[nodiscard]] auto GetWarnings() const -> const Messages &;
-  [[nodiscard]] auto GetInfos() const -> const Messages &;
-
-  auto SetId(const std::string &id) -> void;
-  auto SetName(const std::string &name) -> void;
-  auto SetImportance(const std::string &importance) -> void;
-  auto SetValue(const std::string &value) -> void;
-  auto SetUnit(const std::string &unit) -> void;
-  auto SetDatatype(const std::string &datatype) -> void;
-
-  friend class Entity;
-  friend class Properties;
+explicit inline Property(caosdb::entity::v1alpha1::Property *wrapped)
+  : wrapped(wrapped){};
+
+// TODO(fspreck) All of these methods need implementations.
+[[nodiscard]] auto GetId() const -> const std::string &;
+[[nodiscard]] auto GetName() const -> const std::string &;
+[[nodiscard]] auto GetDescription() const -> const std::string &;
+[[nodiscard]] auto GetImportance() const -> const std::string &;
+[[nodiscard]] auto GetValue() const -> const std::string &;
+[[nodiscard]] auto GetUnit() const -> const std::string &;
+[[nodiscard]] auto GetDatatype() const -> const std::string &;
+[[nodiscard]] auto GetErrors() const -> const Messages &;
+[[nodiscard]] auto GetWarnings() const -> const Messages &;
+[[nodiscard]] auto GetInfos() const -> const Messages &;
+
+auto SetId(const std::string &id) -> void;
+auto SetName(const std::string &name) -> void;
+auto SetImportance(const std::string &importance) -> void;
+auto SetValue(const std::string &value) -> void;
+auto SetUnit(const std::string &unit) -> void;
+auto SetDatatype(const std::string &datatype) -> void;
+
+friend class Entity;
+friend class Properties;
 
 private:
-  caosdb::entity::v1alpha1::Property *wrapped;
+caosdb::entity::v1alpha1::Property *wrapped;
 };
 
 /**
@@ -248,12 +254,12 @@ private:
  */
 class Properties {
 public:
-  // TODO(fspreck) Implementations needed (basically everything). See Parents
-  // container for inspiration.
-  [[nodiscard]] auto At(int index) const -> const Property &;
-  auto Append(const Property &property) -> void;
+// TODO(fspreck) Implementations needed (basically everything). See Parents
+// container for inspiration.
+[[nodiscard]] auto At(int index) const -> const Property &;
+auto Append(const Property &property) -> void;
 
-  friend class Entity;
+friend class Entity;
 
 private:
   inline Properties(){};
diff --git a/include/caosdb/exceptions.h b/include/caosdb/exceptions.h
index 6dc44cbef4d05345eaab4b00d439967f7c88d89a..4fd519233185f59639e9e323c0549ecb4b36eefb 100644
--- a/include/caosdb/exceptions.h
+++ b/include/caosdb/exceptions.h
@@ -32,9 +32,9 @@ using std::runtime_error;
 /**
  * @brief Generic exception class of the caosdb client library.
  */
-class GenericException : public runtime_error {
+class Exception : public runtime_error {
 public:
-  explicit GenericException(StatusCode code, const std::string &what_arg)
+  explicit Exception(StatusCode code, const std::string &what_arg)
     : runtime_error(what_arg), code(code) {}
   [[nodiscard]] inline auto GetCode() const -> StatusCode { return this->code; }
 
@@ -45,32 +45,28 @@ private:
 /**
  * @brief Exception for authentication errors.
  */
-class AuthenticationError : public GenericException {
+class AuthenticationError : public Exception {
 public:
   explicit AuthenticationError(const std::string &what_arg)
-    : GenericException(StatusCode::AUTHENTICATION_ERROR, what_arg) {}
+    : Exception(StatusCode::AUTHENTICATION_ERROR, what_arg) {}
 };
 
 /**
  * @brief The connection to the CaosDB server is down.
  */
-class ConnectionError : public GenericException {
+class ConnectionError : public Exception {
 public:
   explicit ConnectionError(const std::string &what_arg)
-    : GenericException(StatusCode::CONNECTION_ERROR, what_arg) {}
+    : Exception(StatusCode::CONNECTION_ERROR, what_arg) {}
 };
 
 /**
  * @brief The transaction terminated unsuccessfully.
  */
-class TransactionError : public GenericException {
-protected:
-  TransactionError(StatusCode code, const std::string &what_arg)
-    : GenericException(code, what_arg) {}
-
+class TransactionError : public Exception {
 public:
   explicit TransactionError(const std::string &what_arg)
-    : GenericException(StatusCode::GENERIC_TRANSACTION_ERROR, what_arg) {}
+    : Exception(StatusCode::GENERIC_TRANSACTION_ERROR, what_arg) {}
 };
 
 class TransactionStatusError : public TransactionError {
@@ -83,19 +79,19 @@ public:
  * @brief Exception for errors of the ConfigurationManager or other components
  * of the configuration.
  */
-class ConfigurationError : public GenericException {
+class ConfigurationError : public Exception {
 public:
   explicit ConfigurationError(const std::string &what_arg)
-    : GenericException(StatusCode::CONFIGURATION_ERROR, what_arg) {}
+    : Exception(StatusCode::CONFIGURATION_ERROR, what_arg) {}
 };
 
 /**
  * @brief The connection isn't known to the ConnectionManager under this name.
  */
-class UnknownConnectionError : public GenericException {
+class UnknownConnectionError : public Exception {
 public:
   explicit UnknownConnectionError(const std::string &what_arg)
-    : GenericException(StatusCode::UNKNOWN_CONNECTION_ERROR, what_arg) {}
+    : Exception(StatusCode::UNKNOWN_CONNECTION_ERROR, what_arg) {}
 };
 
 } // namespace caosdb::exceptions
diff --git a/include/caosdb/log_level.h b/include/caosdb/log_level.h
index af05d3ba11b3d0e6252c889f7c9be1ddd61015f8..c2fcb9b1181dcb86f91dfaf9a4ddecba3ea417cb 100644
--- a/include/caosdb/log_level.h
+++ b/include/caosdb/log_level.h
@@ -19,8 +19,8 @@
  *
  */
 
-#ifndef CAOSDB_LOG_LEVELS_H
-#define CAOSDB_LOG_LEVELS_H
+#ifndef CAOSDB_LOG_LEVEL_H
+#define CAOSDB_LOG_LEVEL_H
 
 #define CAOSDB_LOG_LEVEL_OFF 1000000
 #define CAOSDB_LOG_LEVEL_FATAL 700
diff --git a/include/caosdb/logging.h b/include/caosdb/logging.h
index 8d3acdd3846726e7c5f31a4698b08bdb24ab978a..2f04ec6087cfec19e1a5fbe87483544bd4e144a6 100644
--- a/include/caosdb/logging.h
+++ b/include/caosdb/logging.h
@@ -43,6 +43,9 @@ typedef boost::log::sources::severity_channel_logger<int, std::string>
 
 BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULT(logger, boost_logger_class)
 
+/**
+ * This class stores the integer log level.
+ */
 class LevelConfiguration {
 public:
   LevelConfiguration(int level) : level(level){};
@@ -54,6 +57,11 @@ private:
 
 class SinkConfiguration;
 
+/**
+ * This class stores the logging level and log sinks.
+ *
+ * Sinks are represented by SinkConfiguration objects.
+ */
 class LoggingConfiguration : public LevelConfiguration {
 public:
   virtual ~LoggingConfiguration() = default;
@@ -69,6 +77,23 @@ private:
 auto initialize_logging_defaults() -> int;
 auto initialize_logging(const LoggingConfiguration &configuration) -> void;
 
+/**
+ * A logging sink is characterized by a name and destination.
+ *
+ * Typical inheriting configurations exist for console, files and syslog.
+ *
+ * When a SinkConfiguration is created from a configuration, the sink
+ * configuration must contain a \p destination key which matches one of the
+ * keywords for implemented sinks.  At the moment of writing this documentation,
+ * valid destinations are:
+ *
+ * \li \p file
+ * \li \p console
+ * \li \p syslog
+ *
+ * A \p level keyword sets the logging level, if it exists at the sink or
+ * logging level of the configuration.
+ */
 class SinkConfiguration : public LevelConfiguration {
 public:
   virtual ~SinkConfiguration() = default;
@@ -104,6 +129,12 @@ private:
   const std::string destination = "Console";
 };
 
+/**
+ * The file name is the destination, the directory can be set separately.
+ *
+ * If there is a `directory` key in the configuration, that will be used as a
+ * default, otherwise it is the current directory.
+ */
 class FileSinkConfiguration : public SinkConfiguration {
 public:
   virtual ~FileSinkConfiguration() = default;
@@ -136,27 +167,27 @@ private:
 };
 
 /**
- * Convenience function for the c-interface.
+ * Convenience function for the C interface.
  */
 void caosdb_log_fatal(const char *channel, const char *msg);
 /**
- * Convenience function for the c-interface.
+ * Convenience function for the C interface.
  */
 void caosdb_log_error(const char *channel, const char *msg);
 /**
- * Convenience function for the c-interface.
+ * Convenience function for the C interface.
  */
 void caosdb_log_warn(const char *channel, const char *msg);
 /**
- * Convenience function for the c-interface.
+ * Convenience function for the C interface.
  */
 void caosdb_log_info(const char *channel, const char *msg);
 /**
- * Convenience function for the c-interface.
+ * Convenience function for the C interface.
  */
 void caosdb_log_debug(const char *channel, const char *msg);
 /**
- * Convenience function for the c-interface.
+ * Convenience function for the C interface.
  */
 void caosdb_log_trace(const char *channel, const char *msg);
 
diff --git a/include/caosdb/message_code.h b/include/caosdb/message_code.h
index 17ec1c1a9fdfb58a512eaa5e7940686ea9ccbaa3..2cc3f516f4e3356d9dfccc9e0435bfdfe2063306 100644
--- a/include/caosdb/message_code.h
+++ b/include/caosdb/message_code.h
@@ -30,6 +30,10 @@
  * In contrast to the status codes, the message codes are part of the CaosDB
  * API. Messages (and their codes) represent the state of the entities in a
  * transaction or the server.
+ *
+ * For a specification of the message codes, look at the protobuf documentation.
+ * The sources and documentation can be found at
+ * https://gitlab.indiscale.com/caosdb/src/caosdb-proto.
  */
 
 namespace caosdb::entity {
diff --git a/include/caosdb/transaction_status.h b/include/caosdb/transaction_status.h
index 8645aceb3749efbbcf8c6cfec5aa96394b029ed7..8e54c8ba79c944f6b157a577cc9db64be01e1473 100644
--- a/include/caosdb/transaction_status.h
+++ b/include/caosdb/transaction_status.h
@@ -25,7 +25,12 @@
 /**
  * TransactionStatus indicates the current status of a transaction and, when it
  * has already terminated, whether the transaction has been successful or not.
+ *
+ * A status code of 0 denotes a generic success state, positive values indicate
+ * errors, and negative values indicate other states, such as different stages
+ * of a transaction in process.
  */
+
 #include "caosdb/status_code.h"
 #include "caosdb/exceptions.h"
 #include <memory> // for shared_ptr, unique_ptr
@@ -35,7 +40,7 @@ namespace caosdb::transaction {
 using caosdb::StatusCode;
 using caosdb::exceptions::AuthenticationError;
 using caosdb::exceptions::ConnectionError;
-using caosdb::exceptions::GenericException;
+using caosdb::exceptions::Exception;
 using caosdb::exceptions::TransactionError;
 
 /**
@@ -43,6 +48,8 @@ using caosdb::exceptions::TransactionError;
  */
 class TransactionStatus {
 public:
+  // REFACTORING NEEDED: When you touch this code again consider writing a
+  // macro, because this is a lot of redundant code here...
   inline static auto INITIAL() -> const TransactionStatus & {
     static const TransactionStatus initial(
       StatusCode::INITIAL, caosdb::get_status_description(StatusCode::INITIAL));
@@ -61,6 +68,9 @@ public:
   }
   inline static auto RPC_ERROR(const std::string &details)
     -> const TransactionStatus {
+    // We use the GENERIC_RPC_ERROR here because we might want to add further
+    // RPC_ERROR states with different error codes (which stem from GRPC) here
+    // in the future.
     return TransactionStatus(
       StatusCode::GENERIC_RPC_ERROR,
       caosdb::get_status_description(StatusCode::GENERIC_RPC_ERROR) +
@@ -113,7 +123,7 @@ public:
     case StatusCode::GENERIC_TRANSACTION_ERROR:
       throw TransactionError(this->description);
     default:
-      throw GenericException(StatusCode::GENERIC_ERROR, this->description);
+      throw Exception(StatusCode::GENERIC_ERROR, this->description);
     }
   }
 
@@ -130,7 +140,7 @@ public:
   /**
    * Return a description of the erroneous state.
    *
-   * Returns an empty string if there is no description.
+   * No description yields an empty string.
    */
   inline auto GetDescription() const -> const std::string & {
     return this->description;
diff --git a/include/caosdb/utility.h b/include/caosdb/utility.h
index e1e306e40a82ced49ccefea45a42a9e63a2b04b9..30e21747ec4ce39493e24e10e09d7c53c7ab1308 100644
--- a/include/caosdb/utility.h
+++ b/include/caosdb/utility.h
@@ -43,8 +43,6 @@ using boost::json::value;
 
 /**
  * @brief Read a text file into a string and return the file's content.
- *
- * TODO use boost-filesystem's "load_string_file"!
  */
 inline auto load_string_file(const path &path) -> std::string {
   std::string result;
@@ -52,11 +50,13 @@ inline auto load_string_file(const path &path) -> std::string {
   return result;
 }
 
-inline auto get_env_var(const char *key, const char *fall_back) -> const
-  char * {
+/**
+ * @brief Return the environment variable KEY, or FALLBACK if it does not exist.
+ */
+inline auto get_env_var(const char *key, const char *fallback) -> const char * {
   const char *val = getenv(key);
   if (val == nullptr) {
-    return fall_back;
+    return fallback;
   } else {
     return val;
   }
@@ -64,11 +64,11 @@ inline auto get_env_var(const char *key, const char *fall_back) -> const
 
 /**
  * @brief Return the value of an environment variable or - if undefined - the
- * fall_back value.
+ * fallback value.
  */
-inline auto get_env_var(const std::string &key, const std::string &fall_back)
+inline auto get_env_var(const std::string &key, const std::string &fallback)
   -> const std::string {
-  const char *val = get_env_var(key.c_str(), fall_back.c_str());
+  const char *val = get_env_var(key.c_str(), fallback.c_str());
 
   auto const result = std::string(val);
   return result;
diff --git a/include/ccaosdb.h b/include/ccaosdb.h
index 0df5f0e085d5e012c221491ed8c78c26b4d1c807..bb62a5105db9559444f5b5d178ced583c41c9fcb 100644
--- a/include/ccaosdb.h
+++ b/include/ccaosdb.h
@@ -79,9 +79,9 @@ typedef struct {
 /**
  * Return the environment variable of the given name.
  *
- * If the environment variable is not set, return the fall_back instead.
+ * If the environment variable is not set, return the fallback instead.
  */
-const char *caosdb_utility_get_env_var(const char *name, const char *fall_back);
+const char *caosdb_utility_get_env_var(const char *name, const char *fallback);
 
 /**
  * Return a description of the status code.
diff --git a/src/caosdb/configuration.cpp b/src/caosdb/configuration.cpp
index 58a2759a997c3301b6243654386932224408b7cf..ba15dce8377627504d939965b6d38dbc4e0ca06f 100644
--- a/src/caosdb/configuration.cpp
+++ b/src/caosdb/configuration.cpp
@@ -358,7 +358,7 @@ auto ConfigurationManager::mReset() noexcept -> int {
     mClear();
     InitializeDefaults();
     return StatusCode::SUCCESS;
-  } catch (const caosdb::exceptions::GenericException &exc) {
+  } catch (const caosdb::exceptions::Exception &exc) {
     return exc.GetCode();
   } catch (const std::exception &exc) {
     CAOSDB_LOG_ERROR(logger_name)
@@ -373,7 +373,7 @@ auto ConfigurationManager::mClear() noexcept -> int {
     json_configuration = value(nullptr);
     ConnectionManager::Reset();
     return StatusCode::SUCCESS;
-  } catch (const caosdb::exceptions::GenericException &exc) {
+  } catch (const caosdb::exceptions::Exception &exc) {
     return exc.GetCode();
   } catch (const std::exception &exc) {
     CAOSDB_LOG_ERROR(logger_name)
@@ -508,6 +508,7 @@ auto ConfigurationManager::InitializeDefaults() -> int {
     mLoadSingleJSONConfiguration(*configuration_file_path);
   }
 
+  // Logging in the configuration leads to additional content.
   if (this->json_configuration.is_object() &&
       this->json_configuration.as_object().contains("logging")) {
     LoggingConfiguration logging_configuration =
diff --git a/src/caosdb/logging.cpp b/src/caosdb/logging.cpp
index 486ab846c4ce43225b9242aceb557775b9632531..3618826a5ed6061f210c393b3429b641293fccae 100644
--- a/src/caosdb/logging.cpp
+++ b/src/caosdb/logging.cpp
@@ -59,6 +59,7 @@ auto LoggingConfiguration::GetSinks() const
 
 SinkConfiguration::SinkConfiguration(std::string name, int level)
   : LevelConfiguration(level), name(std::move(name)) {}
+
 [[nodiscard]] auto SinkConfiguration::GetName() const -> const std::string & {
   return this->name;
 }
@@ -77,6 +78,7 @@ auto SinkConfiguration::Configure(boost::log::settings &settings) const
 ConsoleSinkConfiguration::ConsoleSinkConfiguration(const std::string &name,
                                                    int level)
   : SinkConfiguration(name, level) {}
+
 [[nodiscard]] auto ConsoleSinkConfiguration::GetDestination() const
   -> const std::string & {
   CAOSDB_LOG_TRACE(logger_name)
@@ -93,12 +95,14 @@ auto ConsoleSinkConfiguration::Configure(boost::log::settings &settings) const
 
 FileSinkConfiguration::FileSinkConfiguration(const std::string &name, int level)
   : SinkConfiguration(name, level) {}
+
 [[nodiscard]] auto FileSinkConfiguration::GetDestination() const
   -> const std::string & {
   CAOSDB_LOG_TRACE(logger_name)
     << "Enter FileSinkConfiguration::GetDestination()";
   return this->destination;
 }
+
 auto FileSinkConfiguration::SetDirectory(const std::string &directory) -> void {
   this->directory = std::string(directory);
 }
@@ -114,11 +118,13 @@ auto FileSinkConfiguration::Configure(boost::log::settings &settings) const
 SyslogSinkConfiguration::SyslogSinkConfiguration(const std::string &name,
                                                  int level)
   : SinkConfiguration(name, level) {}
+
 [[nodiscard]] auto SyslogSinkConfiguration::GetDestination() const
   -> const std::string & {
   return this->destination;
 }
 
+// Called if no custom logging settings are specified.
 auto initialize_logging_defaults() -> int {
   // first: turn everything off
   boost::log::settings off_settings;
@@ -148,6 +154,7 @@ auto initialize_logging_defaults() -> int {
   return 0;
 }
 
+// Called if custom logging settings are specified.
 auto initialize_logging(const LoggingConfiguration &configuration) -> void {
   boost::log::settings new_settings;
 
diff --git a/src/ccaosdb.cpp b/src/ccaosdb.cpp
index d21b3bd0aafd9c95488658574ef6c03a044996c1..5f89af16ed3da4de89df1d83e1de0bdecb79592f 100644
--- a/src/ccaosdb.cpp
+++ b/src/ccaosdb.cpp
@@ -56,9 +56,8 @@ const char *caosdb_constants_COMPATIBLE_SERVER_VERSION_PRE_RELEASE() {
   return caosdb::COMPATIBLE_SERVER_VERSION_PRE_RELEASE;
 }
 
-const char *caosdb_utility_get_env_var(const char *name,
-                                       const char *fall_back) {
-  return caosdb::utility::get_env_var(name, fall_back);
+const char *caosdb_utility_get_env_var(const char *name, const char *fallback) {
+  return caosdb::utility::get_env_var(name, fallback);
 }
 
 const char *caosdb_get_status_description(int code) {