diff --git a/jspwiki-api/src/main/java/org/apache/wiki/api/engine/RenderApi.java b/jspwiki-api/src/main/java/org/apache/wiki/api/engine/RenderApi.java
new file mode 100644
index 0000000..f45b0d5
--- /dev/null
+++ b/jspwiki-api/src/main/java/org/apache/wiki/api/engine/RenderApi.java
@@ -0,0 +1,40 @@
+/*
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+ */
+package org.apache.wiki.api.engine;
+
+import org.apache.wiki.api.core.Context;
+
+
+/**
+ * <p>Rendering routines that all JSPWiki public API implementations should provide.</p>
+ *
+ * <p>A {@code RenderApi} should be obtained from {@code Engine#getManager( RenderApi.class )}.</p>
+ */
+public interface RenderApi {
+
+    /**
+     *  Converts raw page data to HTML.
+     *
+     *  @param pagedata Raw page data to convert to HTML
+     *  @param context  The WikiContext in which the page is to be rendered
+     *  @return Rendered page text
+     */
+    String textToHTML( Context context, String pagedata );
+
+}
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java b/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java
index 478bf6a..4780b90 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java
@@ -410,7 +410,10 @@
     @Override
     @SuppressWarnings( "unchecked" )
     public < T > T getManager( final Class< T > manager ) {
-        return ( T )managers.get( manager );
+        return ( T )managers.entrySet().stream()
+                                       .filter( e -> manager.isAssignableFrom( e.getKey() ) )
+                                       .map( Map.Entry::getValue )
+                                       .findFirst().orElse( null );
     }
 
     /** {@inheritDoc} */
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/render/RenderingManager.java b/jspwiki-main/src/main/java/org/apache/wiki/render/RenderingManager.java
index 36ecc32..48323dc 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/render/RenderingManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/render/RenderingManager.java
@@ -23,6 +23,7 @@
 import org.apache.wiki.api.core.Context;
 import org.apache.wiki.api.core.Page;
 import org.apache.wiki.api.engine.Initializable;
+import org.apache.wiki.api.engine.RenderApi;
 import org.apache.wiki.api.providers.PageProvider;
 import org.apache.wiki.event.WikiEventListener;
 import org.apache.wiki.modules.InternalModule;
@@ -42,7 +43,7 @@
  *
  *  @since  2.4
  */
-public interface RenderingManager extends WikiEventListener, InternalModule, Initializable {
+public interface RenderingManager extends RenderApi, WikiEventListener, InternalModule, Initializable {
 
     /** markup parser property. */
     String PROP_PARSER = "jspwiki.renderingManager.markupParser";
@@ -179,15 +180,6 @@
     }
 
     /**
-     *  Converts raw page data to HTML.
-     *
-     *  @param pagedata Raw page data to convert to HTML
-     *  @param context  The WikiContext in which the page is to be rendered
-     *  @return Rendered page text
-     */
-    String textToHTML( Context context, String pagedata );
-
-    /**
      *  Helper method for doing the HTML translation.
      *
      *  @param context The WikiContext in which to do the conversion
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/WikiEngineTest.java b/jspwiki-main/src/test/java/org/apache/wiki/WikiEngineTest.java
index dcfcec5..66fe532 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/WikiEngineTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/WikiEngineTest.java
@@ -23,6 +23,7 @@
 import org.apache.wiki.api.core.Attachment;
 import org.apache.wiki.api.core.Context;
 import org.apache.wiki.api.core.Page;
+import org.apache.wiki.api.engine.RenderApi;
 import org.apache.wiki.api.spi.Wiki;
 import org.apache.wiki.attachment.AttachmentManager;
 import org.apache.wiki.content.PageRenamer;
@@ -330,10 +331,13 @@
 
     @Test
     public void testGetManagers() {
+        Assertions.assertNull( m_engine.getManager( String.class ) );
+        Assertions.assertNotNull( m_engine.getManager( RenderApi.class ) );
         Assertions.assertNotNull( m_engine.getManager( PageManager.class ) );
-        Assertions.assertNull( m_engine.getManager( ModuleManager.class ) );
+        Assertions.assertNotNull( m_engine.getManager( ModuleManager.class ) );
 
         Assertions.assertEquals( 0, m_engine.getManagers( String.class ).size() );
+        Assertions.assertEquals( 1, m_engine.getManagers( RenderApi.class ).size() );
         Assertions.assertEquals( 1, m_engine.getManagers( PageManager.class ).size() );
         Assertions.assertEquals( 4, m_engine.getManagers( ModuleManager.class ).size() );
     }
