diff --git a/caosdb-proto b/caosdb-proto
index 26b47c4c875ab6f664e83ae332434550ea12d663..d58c9a81babf25c374b6a0db8c76b162855c06e9 160000
--- a/caosdb-proto
+++ b/caosdb-proto
@@ -1 +1 @@
-Subproject commit 26b47c4c875ab6f664e83ae332434550ea12d663
+Subproject commit d58c9a81babf25c374b6a0db8c76b162855c06e9
diff --git a/src/main/java/org/caosdb/server/transaction/ListRoles.java b/src/main/java/org/caosdb/server/database/backend/transaction/ListRoles.java
similarity index 89%
rename from src/main/java/org/caosdb/server/transaction/ListRoles.java
rename to src/main/java/org/caosdb/server/database/backend/transaction/ListRoles.java
index 2dcad4600953b39b9c3f56114dac0a3a6bfd0fa8..f2f0cc9fab0235f76148d535b9424f71dda6f281 100644
--- a/src/main/java/org/caosdb/server/transaction/ListRoles.java
+++ b/src/main/java/org/caosdb/server/database/backend/transaction/ListRoles.java
@@ -1,4 +1,4 @@
-package org.caosdb.server.transaction;
+package org.caosdb.server.database.backend.transaction;
 
 import java.util.List;
 import org.caosdb.server.accessControl.Role;
diff --git a/src/main/java/org/caosdb/server/grpc/AccessControlManagementServiceImpl.java b/src/main/java/org/caosdb/server/grpc/AccessControlManagementServiceImpl.java
index fa664a7358f2f0910ced07e3efa8e545137a5fa3..5987b28936e4ea6b4444fad6fe73fe7bd2a71edc 100644
--- a/src/main/java/org/caosdb/server/grpc/AccessControlManagementServiceImpl.java
+++ b/src/main/java/org/caosdb/server/grpc/AccessControlManagementServiceImpl.java
@@ -3,33 +3,24 @@ package org.caosdb.server.grpc;
 import io.grpc.stub.StreamObserver;
 import java.util.List;
 import org.caosdb.api.acm.v1alpha1.AccessControlManagementServiceGrpc.AccessControlManagementServiceImplBase;
+import org.caosdb.api.acm.v1alpha1.CreateSingleRoleRequest;
+import org.caosdb.api.acm.v1alpha1.CreateSingleRoleResponse;
 import org.caosdb.api.acm.v1alpha1.ListRolesRequest;
 import org.caosdb.api.acm.v1alpha1.ListRolesResponse;
 import org.caosdb.server.accessControl.Role;
