diff --git a/contrib/storage-googlesheets/src/main/java/org/apache/drill/exec/store/googlesheets/GoogleSheetsStoragePlugin.java b/contrib/storage-googlesheets/src/main/java/org/apache/drill/exec/store/googlesheets/GoogleSheetsStoragePlugin.java
index b8670d7..f7e7cc5 100644
--- a/contrib/storage-googlesheets/src/main/java/org/apache/drill/exec/store/googlesheets/GoogleSheetsStoragePlugin.java
+++ b/contrib/storage-googlesheets/src/main/java/org/apache/drill/exec/store/googlesheets/GoogleSheetsStoragePlugin.java
@@ -70,7 +70,7 @@
   public GoogleSheetsStoragePlugin(GoogleSheetsStoragePluginConfig configuration, DrillbitContext context, String name) {
     super(context, name);
     this.config = configuration;
-    this.tokenProvider = context.getoAuthTokenProvider();
+    this.tokenProvider = context.getOauthTokenProvider();
     this.schemaFactory = new GoogleSheetsSchemaFactory(this);
   }
 
@@ -182,7 +182,7 @@
    */
   @VisibleForTesting
   public void initializeTokenTableForTesting() {
-    OAuthTokenProvider tokenProvider = context.getoAuthTokenProvider();
+    OAuthTokenProvider tokenProvider = context.getOauthTokenProvider();
     tokenRegistry = tokenProvider.getOauthTokenRegistry(null);
   }
 
