diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
index f19963c..a90588e 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
@@ -166,6 +166,8 @@
   private static final boolean DISABLE_FEATURE_MAP_CHECKS = OMPlatform.INSTANCE
       .isProperty("org.eclipse.emf.cdo.internal.server.Repository.DISABLE_FEATURE_MAP_CHECKS");
 
+  private static final Map<String, Repository> REPOSITORIES = new HashMap<>();
+
   private String name;
 
   private String uuid;
@@ -2739,11 +2741,24 @@
 
     LifecycleUtil.activate(lockingManager); // Needs an initialized main branch / branch manager
     setPostActivateState();
+
+    synchronized (REPOSITORIES)
+    {
+      if (REPOSITORIES.putIfAbsent(uuid, this) != null)
+      {
+        OM.LOG.warn("Attempt to register repository with duplicate UUID: " + uuid);
+      }
+    }
   }
 
   @Override
   protected void doDeactivate() throws Exception
   {
+    synchronized (REPOSITORIES)
+    {
+      REPOSITORIES.remove(uuid);
+    }
+
     LifecycleUtil.deactivate(unitManager);
     LifecycleUtil.deactivate(lockingManager);
     LifecycleUtil.deactivate(queryHandlerProvider);
@@ -2758,6 +2773,14 @@
     super.doDeactivate();
   }
 
+  public static Repository get(String uuid)
+  {
+    synchronized (REPOSITORIES)
+    {
+      return REPOSITORIES.get(uuid);
+    }
+  }
+
   /**
    * @author Eike Stepper
    * @since 2.0
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/ServerCDOView.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/ServerCDOView.java
index a4d1eb0..3579f9a 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/ServerCDOView.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/ServerCDOView.java
@@ -148,6 +148,11 @@
     return session.getInternalSession();
   }
 
+  public CDORevisionProvider getRevisionProvider()
+  {
+    return revisionProvider;
+  }
+
   @Override
   public ExecutorService getExecutorService()
   {
@@ -604,7 +609,7 @@
   /**
    * @author Eike Stepper
    */
-  private final class ServerCDOSession extends PlatformObject implements InternalCDOSession, CDORepositoryInfo, org.eclipse.emf.cdo.session.CDOSession.Options
+  public final class ServerCDOSession extends PlatformObject implements InternalCDOSession, CDORepositoryInfo, org.eclipse.emf.cdo.session.CDOSession.Options
   {
     private final IRegistry<String, Object> properties = new HashMapRegistry.AutoCommit<>();
 
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerUtil.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerUtil.java
index ba38623..54396e3 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerUtil.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerUtil.java
@@ -17,11 +17,13 @@
 import org.eclipse.emf.cdo.common.revision.CDORevisionProvider;
 import org.eclipse.emf.cdo.internal.server.Repository;
 import org.eclipse.emf.cdo.internal.server.ServerCDOView;
+import org.eclipse.emf.cdo.internal.server.ServerCDOView.ServerCDOSession;
 import org.eclipse.emf.cdo.internal.server.SessionManager;
 import org.eclipse.emf.cdo.internal.server.bundle.OM;
 import org.eclipse.emf.cdo.internal.server.syncing.FailoverParticipant;
 import org.eclipse.emf.cdo.internal.server.syncing.OfflineClone;
 import org.eclipse.emf.cdo.internal.server.syncing.RepositorySynchronizer;
+import org.eclipse.emf.cdo.session.CDOSession;
 import org.eclipse.emf.cdo.session.CDOSessionConfigurationFactory;
 import org.eclipse.emf.cdo.spi.common.branch.CDOBranchUtil;
 import org.eclipse.emf.cdo.spi.common.revision.ManagedRevisionProvider;
@@ -30,6 +32,7 @@
 import org.eclipse.emf.cdo.spi.server.InternalSession;
 import org.eclipse.emf.cdo.spi.server.InternalStore;
 import org.eclipse.emf.cdo.spi.server.RepositoryFactory;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
 import org.eclipse.emf.cdo.view.CDOView;
 
 import org.eclipse.net4j.util.ObjectUtil;
@@ -54,6 +57,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.Callable;
 
 /**
  * Various static methods that may help with CDO {@link IRepository repositories} and server-side {@link CDOView views}.
@@ -66,44 +70,6 @@
   {
   }
 
-  // /**
-  // * @since 4.2
-  // */
-  // public static CDOView openView(ISession session, CDOBranchPoint branchPoint, CDORevisionProvider revisionProvider)
-  // {
-  // return new ServerCDOView((InternalSession)session, branchPoint, revisionProvider);
-  // }
-  //
-  // /**
-  // * @since 4.2
-  // */
-  // public static CDOView openView(ISession session, CDOBranchPoint branchPoint)
-  // {
-  // CDORevisionManager revisionManager = session.getManager().getRepository().getRevisionManager();
-  // CDORevisionProvider revisionProvider = new ManagedRevisionProvider(revisionManager, branchPoint);
-  // return new ServerCDOView((InternalSession)session, branchPoint, revisionProvider);
-  // }
-  //
-  // /**
-  // * @since 4.2
-  // */
-  // public static CDOView openView(IView view)
-  // {
-  // ISession session = view.getSession();
-  // CDOBranchPoint branchPoint = CDOBranchUtil.copyBranchPoint(view);
-  // return openView(session, branchPoint, view);
-  // }
-  //
-  // /**
-  // * @since 4.2
-  // */
-  // public static CDOView openView(IStoreAccessor.CommitContext commitContext)
-  // {
-  // ISession session = commitContext.getTransaction().getSession();
-  // CDOBranchPoint branchPoint = commitContext.getBranchPoint();
-  // return openView(session, branchPoint, commitContext);
-  // }
-
   /**
    * @since 4.2
    */
@@ -183,6 +149,43 @@
   }
 
   /**
+   * @since 4.13
+   */
+  public static ITransaction getServerTransaction(CDOTransaction transaction)
+  {
+    IView serverView = getServerView(transaction);
+    if (serverView instanceof ITransaction)
+    {
+      return (ITransaction)serverView;
+    }
+
+    return null;
+  }
+
+  /**
+   * @since 4.13
+   */
+  public static IView getServerView(CDOView view)
+  {
+    if (view instanceof ServerCDOView)
+    {
+      CDORevisionProvider revisionProvider = ((ServerCDOView)view).getRevisionProvider();
+      if (revisionProvider instanceof IView)
+      {
+        return (IView)revisionProvider;
+      }
+    }
+
+    ISession session = getServerSession(view);
+    if (session != null)
+    {
+      return session.getView(view.getViewID());
+    }
+
+    return null;
+  }
+
+  /**
    * @since 4.11
    */
   public static ISession getServerSession(CDOView view)
