diff --git a/jspwiki-main/src/main/java/org/apache/wiki/api/plugin/WikiPlugin.java b/jspwiki-210-adapters/src/main/java/org/apache/wiki/api/plugin/WikiPlugin.java
similarity index 100%
rename from jspwiki-main/src/main/java/org/apache/wiki/api/plugin/WikiPlugin.java
rename to jspwiki-210-adapters/src/main/java/org/apache/wiki/api/plugin/WikiPlugin.java
diff --git a/jspwiki-api/src/main/java/org/apache/wiki/api/core/Context.java b/jspwiki-api/src/main/java/org/apache/wiki/api/core/Context.java
index 158425f..0b58a92 100644
--- a/jspwiki-api/src/main/java/org/apache/wiki/api/core/Context.java
+++ b/jspwiki-api/src/main/java/org/apache/wiki/api/core/Context.java
@@ -36,7 +36,18 @@
  *
  *  @see org.apache.wiki.plugin.Counter
  */
-public interface Context extends Cloneable /*, Command*/ {
+public interface Context extends Cloneable, Command {
+
+    String ATTR_CONTEXT = "jspwiki.context";
+
+    /**
+     *  Variable name which tells whether plugins should be executed or not. Value can be either {@code Boolean.TRUE} or
+     *  {@code Boolean.FALSE}. While not set it's value is {@code null}.
+     */
+    String VAR_EXECUTE_PLUGINS = "_PluginContent.execute";
+
+    /** Name of the variable which is set to Boolean.TRUE or Boolean.FALSE depending on whether WYSIWYG is currently in effect. */
+    String VAR_WYSIWYG_EDITOR_MODE = "WYSIWYG_EDITOR_MODE";
 
     /**
      *  Returns the WikiPage that is being handled.
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/LinkCollector.java b/jspwiki-main/src/main/java/org/apache/wiki/LinkCollector.java
index 1800b0d..286b3f3 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/LinkCollector.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/LinkCollector.java
@@ -18,6 +18,8 @@
  */
 package org.apache.wiki;
 
+import org.apache.wiki.api.core.Context;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -40,7 +42,7 @@
     /**
      * {@inheritDoc}
      */
-    public String mutate( final WikiContext context, final String in ) {
+    public String mutate( final Context context, final String in ) {
         m_items.add( in );
         return in;
     }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/StringTransmutator.java b/jspwiki-main/src/main/java/org/apache/wiki/StringTransmutator.java
index d806486..c2fc1c6 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/StringTransmutator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/StringTransmutator.java
@@ -18,6 +18,7 @@
  */
 package org.apache.wiki;
 
+import org.apache.wiki.api.core.Context;
 
 
 /**
@@ -34,6 +35,6 @@
      *  @param source  The source string.
      *  @return The mutated string.
      */
-    String mutate( WikiContext context, String source );
+    String mutate( Context context, String source );
 
 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/WikiContext.java b/jspwiki-main/src/main/java/org/apache/wiki/WikiContext.java
index adf5799..717b9d3 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/WikiContext.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/WikiContext.java
@@ -19,6 +19,7 @@
 package org.apache.wiki;
 
 import org.apache.log4j.Logger;
+import org.apache.wiki.api.core.Command;
 import org.apache.wiki.api.core.Context;
 import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.core.Page;
@@ -30,7 +31,6 @@
 import org.apache.wiki.auth.permissions.AllPermission;
 import org.apache.wiki.auth.user.UserDatabase;
 import org.apache.wiki.pages.PageManager;
-import org.apache.wiki.ui.Command;
 import org.apache.wiki.ui.CommandResolver;
 import org.apache.wiki.ui.GroupCommand;
 import org.apache.wiki.ui.Installer;
@@ -74,17 +74,6 @@
 
     private Session m_session;
 
-    public static final String ATTR_CONTEXT = "jspwiki.context";
-
-    /**
-     *  Variable name which tells whether plugins should be executed or not. Value can be either {@code Boolean.TRUE} or
-     *  {@code Boolean.FALSE}. While not set it's value is {@code null}.
-     */
-    public static final String VAR_EXECUTE_PLUGINS = "_PluginContent.execute";
-
-    /** Name of the variable which is set to Boolean.TRUE or Boolean.FALSE depending on whether WYSIWYG is currently in effect. */
-    public static final String VAR_WYSIWYG_EDITOR_MODE = "WYSIWYG_EDITOR_MODE";
-
     /** User is administering JSPWiki (Install, SecurityConfig). */
     public static final String INSTALL = WikiCommand.INSTALL.getRequestContext();
 
@@ -172,13 +161,12 @@
     private static final Permission DUMMY_PERMISSION = new PropertyPermission( "os.name", "read" );
 
     /**
-     *  Create a new WikiContext for the given WikiPage. Delegates to {@link #WikiContext(Engine, HttpServletRequest, WikiPage)}.
+     *  Create a new WikiContext for the given WikiPage. Delegates to {@link #WikiContext(Engine, HttpServletRequest, Page)}.
      *
      *  @param engine The Engine that is handling the request.
      *  @param page The WikiPage. If you want to create a WikiContext for an older version of a page, you must use this constructor.
      */
-    public WikiContext( final Engine engine, final WikiPage page )
-    {
+    public WikiContext( final Engine engine, final Page page ) {
         this( engine, null, findCommand( engine, null, page ) );
     }
 
@@ -240,14 +228,14 @@
 
     /**
      * Creates a new WikiContext for the given Engine, WikiPage and HttpServletRequest. This method simply looks up the appropriate
-     * Command using {@link #findCommand(Engine, HttpServletRequest, WikiPage)} and delegates to
+     * Command using {@link #findCommand(Engine, HttpServletRequest, Page)} and delegates to
      * {@link #WikiContext(Engine, HttpServletRequest, Command)}.
      *
      * @param engine The Engine that is handling the request
      * @param request The HttpServletRequest that should be associated with this context. This parameter may be <code>null</code>.
      * @param page The WikiPage. If you want to create a WikiContext for an older version of a page, you must supply this parameter
      */
-    public WikiContext( final Engine engine, final HttpServletRequest request, final WikiPage page ) {
+    public WikiContext( final Engine engine, final HttpServletRequest request, final Page page ) {
         this( engine, request, findCommand( engine, request, page ) );
     }
 
@@ -260,7 +248,7 @@
      *  @return a new WikiContext object.
      *
      *  @see org.apache.wiki.ui.CommandResolver
-     *  @see org.apache.wiki.ui.Command
+     *  @see org.apache.wiki.api.core.Command
      *  @since 2.1.15.
      */
     public WikiContext( final Engine engine, final HttpServletRequest request, final String requestContext ) {
@@ -272,7 +260,7 @@
 
     /**
      * {@inheritDoc}
-     * @see org.apache.wiki.ui.Command#getContentTemplate()
+     * @see org.apache.wiki.api.core.Command#getContentTemplate()
      */
     @Override
     public String getContentTemplate()
@@ -282,7 +270,7 @@
 
     /**
      * {@inheritDoc}
-     * @see org.apache.wiki.ui.Command#getJSP()
+     * @see org.apache.wiki.api.core.Command#getJSP()
      */
     @Override
     public String getJSP()
@@ -411,7 +399,7 @@
 
     /**
      * {@inheritDoc}
-     * @see org.apache.wiki.ui.Command#getTarget()
+     * @see org.apache.wiki.api.core.Command#getTarget()
      */
     @Override
     public Object getTarget()
@@ -421,7 +409,7 @@
 
     /**
      * {@inheritDoc}
-     * @see org.apache.wiki.ui.Command#getURLPattern()
+     * @see org.apache.wiki.api.core.Command#getURLPattern()
      */
     @Override
     public String getURLPattern()
@@ -436,9 +424,9 @@
      *  @return The variable contents.
      */
     @Override
-    public Object getVariable( final String key )
-    {
-        return m_variableMap.get( key );
+    @SuppressWarnings( "unchecked" )
+    public < T > T getVariable( final String key ) {
+        return ( T )m_variableMap.get( key );
     }
 
     /**
@@ -518,7 +506,7 @@
 
     /**
      * Returns the target of this wiki context: a page, group name or JSP. If the associated Command is a PageCommand, this method
-     * returns the page's name. Otherwise, this method delegates to the associated Command's {@link org.apache.wiki.ui.Command#getName()}
+     * returns the page's name. Otherwise, this method delegates to the associated Command's {@link org.apache.wiki.api.core.Command#getName()}
      * method. Calling classes can rely on the results of this method for looking up canonically-correct page or group names. Because it
      * does not automatically assume that the wiki context is a PageCommand, calling this method is inherently safer than calling
      * {@code getPage().getName()}.
@@ -732,7 +720,7 @@
      * Associates a target with the current Command and returns the new targeted Command. If the Command associated with this
      * WikiContext is already "targeted", it is returned instead.
      *
-     * @see org.apache.wiki.ui.Command#targetedCommand(java.lang.Object)
+     * @see org.apache.wiki.api.core.Command#targetedCommand(java.lang.Object)
      *
      * {@inheritDoc}
      */
@@ -800,7 +788,7 @@
      * @param page the wiki page
      * @return the correct command
      */
-    protected static Command findCommand( final Engine engine, final HttpServletRequest request, final WikiPage page ) {
+    protected static Command findCommand( final Engine engine, final HttpServletRequest request, final Page page ) {
         final String defaultContext = PageCommand.VIEW.getRequestContext();
         Command command = engine.getManager( CommandResolver.class ).findCommand( request, defaultContext );
         if ( command instanceof PageCommand && page != null ) {
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/ui/AbstractCommand.java b/jspwiki-main/src/main/java/org/apache/wiki/ui/AbstractCommand.java
index 777a5ad..4bccec1 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/ui/AbstractCommand.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/ui/AbstractCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.wiki.ui;
 
+import org.apache.wiki.api.core.Command;
 import org.apache.wiki.util.TextUtil;
 
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/ui/Command.java b/jspwiki-main/src/main/java/org/apache/wiki/ui/Command.java
deleted file mode 100644
index 5a40e6a..0000000
--- a/jspwiki-main/src/main/java/org/apache/wiki/ui/Command.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/* 
-    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.ui;
-
-import java.security.Permission;
-
-/**
- * <p>Represents a logical "unit of work" that includes a request context, JSP, URLPattern, content template and (optionally) a target and
- * required security permission. Examples of Commands include "view a page," "create a group," and "edit user preferences." </p>
- * <p> Commands come in two flavors: "static" and "targeted." </p>
- * <ul>
- * <li><strong>Static commands</strong> are exactly what they sound like: static. They are <code>final</code>, threadsafe, and immutable.
- * They have no intrinsic idea of the context they are acting in. For example, the static command {@link PageCommand#VIEW} embodies the
- * idea of viewing a page &#8212; but exactly <em>which</em> page is left undefined. Static commands exist so that they can be freely
- * shared and passed around without incurring the penalties of object creation. Static commands are a lot like naked request contexts
- * ("edit", "view", etc.) except that they include additional, essential properties such as the associated URL pattern and content JSP.</li>
- * <li><strong>Targeted commands</strong> "decorate" static commands by scoping a static Command at a specific target such as a WikiPage or
- * GroupPrincipal. Targeted commands are created by calling an existing Command's {@link #targetedCommand(Object)} and supplying the target
- * object. Implementing classes generally require a specific target type. For example, the {@link PageCommand} class requires that the
- * target object be of type {@link org.apache.wiki.WikiPage}.</li>
- * </ul>
- * <p> Concrete implementations of Command include: </p>
- * <ul>
- * <li><strong>PageCommand</strong>: commands for editing, renaming, and viewing pages</li>
- * <li><strong>GroupCommand</strong>: commands for viewing, editing and
- * deleting wiki groups</li>
- * <li><strong>WikiCommand</strong>: commands for wiki-wide operations such as
- * creating groups, editing preferences and profiles, and logging in/out</li>
- * <li><strong>RedirectCommand</strong>: commands for redirections to off-site
- * special pages</li>
- * </ul>
- * <p>
- * For a given targeted Command, its {@link #getTarget()} method will return a non-<code>null</code> value. In addition, its
- * {@link #requiredPermission()} method will generally also return a non-<code>null</code> value. It is each implementation's responsibility
- * to construct and store the correct Permission for a given Command and Target. For example, when PageCommand.VIEW is targeted at the
- * WikiPage <code>Main</code>, the Command's associated permission is <code>PagePermission "<em>theWiki</em>:Main", "view".</code></p>
- * <p>Static Commands, and targeted Commands that do not require specific permissions to execute, return a <code>null</code> result for
- * {@link #requiredPermission()}.</p>
- * @since 2.4.22
- */
-public interface Command {
-
-    /**
-     * Creates and returns a targeted Command by combining a target, such as a WikiPage or GroupPrincipal into the existing Command.
-     * Subclasses should check to make sure the supplied <code>target</code> object is of the correct type. This method is guaranteed
-     * to return a non-<code>null</code> Command (unless the target is an incorrect type).
-     *
-     * @param target the object to combine, such as a GroupPrincipal or WikiPage
-     * @return the new, targeted Command
-     * @throws IllegalArgumentException if the target is not of the correct type
-     */
-    Command targetedCommand( Object target );
-
-    /**
-     * Returns the content template associated with a Command, such as <code>PreferencesContent.jsp</code>. For Commands that are not
-     * page-related, this method will always return <code>null</code>. <em>Calling methods should always check to see if the result
-     * of this method is <code>null</code></em>.
-     *
-     * @return the content template
-     */
-    String getContentTemplate();
-
-    /**
-     * Returns the JSP associated with the Command. The JSP is a "local" JSP within the JSPWiki webapp; it is not a general HTTP URL.
-     * If it exists, the JSP will be expressed relative to the webapp root, without a leading slash. This method is guaranteed to return
-     * a non-<code>null</code> result, although in some cases the result may be an empty string.
-     *
-     * @return the JSP or url associated with the wiki command
-     */
-    String getJSP();
-
-    /**
-     * Returns the human-friendly name for this command.
-     *
-     * @return the name
-     */
-    String getName();
-
-    /**
-     * Returns the request context associated with this Command. This method is guaranteed to return a non-<code>null</code> String.
-     * @return the request context
-     */
-    String getRequestContext();
-
-    /**
-     * Returns the Permission required to successfully execute this Command. If no Permission is requred, this method returns
-     * <code>null</code>. For example, the static command {@link PageCommand#VIEW} doesn't require a permission because it isn't referring
-     * to a particular WikiPage. However, if this command targets a WikiPage called <code>Main</code>(via
-     * {@link PageCommand#targetedCommand(Object)}, the resulting Command would require the permission
-     * <code>PagePermission "<em>yourWiki</em>:Main", "view"</code>.
-     *
-     * @return the required permission, or <code>null</code> if not required
-     */
-    Permission requiredPermission();
-
-    /**
-     * Returns the target associated with a Command, if it was created with one. Commands created with {@link #targetedCommand(Object)} will
-     * <em>always</em> return a non-<code>null</code> object. <em>Calling methods should always check to see if the result of this method
-     * is <code>null</code></em>.
-     *
-     * @return the wiki page
-     */
-    Object getTarget();
-
-    /**
-     * Returns the URL pattern associated with this Command. This method is guaranteed to return a non-<code>null</code> String.
-     *
-     * @return the URL pattern
-     */
-    String getURLPattern();
-
-}
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/ui/CommandResolver.java b/jspwiki-main/src/main/java/org/apache/wiki/ui/CommandResolver.java
index c684b2a..f24f830 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/ui/CommandResolver.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/ui/CommandResolver.java
@@ -19,6 +19,7 @@
 package org.apache.wiki.ui;
 
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Command;
 import org.apache.wiki.api.exceptions.ProviderException;
 
 import javax.servlet.http.HttpServletRequest;
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/ui/DefaultCommandResolver.java b/jspwiki-main/src/main/java/org/apache/wiki/ui/DefaultCommandResolver.java
index 74ea378..a2a5c82 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/ui/DefaultCommandResolver.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/ui/DefaultCommandResolver.java
@@ -21,6 +21,7 @@
 import org.apache.log4j.Logger;
 import org.apache.wiki.InternalWikiException;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Command;
 import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.exceptions.ProviderException;
 import org.apache.wiki.api.providers.WikiProvider;
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/ui/GroupCommand.java b/jspwiki-main/src/main/java/org/apache/wiki/ui/GroupCommand.java
index 2466236..3379b03 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/ui/GroupCommand.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/ui/GroupCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.wiki.ui;
 
+import org.apache.wiki.api.core.Command;
 import org.apache.wiki.auth.GroupPrincipal;
 import org.apache.wiki.auth.permissions.GroupPermission;
 
@@ -100,7 +101,7 @@
      * Returns the name of the command, which will either be the target (if specified), or the "friendly name" for the JSP.
      *
      * @return the name
-     * @see org.apache.wiki.ui.Command#getName()
+     * @see org.apache.wiki.api.core.Command#getName()
      */
     public String getName() {
         final Object target = getTarget();
@@ -114,7 +115,7 @@
      * Returns the permission required to execute this GroupCommand.
      *
      * @return the permission
-     * @see org.apache.wiki.ui.Command#requiredPermission()
+     * @see org.apache.wiki.api.core.Command#requiredPermission()
      */
     public Permission requiredPermission() {
         return m_permission;
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/ui/PageCommand.java b/jspwiki-main/src/main/java/org/apache/wiki/ui/PageCommand.java
index cd0d886..b8fcca7 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/ui/PageCommand.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/ui/PageCommand.java
@@ -19,6 +19,7 @@
 package org.apache.wiki.ui;
 
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Command;
 import org.apache.wiki.auth.permissions.PagePermission;
 import org.apache.wiki.auth.permissions.PermissionFactory;
 
@@ -118,7 +119,7 @@
     }
 
     /**
-     * @see org.apache.wiki.ui.Command#getName()
+     * @see org.apache.wiki.api.core.Command#getName()
      */
     public String getName() {
         final Object target = getTarget();
@@ -129,7 +130,7 @@
     }
 
     /**
-     * @see org.apache.wiki.ui.Command#requiredPermission()
+     * @see org.apache.wiki.api.core.Command#requiredPermission()
      */
     public Permission requiredPermission() {
         return m_permission;
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/ui/RedirectCommand.java b/jspwiki-main/src/main/java/org/apache/wiki/ui/RedirectCommand.java
index cb098c2..2a221f4 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/ui/RedirectCommand.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/ui/RedirectCommand.java
@@ -18,6 +18,8 @@
  */
 package org.apache.wiki.ui;
 
+import org.apache.wiki.api.core.Command;
+
 import java.security.Permission;
 
 /**
@@ -63,7 +65,7 @@
     }
     
     /**
-     * @see org.apache.wiki.ui.Command#getName()
+     * @see org.apache.wiki.api.core.Command#getName()
      */
     public String getName() {
         final Object target = getTarget();
@@ -76,7 +78,7 @@
     /**
      * No-op; always returns <code>null</code>.
      *
-     * @see org.apache.wiki.ui.Command#requiredPermission()
+     * @see org.apache.wiki.api.core.Command#requiredPermission()
      */
     public Permission requiredPermission() {
         return null;
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/ui/WikiCommand.java b/jspwiki-main/src/main/java/org/apache/wiki/ui/WikiCommand.java
index 1d81475..7ac7cec 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/ui/WikiCommand.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/ui/WikiCommand.java
@@ -18,6 +18,7 @@
  */
 package org.apache.wiki.ui;
 
+import org.apache.wiki.api.core.Command;
 import org.apache.wiki.auth.permissions.AllPermission;
 import org.apache.wiki.auth.permissions.WikiPermission;
 
@@ -123,14 +124,14 @@
     /**
      * Always returns the "friendly" JSP name.
      *
-     * @see org.apache.wiki.ui.Command#getName()
+     * @see org.apache.wiki.api.core.Command#getName()
      */
     @Override public String getName() {
         return getJSPFriendlyName();
     }
 
     /**
-     * @see org.apache.wiki.ui.Command#requiredPermission()
+     * @see org.apache.wiki.api.core.Command#requiredPermission()
      */
     @Override public Permission requiredPermission() {
         return m_permission;
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/ui/WikiServletFilter.java b/jspwiki-main/src/main/java/org/apache/wiki/ui/WikiServletFilter.java
index 9b98604..6583ba6 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/ui/WikiServletFilter.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/ui/WikiServletFilter.java
@@ -22,6 +22,7 @@
 import org.apache.log4j.NDC;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
+import org.apache.wiki.api.core.Context;
 import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.core.Session;
 import org.apache.wiki.auth.AuthenticationManager;
@@ -159,7 +160,7 @@
      */
     protected WikiContext getWikiContext( final ServletRequest request ) {
         final HttpServletRequest httpRequest = (HttpServletRequest) request;
-        return ( WikiContext )httpRequest.getAttribute( WikiContext.ATTR_CONTEXT );
+        return ( WikiContext )httpRequest.getAttribute( Context.ATTR_CONTEXT );
     }
 
     /** 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/url/DefaultURLConstructor.java b/jspwiki-main/src/main/java/org/apache/wiki/url/DefaultURLConstructor.java
index 370b6c4..d60a2d4 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/url/DefaultURLConstructor.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/url/DefaultURLConstructor.java
@@ -20,8 +20,8 @@
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.wiki.WikiContext;
+import org.apache.wiki.api.core.Command;
 import org.apache.wiki.api.core.Engine;
-import org.apache.wiki.ui.Command;
 import org.apache.wiki.ui.CommandResolver;
 import org.apache.wiki.util.TextUtil;
 
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/ui/CommandResolverTest.java b/jspwiki-main/src/test/java/org/apache/wiki/ui/CommandResolverTest.java
index 192aba2..112a214 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/ui/CommandResolverTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/ui/CommandResolverTest.java
@@ -27,6 +27,7 @@
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Command;
 import org.apache.wiki.auth.GroupPrincipal;
 import org.apache.wiki.pages.PageManager;
 import org.junit.jupiter.api.AfterEach;
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/ui/GroupCommandTest.java b/jspwiki-main/src/test/java/org/apache/wiki/ui/GroupCommandTest.java
index 34a40d4..5f5e43e 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/ui/GroupCommandTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/ui/GroupCommandTest.java
@@ -22,21 +22,22 @@
  */
 package org.apache.wiki.ui;
 
-import java.util.Properties;
-
 import org.apache.wiki.TestEngine;
+import org.apache.wiki.api.core.Command;
 import org.apache.wiki.auth.GroupPrincipal;
 import org.apache.wiki.auth.permissions.GroupPermission;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import java.util.Properties;
+
 public class GroupCommandTest
 {
     @BeforeEach
     public void setUp() throws Exception
     {
-        Properties props = TestEngine.getTestProperties();
+        final Properties props = TestEngine.getTestProperties();
         new TestEngine( props );
     }
 
@@ -78,7 +79,7 @@
     {
         // Get view command
         Command a = GroupCommand.VIEW_GROUP;
-        GroupPrincipal group = new GroupPrincipal( "Test" );
+        final GroupPrincipal group = new GroupPrincipal( "Test" );
 
         // Combine with wiki group; make sure it's not equal to old command
         Command b = a.targetedCommand( group );
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/ui/PageCommandTest.java b/jspwiki-main/src/test/java/org/apache/wiki/ui/PageCommandTest.java
index 483713d..ed81d7a 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/ui/PageCommandTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/ui/PageCommandTest.java
@@ -24,6 +24,7 @@
 
 import org.apache.wiki.TestEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Command;
 import org.apache.wiki.auth.permissions.PermissionFactory;
 import org.apache.wiki.pages.PageManager;
 import org.junit.jupiter.api.Assertions;
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/ui/RedirectCommandTest.java b/jspwiki-main/src/test/java/org/apache/wiki/ui/RedirectCommandTest.java
index c127f2f..796e124 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/ui/RedirectCommandTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/ui/RedirectCommandTest.java
@@ -22,6 +22,7 @@
  */
 package org.apache.wiki.ui;
 
+import org.apache.wiki.api.core.Command;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
@@ -32,7 +33,7 @@
     @Test
     public void testStaticCommand()
     {
-        Command a = RedirectCommand.REDIRECT;
+        final Command a = RedirectCommand.REDIRECT;
         Assertions.assertEquals( "", a.getRequestContext() );
         Assertions.assertEquals( "", a.getJSP() );
         Assertions.assertEquals( "%u%n", a.getURLPattern() );
@@ -44,7 +45,7 @@
     @Test
     public void testTargetedCommand()
     {
-        Command a = RedirectCommand.REDIRECT;
+        final Command a = RedirectCommand.REDIRECT;
 
         // Test with local JSP
         Command b = a.targetedCommand( "%uTestPage.jsp" );
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/ui/WikiCommandTest.java b/jspwiki-main/src/test/java/org/apache/wiki/ui/WikiCommandTest.java
index 590a2a9..4bfe803 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/ui/WikiCommandTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/ui/WikiCommandTest.java
@@ -22,14 +22,15 @@
  */
 package org.apache.wiki.ui;
 
-import java.util.Properties;
-
 import org.apache.wiki.TestEngine;
+import org.apache.wiki.api.core.Command;
 import org.apache.wiki.auth.permissions.WikiPermission;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import java.util.Properties;
+
 public class WikiCommandTest
 {
     TestEngine testEngine;
@@ -38,7 +39,7 @@
     @BeforeEach
     public void setUp() throws Exception
     {
-        Properties props = TestEngine.getTestProperties();
+        final Properties props = TestEngine.getTestProperties();
         testEngine = new TestEngine( props );
         wiki = testEngine.getApplicationName();
     }