+import org.caosdb.server.transaction.InsertRoleTransaction;
 import org.caosdb.server.transaction.ListRolesTransaction;
 
 public class AccessControlManagementServiceImpl extends AccessControlManagementServiceImplBase {
 
-  @Override
-  public void listRoles(
-      ListRolesRequest request, StreamObserver<ListRolesResponse> responseObserver) {
-    try {
-      final ListRolesResponse response = listRolesTransaction(request);
-      responseObserver.onNext(response);
-      responseObserver.onCompleted();
+  /////////////////////////////////// CONVERTERS
 
-    } catch (final Exception e) {
-      e.printStackTrace();
-      responseObserver.onError(e);
-    }
-  }
-
-  private ListRolesResponse listRolesTransaction(ListRolesRequest request) throws Exception {
-    ListRolesTransaction transaction = new ListRolesTransaction();
-    transaction.execute();
-    List<Role> roles = transaction.getRoles();
+  private Role convert(org.caosdb.api.acm.v1alpha1.Role role) {
+    Role result = new Role();
 
-    return convert(roles);
+    result.name = role.getName();
+    result.description = role.getDescription();
+    return result;
   }
 
   private ListRolesResponse convert(List<Role> roles) {
@@ -49,4 +40,55 @@ public class AccessControlManagementServiceImpl extends AccessControlManagementS
 
     return result;
   }
+
+  ////////////////////////////////////// RPC Methods (Implementation)
+
+  ////////////////// ... for roles
+
+  private ListRolesResponse listRolesTransaction(ListRolesRequest request) throws Exception {
+    ListRolesTransaction transaction = new ListRolesTransaction();
+    transaction.execute();
+    List<Role> roles = transaction.getRoles();
+
+    return convert(roles);
+  }
+
+  private CreateSingleRoleResponse createSingleRoleTransaction(CreateSingleRoleRequest request)
+      throws Exception {
+    Role role = convert(request.getRole());
+    InsertRoleTransaction transaction = new InsertRoleTransaction(role);
+    transaction.execute();
+
+    return CreateSingleRoleResponse.newBuilder().build();
+  }
+
+  ///////////////////////////////////// RPC Methods (API)
+
+  @Override
+  public void listRoles(
+      ListRolesRequest request, StreamObserver<ListRolesResponse> responseObserver) {
+    try {
+      final ListRolesResponse response = listRolesTransaction(request);
+      responseObserver.onNext(response);
+      responseObserver.onCompleted();
+
+    } catch (final Exception e) {
+      e.printStackTrace();
+      responseObserver.onError(e);
+    }
+  }
+
+  @Override
+  public void createSingleRole(
+      CreateSingleRoleRequest request, StreamObserver<CreateSingleRoleResponse> responseObserver) {
+    try {
+      final CreateSingleRoleResponse response = createSingleRoleTransaction(request);
+      responseObserver.onNext(response);
+      responseObserver.onCompleted();
+
+    } catch (final Exception e) {
+      e.printStackTrace();
+      responseObserver.onError(e);
+    }
+  }
 }
diff --git a/src/main/java/org/caosdb/server/grpc/GRPCServer.java b/src/main/java/org/caosdb/server/grpc/GRPCServer.java
index 1fd965047eff71db02bdfd6394386d4625ca3703..ff939976d2ea1ec6999770c60b8348f98be58ad1 100644
--- a/src/main/java/org/caosdb/server/grpc/GRPCServer.java
+++ b/src/main/java/org/caosdb/server/grpc/GRPCServer.java
@@ -26,6 +26,7 @@ import io.grpc.netty.GrpcSslContexts;
 import io.grpc.netty.NettyServerBuilder;
 import io.grpcweb.GrpcPortNumRelay;
 import io.grpcweb.JettyWebserverForGrpcwebTraffic;
+import io.grpcweb.ServiceToClassMapping;
 import io.netty.handler.ssl.ApplicationProtocolConfig;
 import io.netty.handler.ssl.ApplicationProtocolConfig.Protocol;
 import io.netty.handler.ssl.ApplicationProtocolConfig.SelectedListenerFailureBehavior;
@@ -44,6 +45,10 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 import javax.net.ssl.KeyManagerFactory;
+import org.caosdb.api.acm.v1alpha1.AccessControlManagementServiceGrpc;
+import org.caosdb.api.entity.v1alpha1.EntityTransactionServiceGrpc;
+import org.caosdb.api.entity.v1alpha1.FileTransmissionServiceGrpc;
+import org.caosdb.api.info.v1alpha1.GeneralInfoServiceGrpc;
 import org.caosdb.server.CaosDBServer;
 import org.caosdb.server.ServerProperties;
 import org.slf4j.Logger;
@@ -116,12 +121,27 @@ public class GRPCServer {
   private List<ServerServiceDefinition> getEnabledServices() {
     final List<ServerServiceDefinition> services = new LinkedList<>();
 
+    // Add mapping from the service name to the service class (for the grpc-web proxy)
+    ServiceToClassMapping.put(
+        AccessControlManagementServiceGrpc.SERVICE_NAME, AccessControlManagementServiceGrpc.class);
+    final AccessControlManagementServiceImpl accessControlManagementService =
+        new AccessControlManagementServiceImpl();
+    services.add(ServerInterceptors.intercept(accessControlManagementService, authInterceptor));
+
+    // Add mapping from the service name to the service class (for the grpc-web proxy)
+    ServiceToClassMapping.put(GeneralInfoServiceGrpc.SERVICE_NAME, GeneralInfoServiceGrpc.class);
     final GeneralInfoServiceImpl generalInfoService = new GeneralInfoServiceImpl();
     services.add(ServerInterceptors.intercept(generalInfoService, authInterceptor));
 
+    // Add mapping from the service name to the service class (for the grpc-web proxy)
+    ServiceToClassMapping.put(
+        FileTransmissionServiceGrpc.SERVICE_NAME, FileTransmissionServiceGrpc.class);
     final FileTransmissionServiceImpl fileTransmissionService = new FileTransmissionServiceImpl();
     services.add(ServerInterceptors.intercept(fileTransmissionService, authInterceptor));
 
+    // Add mapping from the service name to the service class (for the grpc-web proxy)
+    ServiceToClassMapping.put(
+        EntityTransactionServiceGrpc.SERVICE_NAME, EntityTransactionServiceGrpc.class);
     final EntityTransactionServiceImpl entityTransactionService =
         new EntityTransactionServiceImpl(fileTransmissionService);
     services.add(ServerInterceptors.intercept(entityTransactionService, authInterceptor));
@@ -194,18 +214,19 @@ public class GRPCServer {
       CaosDBServer.addPreShutdownHook(new ServerStopper(server));
       server.start();
       logger.info("Started GRPC (HTTP) on port {}", port_http);
+
+      // Start the grpc-web proxy on grpc-web-port.
+      (new JettyWebserverForGrpcwebTraffic(9443)).start();
+
+      // grpc-web proxy needs to know the grpc-port# so it could connect to the grpc service.
+      GrpcPortNumRelay.setGrpcPortNum(port_http);
+
     } else if (!started) {
       logger.warn(
           "No GRPC Server has been started. Please configure {} or {} to do so.",
           ServerProperties.KEY_GRPC_SERVER_PORT_HTTP,
           ServerProperties.KEY_GRPC_SERVER_PORT_HTTPS);
     }
-
-    // Start the grpc-web proxy on grpc-web-port.
-    (new JettyWebserverForGrpcwebTraffic(9443)).start();
-
-    // grpc-web proxy needs to know the grpc-port# so it could connect to the grpc service.
-    GrpcPortNumRelay.setGrpcPortNum(8080);
   }
 
   private static class ServerStopper implements Runnable {
diff --git a/src/main/java/org/caosdb/server/grpc/GeneralInfoServiceImpl.java b/src/main/java/org/caosdb/server/grpc/GeneralInfoServiceImpl.java
index dfd10ac86090de97a6151e330ade846c1de6273e..4caa160c18b2f72310fdbe8ed05f221166b51145 100644
--- a/src/main/java/org/caosdb/server/grpc/GeneralInfoServiceImpl.java
+++ b/src/main/java/org/caosdb/server/grpc/GeneralInfoServiceImpl.java
@@ -21,11 +21,16 @@ package org.caosdb.server.grpc;
 
 import io.grpc.stub.StreamObserver;
 import org.caosdb.api.info.v1alpha1.GeneralInfoServiceGrpc.GeneralInfoServiceImplBase;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.subject.Subject;
+import org.caosdb.api.info.v1alpha1.GetSessionInfoRequest;
+import org.caosdb.api.info.v1alpha1.GetSessionInfoResponse;
 import org.caosdb.api.info.v1alpha1.GetVersionInfoRequest;
 import org.caosdb.api.info.v1alpha1.GetVersionInfoResponse;
 import org.caosdb.api.info.v1alpha1.VersionInfo;
 import org.caosdb.server.CaosDBServer;
 import org.caosdb.server.ServerProperties;
+import org.caosdb.server.accessControl.Principal;
 
 /**
  * Implementation of the GeneralInfoService.
@@ -65,4 +70,20 @@ public class GeneralInfoServiceImpl extends GeneralInfoServiceImplBase {
     responseObserver.onNext(response);
     responseObserver.onCompleted();
   }
+  
+  @Override
+  public void getSessionInfo(GetSessionInfoRequest request,
+      StreamObserver<GetSessionInfoResponse> responseObserver) {
+    final GetSessionInfoResponse.Builder response =
+        GetSessionInfoResponse.newBuilder();
+    
+    Subject user = SecurityUtils.getSubject();
+    Principal principal = (Principal) user.getPrincipal();
+
+    response.setUsername(principal.getUsername());
+    response.setRealm(principal.getRealm());
+
+    responseObserver.onNext(response.build());
+    responseObserver.onCompleted();
+  }
 }