@@ -192,6 +195,25 @@
       return ((ServerCDOView)view).getServerSession();
     }
 
+    return getServerSession(view.getSession());
+  }
+
+  /**
+   * @since 4.13
+   */
+  public static ISession getServerSession(CDOSession session)
+  {
+    if (session instanceof ServerCDOSession)
+    {
+      return ((ServerCDOSession)session).getInternalSession();
+    }
+
+    IRepository repository = getRepository(session);
+    if (repository != null)
+    {
+      return repository.getSessionManager().getSession(session.getSessionID());
+    }
+
     return null;
   }
 
@@ -302,6 +324,23 @@
     return RepositoryFactory.get(container, name);
   }
 
+  /**
+   * @since 4.13
+   */
+  public static IRepository getRepository(String uuid)
+  {
+    return Repository.get(uuid);
+  }
+
+  /**
+   * @since 4.13
+   */
+  public static IRepository getRepository(CDOSession session)
+  {
+    String uuid = session.getRepositoryInfo().getUUID();
+    return getRepository(uuid);
+  }
+
   public static Element getRepositoryConfig(String repositoryName) throws ParserConfigurationException, SAXException, IOException
   {
     File configFile = OMPlatform.INSTANCE.getConfigFile("cdo-server.xml"); //$NON-NLS-1$
@@ -328,6 +367,40 @@
   }
 
   /**
+   * @since 4.13
+   */
+  public static void run(ISession context, Runnable runnable)
+  {
+    StoreThreadLocal.wrap(context, runnable).run();
+  }
+
+  /**
+   * @since 4.13
+   */
+  public static void run(CDOSession context, Runnable runnable)
+  {
+    ISession serverSession = getServerSession(context);
+    run(serverSession, runnable);
+  }
+
+  /**
+   * @since 4.13
+   */
+  public static <T> T call(ISession context, Callable<T> callable) throws Exception
+  {
+    return StoreThreadLocal.wrap(context, callable).call();
+  }
+
+  /**
+   * @since 4.13
+   */
+  public static <T> T call(CDOSession context, Callable<T> callable) throws Exception
+  {
+    ISession serverSession = getServerSession(context);
+    return call(serverSession, callable);
+  }
+
+  /**
    * An abstract {@link IRepository.ReadAccessHandler read-access handler} that grants or denies access to single
    * {@link CDORevision revisions}.
    *
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/ISession.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/ISession.java
index 5256b86..9c3fb17 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/ISession.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/ISession.java
@@ -50,6 +50,18 @@
   public boolean isSubscribed();
 
   /**
+   * @since 4.13
+   */
+  @Override
+  public IView[] getViews();
+
+  /**
+   * @since 4.13
+   */
+  @Override
+  public IView getView(int viewID);
+
+  /**
    * @since 3.0
    */
   public IView openView(int viewID, CDOBranchPoint branchPoint);
