diff --git a/include/caosdb/connection.h b/include/caosdb/connection.h
index fd0627bc3295b1fd01b8999466b273b91dd281d4..de72d320932f78041c5a8261407f0a6380b8286e 100644
--- a/include/caosdb/connection.h
+++ b/include/caosdb/connection.h
@@ -111,18 +111,18 @@ public:
    */
   [[nodiscard]] auto ListRoles() const -> std::vector<Role>;
 
-  [[nodiscard]] auto RetrieveSingleRole(std::string name) const -> Role;
+  [[nodiscard]] auto RetrieveSingleRole(const std::string &name) const -> Role;
 
   auto CreateSingleRole(const Role &role) const -> void;
 
-  auto DeleteSingleRole(std::string name) const -> void;
+  auto DeleteSingleRole(const std::string &name) const -> void;
 
   /**
    * Retrieve a single user.
    */
   // TODO(tf) find a way to deal with this:
   // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)
-  [[nodiscard]] auto RetrieveSingleUser(std::string realm, std::string name) const -> User;
+  [[nodiscard]] auto RetrieveSingleUser(const std::string &realm, const std::string &name) const -> User;
 
   /**
    * Create a new user.
@@ -134,7 +134,7 @@ public:
    */
   // TODO(tf) find a way to deal with this:
   // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)
-  auto DeleteSingleUser(std::string realm, std::string name) const -> void;
+  auto DeleteSingleUser(const std::string &realm, const std::string &name) const -> void;
 #endif
 
 private:
diff --git a/src/caosdb/connection.cpp b/src/caosdb/connection.cpp
index 25524b88f67f899a757419a7a74b1185898e78b6..bc921760a14f5b9a643b27374d552f2e31601c44 100644
--- a/src/caosdb/connection.cpp
+++ b/src/caosdb/connection.cpp
@@ -128,7 +128,7 @@ auto Connection::RetrieveVersionInfo() const -> const VersionInfo & {
 }
 
 #ifdef BUILD_ACM