diff --git a/contrib/storage-http/src/main/java/org/apache/drill/exec/store/http/HttpStoragePlugin.java b/contrib/storage-http/src/main/java/org/apache/drill/exec/store/http/HttpStoragePlugin.java
index bb086f6..c86c2c7 100644
--- a/contrib/storage-http/src/main/java/org/apache/drill/exec/store/http/HttpStoragePlugin.java
+++ b/contrib/storage-http/src/main/java/org/apache/drill/exec/store/http/HttpStoragePlugin.java
@@ -75,7 +75,7 @@
 
   @VisibleForTesting
   public void initializeOauthTokenTable(String username) {
-    OAuthTokenProvider tokenProvider = context.getoAuthTokenProvider();
+    OAuthTokenProvider tokenProvider = context.getOauthTokenProvider();
     tokenRegistry = tokenProvider.getOauthTokenRegistry(username);
     tokenRegistry.createTokenTable(getName());
   }
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/OAuthTokenProvider.java b/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/OAuthTokenProvider.java
index 8fba531..544400f 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/OAuthTokenProvider.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/OAuthTokenProvider.java
@@ -22,7 +22,7 @@
 import org.apache.drill.exec.server.DrillbitContext;
 
 /**
- * Class for managing oauth tokens.  Storage plugins will have to manage obtaining the plugins, but
+ * Class for managing oauth tokens.  Storage plugins will have to manage obtaining the tokens, but
  * these classes handle the storage of access and refresh tokens.
  */
 public class OAuthTokenProvider implements AutoCloseable {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/PersistentTokenRegistry.java b/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/PersistentTokenRegistry.java
index f1d2bb7..693f9e6 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/PersistentTokenRegistry.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/PersistentTokenRegistry.java
@@ -32,7 +32,7 @@
 
 /**
  * Implementation of {@link TokenRegistry} that persists token tables
- * to the pre-configured persistent store.
+ * to the preconfigured persistent store.
  */
 public class PersistentTokenRegistry implements TokenRegistry {
   private final PersistentStore<PersistentTokenTable> store;
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/TokenRegistry.java b/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/TokenRegistry.java
index a56392f..96b0527 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/TokenRegistry.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/oauth/TokenRegistry.java
@@ -34,8 +34,8 @@
   PersistentTokenTable getTokenTable(String name);
 
   /**
-   * Deletes aliases table for specified {@code userName}.
-   * @param pluginName name of the user whose aliases table should be removed
+   * Deletes the token table for specified {@code pluginName}.
+   * @param pluginName name of the plugin whose token table should be removed
    */
   void deleteTokenTable(String pluginName);
 
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/DrillbitContext.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/DrillbitContext.java
index e17b4fa..64d6e39 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/DrillbitContext.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/DrillbitContext.java
@@ -224,7 +224,7 @@
     return aliasRegistryProvider;
   }
 
-  public OAuthTokenProvider getoAuthTokenProvider() { return oAuthTokenProvider; }
+  public OAuthTokenProvider getOauthTokenProvider() { return oAuthTokenProvider; }
 
   public EventLoopGroup getBitLoopGroup() {
     return context.getControlLoopGroup();
@@ -317,7 +317,7 @@
     getCompiler().close();
     getMetastoreRegistry().close();
     getAliasRegistryProvider().close();
-    getoAuthTokenProvider().close();
+    getOauthTokenProvider().close();
   }
 
   public ResourceManager getResourceManager() {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/OAuthRequests.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/OAuthRequests.java
index 71b12b9..b4aaf7b 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/OAuthRequests.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/OAuthRequests.java
@@ -63,7 +63,7 @@
                                            SecurityContext sc) {
     try {
       DrillbitContext context = ((AbstractStoragePlugin) storage.getPlugin(name)).getContext();
-      OAuthTokenProvider tokenProvider = context.getoAuthTokenProvider();
+      OAuthTokenProvider tokenProvider = context.getOauthTokenProvider();
       PersistentTokenTable tokenTable = tokenProvider.getOauthTokenRegistry(getQueryUser(storage.getPlugin(name).getConfig(), authEnabled, sc)).getTokenTable(name);
 
       // Set the access token
@@ -85,7 +85,7 @@
                                             SecurityContext sc) {
     try {
       DrillbitContext context = ((AbstractStoragePlugin) storage.getPlugin(name)).getContext();
-      OAuthTokenProvider tokenProvider = context.getoAuthTokenProvider();
+      OAuthTokenProvider tokenProvider = context.getOauthTokenProvider();
       PersistentTokenTable tokenTable = tokenProvider.getOauthTokenRegistry(
         getQueryUser(storage.getPlugin(name).getConfig(), authEnabled, sc)).getTokenTable(name);
 
@@ -107,7 +107,7 @@
                                            UserAuthEnabled authEnabled, SecurityContext sc) {
     try {
       DrillbitContext context = ((AbstractStoragePlugin) storage.getPlugin(name)).getContext();
-      OAuthTokenProvider tokenProvider = context.getoAuthTokenProvider();
+      OAuthTokenProvider tokenProvider = context.getOauthTokenProvider();
       PersistentTokenTable tokenTable = tokenProvider
         .getOauthTokenRegistry(getQueryUser(storage.getPlugin(name).getConfig(), authEnabled, sc))
         .getTokenTable(name);
@@ -145,7 +145,7 @@
       // If USER_TRANSLATION is enabled, Drill will create a token table for each user.
       TokenRegistry tokenRegistry = ((AbstractStoragePlugin) storage.getPlugin(name))
         .getContext()
-        .getoAuthTokenProvider()
+        .getOauthTokenProvider()
         .getOauthTokenRegistry(getQueryUser(storage.getPlugin(name).getConfig(), authEnabled, sc));
 
       // Add a token registry table if none exists
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java
index b41e392..61d85c5 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java
@@ -50,12 +50,12 @@
 import org.apache.drill.common.logical.StoragePluginConfig.AuthMode;
 import org.apache.drill.exec.oauth.TokenRegistry;
 import org.apache.drill.exec.server.rest.DrillRestServer.UserAuthEnabled;
-import org.apache.drill.exec.store.AbstractStoragePlugin;
 import org.apache.drill.exec.store.StoragePluginRegistry;
 import org.apache.drill.exec.store.StoragePluginRegistry.PluginEncodingException;
 import org.apache.drill.exec.store.StoragePluginRegistry.PluginException;
 import org.apache.drill.exec.store.StoragePluginRegistry.PluginFilter;
 import org.apache.drill.exec.store.StoragePluginRegistry.PluginNotFoundException;
+import org.apache.drill.exec.work.WorkManager;
 import org.glassfish.jersey.server.mvc.Viewable;
 
 import org.slf4j.Logger;
@@ -77,6 +77,9 @@
   StoragePluginRegistry storage;
 
   @Inject
+  WorkManager workManager;
+
+  @Inject
   SecurityContext sc;
 
   @Inject
@@ -275,10 +278,9 @@
   @Operation(externalDocs = @ExternalDocumentation(description = "Apache Drill REST API documentation:", url = "https://drill.apache.org/docs/rest-api-introduction/"))
   public Response deletePlugin(@PathParam("name") String name) {
     try {
-      TokenRegistry tokenRegistry = ((AbstractStoragePlugin) storage.getPlugin(name))
-        .getContext()
-        .getoAuthTokenProvider()
-        .getOauthTokenRegistry(getActiveUser(storage.getPlugin(name).getConfig()));
+      TokenRegistry tokenRegistry = workManager.getContext()
+        .getOauthTokenProvider()
+        .getOauthTokenRegistry(getQueryUser(storage.getStoredConfig(name)));
 
       // Delete a token registry table if it exists
       tokenRegistry.deleteTokenTable(name);
@@ -416,11 +418,11 @@
 
   /**
    * This function checks to see if a given storage plugin is using USER_TRANSLATION mode.
-   * If so, it will return the active user name.  If not it will return null.
+   * If so, it will return the query user name.  If not it will return null.
    * @param config {@link StoragePluginConfig} The current plugin configuration
-   * @return If USER_TRANSLATION is enabled, returns the active user.  If not, returns null.
+   * @return If USER_TRANSLATION is enabled, returns the query user.  If not, returns null.
    */
-  private String getActiveUser(StoragePluginConfig config) {
+  private String getQueryUser(StoragePluginConfig config) {
     if (config.getAuthMode() == AuthMode.USER_TRANSLATION && authEnabled.get()) {
       return sc.getUserPrincipal().getName();
     } else {
diff --git a/exec/java-exec/src/main/resources/rest/storage/update.ftl b/exec/java-exec/src/main/resources/rest/storage/update.ftl
index 63d3812..3cbd9ea 100644
--- a/exec/java-exec/src/main/resources/rest/storage/update.ftl
+++ b/exec/java-exec/src/main/resources/rest/storage/update.ftl
@@ -204,8 +204,14 @@
 
     function deleteFunction() {
       showConfirmationDialog('"${model.getPlugin().getName()}"' + ' plugin will be deleted. Proceed?', function() {
-        $.get("/storage/" + encodeURIComponent("${model.getPlugin().getName()}") + "/delete", serverMessage).fail(function() {
-					serverMessage({ errorMessage: "Error while trying to delete." })
+        $.ajax({
+            url: '/storage/' + encodeURIComponent('${model.getPlugin().getName()}') + '.json',
+            method: 'DELETE',
+            contentType: 'application/json',
+            success: serverMessage,
+            error: function(request,msg,error) {
+              serverMessage({ errorMessage: 'Error while trying to delete.' })
+            }
         });
       });
     }
