diff --git a/include/caosdb/acm/user.h b/include/caosdb/acm/user.h
index 2310bd2195186cf1237d59593b26369d01f2baa7..9c1ae91ec9451c7d7a33b4b209646676fa2d7eb0 100644
--- a/include/caosdb/acm/user.h
+++ b/include/caosdb/acm/user.h
@@ -40,30 +40,96 @@ class Connection;
 
 namespace caosdb::acm {
 
+/**
+ * The UserImpl class is the delegate of the User class. It hides the
+ * implementation details from the clients.
+ */
 class UserImpl;
 
+/**
+ * The User class is a delegator. The actual data is stored in a wrapped
+ * UserImpl object.
+ */
 class User {
 public:
+  /**
+   * Default constructor.
+   *
+   * Initialize a user without any name, realm, password...
+   */
   User();
+  /**
+   * Constructor. Initialize a user in the given realm with the given name.
+   */
   explicit User(std::string realm, std::string name);
+  /**
+   * Constructor. Initialize a user with the given name.
+   */
   explicit User(std::string name);
-  explicit User(std::unique_ptr<UserImpl> wrapped);
+  /**
+   * Copy constructor.
+   */
   User(const User &user);
+  /**
+   * Move constructor.
+   *
+   * The moved-from user is empty, but still usable.
+   */
   User(User &&user) noexcept;
+  /**
+   * Copy assignment.
+   */
   auto operator=(const User &user) -> User &;
+  /**
+   * Move assignment.
+   *
+   * The moved-from user is empty, but still usable.
+   */
   auto operator=(User &&user) noexcept -> User &;
+  /**
+   * Dtor.
+   */
   ~User();
+
+  /**
+   * Return a string representation of this user.
+   */
   auto ToString() const -> std::string;
+  /**
+   * Return the name of this user or the empty string.
+   */
   [[nodiscard]] auto GetName() const -> const std::string &;
+  /**
+   * Set the name of this user.
+   */
   auto SetName(const std::string &name) -> void;
+  /**
+   * Return the realm of this user or the empty.
+   */
   [[nodiscard]] auto GetRealm() const -> const std::string &;
+  /**
+   * Set the realm of this user.
+   */
   auto SetRealm(const std::string &realm) -> void;
+  /**
+   * Return the password of this user or the empty string.
+   */
   [[nodiscard]] auto GetPassword() const -> const std::string &;
+  /**
+   * Set the password of this user.
+   */
   auto SetPassword(const std::string &password) -> void;
 
   friend class caosdb::connection::Connection;
 
 private:
+  /**
+   * Constructor. Create a user object from the given UserImpl delegate.
+   */
+  explicit User(std::unique_ptr<UserImpl> wrapped);
+  /**
+   * The UserImpl delegate.
+   */
   std::unique_ptr<UserImpl> wrapped;
 };