-[[nodiscard]] auto Connection::RetrieveSingleRole(std::string name) const -> Role {
+[[nodiscard]] auto Connection::RetrieveSingleRole(const std::string &name) const -> Role {
   RetrieveSingleRoleRequest request;
   request.set_name(name);
   RetrieveSingleRoleResponse response;
@@ -156,7 +156,7 @@ auto Connection::RetrieveVersionInfo() const -> const VersionInfo & {
   return Role(std::make_unique<RoleImpl>(role));
 }
 
-auto Connection::DeleteSingleRole(std::string name) const -> void {
+auto Connection::DeleteSingleRole(const std::string &name) const -> void {
   DeleteSingleRoleRequest request;
   request.set_name(name);
   DeleteSingleRoleResponse response;
@@ -211,7 +211,7 @@ auto Connection::CreateSingleRole(const Role &role) const -> void {
 
 // TODO(tf) find a way to deal with this:
 // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)
-[[nodiscard]] auto Connection::RetrieveSingleUser(std::string realm, std::string name) const
+[[nodiscard]] auto Connection::RetrieveSingleUser(const std::string &realm, const std::string &name) const
   -> User {
   RetrieveSingleUserRequest request;
   request.set_name(name);
@@ -243,7 +243,7 @@ auto Connection::CreateSingleRole(const Role &role) const -> void {
 
 // TODO(tf) find a way to deal with this:
 // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)
-auto Connection::DeleteSingleUser(std::string realm, std::string name) const -> void {
+auto Connection::DeleteSingleUser(const std::string &realm, const std::string &name) const -> void {
   DeleteSingleUserRequest request;
   request.set_name(name);
   request.set_realm(realm);
diff --git a/src/cxxcaosdbcli.cpp b/src/cxxcaosdbcli.cpp
index 1ea31c4c10336b07291a5a8ef99780452cf308c2..201875812efdd7e06d6b8b3391ff6df7cdd56999 100644
--- a/src/cxxcaosdbcli.cpp
+++ b/src/cxxcaosdbcli.cpp
@@ -21,6 +21,9 @@
  */
 
 // A simple caosdb client
+#ifdef BUILD_ACM
+#include "caosdb/acm/role.h"                                // for Role
+#endif
 #include "caosdb/connection.h"         // for Connection, ConnectionManager
 #include "caosdb/constants.h"          // for LIBCAOSDB_VERSION_MINOR, LIBCAOSDB_V...
 #include "caosdb/entity.h"             // for Entity
@@ -34,6 +37,8 @@
 #include <iostream>                    // for operator<<, basic_ostream, basic_ost...
 #include <memory>                      // for unique_ptr, allocator, __shared_ptr_...
 #include <string>                      // for operator<<, char_traits
+#include <vector>                                           // for vector
+
 
 const auto logger_name = "libcaosdb";
 
@@ -41,8 +46,6 @@ using boost::program_options::bool_switch;
 using boost::program_options::command_line_parser;
 using boost::program_options::notify;
 using boost::program_options::options_description;
-using boost::program_options::parse_command_line;
-using boost::program_options::positional_options_description;
 using boost::program_options::store;
 using boost::program_options::value;
 using boost::program_options::variables_map;
@@ -70,7 +73,7 @@ auto test_connection() -> void {
             << std::endl;
 }
 
-auto retrieve_entity_by_id(std::string id) -> void {
+auto retrieve_entity_by_id(const std::string  &id) -> void {
   std::cout << "Retrieve entity " << id << std::endl;
   const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection();
   auto transaction(connection->CreateTransaction());
@@ -85,7 +88,7 @@ auto retrieve_entity_by_id(std::string id) -> void {
   }
 }
 
-auto execute_query(std::string query) -> void {
+auto execute_query(const std::string &query) -> void {
   std::cout << "Execute query:\n" << query << std::endl;
   const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection();
   auto q_transaction(connection->CreateTransaction());
@@ -105,25 +108,25 @@ auto list_roles() -> void {
   std::cout << "Known roles:" << std::endl;
   const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection();
   auto roles = connection->ListRoles();
-  for (const auto role : roles) {
+  for (const auto &role : roles) {
     std::cout << role.ToString() << std::endl;
   }
 }
 
-auto retrieve_role(std::string name) {
+auto retrieve_role(const std::string &name) {
   const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection();
   auto role = connection->RetrieveSingleRole(name);
   std::cout << role.ToString() << std::endl;
 }
 
-auto create_role(std::string name) {
+auto create_role(const std::string &name) {
   const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection();
   Role role(name);
-  connection->CreateSingleRole(role);
+  connection->CreateSingleRole(name);
   std::cout << "OK" << std::endl;
 }
 
-auto delete_role(std::string name) {
+auto delete_role(const std::string &name) {
   const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection();
   connection->DeleteSingleRole(name);
   std::cout << "OK" << std::endl;
@@ -164,16 +167,16 @@ auto main(int argc, const char *argv[]) -> int {
     if (vm.count("help")) {
       std::cout << desc << std::endl;
     } else if (vm["version"].as<bool>()) {
-    } else if (vm.count("test-connection")) {
+    } else if (vm.count("test-connection") != 0U) {
       test_connection();
 #ifdef BUILD_ACM
-    } else if (vm.count("list-roles")) {
+    } else if (vm.count("list-roles") != 0U) {
       list_roles();
-    } else if (vm.count("retrieve-role")) {
-    } else if (vm.count("retrieve")) {
-    } else if (vm.count("create-role")) {
-    } else if (vm.count("delete-role")) {
-    } else if (vm.count("execute-query")) {
+    } else if (vm.count("retrieve-role") != 0U) {
+    } else if (vm.count("retrieve")) != 0U {
+    } else if (vm.count("create-role") != 0U) {
+    } else if (vm.count("delete-role") != 0U) {
+    } else if (vm.count("execute-query") != 0U) {
 #endif
     } else {
       print_version(true);