diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ComponentsServlet.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ComponentsServlet.java
index 4baaf05..b4688c8 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ComponentsServlet.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ComponentsServlet.java
@@ -61,7 +61,7 @@
     private static final long serialVersionUID = 1L;
 
     private static final String LABEL = "components";
-    private static final String TITLE = "%scr.pluginTitle";
+    private static final String TITLE = "%components.pluginTitle";
     private static final String CSS[] = { "/res/ui/bundles.css" }; // yes, it's correct!
 
     // actions
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ConfigManager.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ConfigManager.java
index 9b6ec2a..8defdb8 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ConfigManager.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ConfigManager.java
@@ -66,7 +66,7 @@
 public class ConfigManager extends ConfigManagerBase
 {
     private static final String LABEL = "configMgr"; // was name
-    private static final String TITLE = "%config.pluginTitle";
+    private static final String TITLE = "%configMgr.pluginTitle";
     private static final String CSS[] = { "/res/ui/config.css" };
 
     private static final String PID_FILTER = "pidFilter";
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/LogServlet.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/LogServlet.java
index f0b864a..c57a2c8 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/LogServlet.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/LogServlet.java
@@ -42,7 +42,7 @@
 public class LogServlet extends SimpleWebConsolePlugin implements OsgiManagerPlugin
 {
     private static final String LABEL = "logs";
-    private static final String TITLE = "%log.pluginTitle";
+    private static final String TITLE = "%logs.pluginTitle";
     private static final String CSS[] = { "/res/ui/logs.css" };
 
     private final static int MAX_LOGS = 200; //maximum number of log entries
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/deppack/DepPackServlet.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/deppack/DepPackServlet.java
index c32920d..33d74a8 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/deppack/DepPackServlet.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/deppack/DepPackServlet.java
@@ -47,7 +47,7 @@
 {
 
     private static final String LABEL = "deppack";
-    private static final String TITLE = "%deployment.pluginTitle";
+    private static final String TITLE = "%deppack.pluginTitle";
     private static final String CSS[] = { "/res/ui/deployment.css" };
 
     //
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/LicenseServlet.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/LicenseServlet.java
index eb4b552..4b1ee96 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/LicenseServlet.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/LicenseServlet.java
@@ -58,7 +58,7 @@
         { "README", "DISCLAIMER", "LICENSE", "NOTICE", "DEPENDENCIES" };
 
     static final String LABEL = "licenses";
-    static final String TITLE = "%license.pluginTitle";
+    static final String TITLE = "%licenses.pluginTitle";
     static final String CSS[] = { "/res/ui/license.css" };
 
     // templates
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/BundleRepositoryRender.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/BundleRepositoryRender.java
index 99a0b26..1cb5380 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/BundleRepositoryRender.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/BundleRepositoryRender.java
@@ -39,7 +39,7 @@
 public class BundleRepositoryRender extends SimpleWebConsolePlugin implements OsgiManagerPlugin
 {
     private static final String LABEL = "obr";
-    private static final String TITLE = "OSGi Repository";
+    private static final String TITLE = "%obr.pluginTitle";
     private static final String[] CSS =
         { "/res/ui/obr.css" };
 
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationListener2.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationListener2.java
index 0bfa367..f01154f 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationListener2.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationListener2.java
@@ -25,7 +25,6 @@
 import java.util.ResourceBundle;
 import java.util.TreeMap;
 
-import org.apache.felix.webconsole.AbstractWebConsolePlugin;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.cm.ManagedService;
 import org.osgi.service.metatype.AttributeDefinition;
@@ -118,29 +117,24 @@
 
             final TreeMap namesByClassName = new TreeMap();
             final ClassLoader loader = getClass().getClassLoader();
-            final String[] defaultPluginsClasses = OsgiManager.PLUGIN_CLASSES;
+            final String[] defaultPluginsClasses = OsgiManager.PLUGIN_MAP;
             for ( int i = 0; i < defaultPluginsClasses.length; i++ )
             {
+                final String clazz = defaultPluginsClasses[i++];
+                final String label = defaultPluginsClasses[i];
+                String name = null;
                 try
                 {
-                    final Object plugin = loader.loadClass( defaultPluginsClasses[i] ).newInstance();
-                    if ( plugin instanceof AbstractWebConsolePlugin )
-                    {
-                        String name = ( ( AbstractWebConsolePlugin ) plugin ).getTitle();
-                        if (name.startsWith("%"))
-                        {
-                            final ResourceBundle rb = osgiManager.resourceBundleManager.getResourceBundle(
-                                ((AbstractWebConsolePlugin) plugin).getBundle(),
-                                Locale.ENGLISH);
-                            name = rb.getString(name.substring(1));
-                        }
-                        namesByClassName.put( defaultPluginsClasses[i], name );
-                    }
+                    name = label + ".pluginTitle";
+                    final ResourceBundle rb = osgiManager.resourceBundleManager.getResourceBundle(osgiManager.getBundleContext().getBundle(), Locale.ENGLISH);
+                    name = rb.getString(name);
                 }
                 catch ( Throwable t )
                 {
+                    name = label;
                     // ignore
                 }
+                namesByClassName.put(clazz, name);
             }
             final String[] classes = ( String[] ) namesByClassName.keySet().toArray(
                 new String[namesByClassName.size()] );
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
index 8a5d285..0c5c5f5 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
@@ -53,6 +53,7 @@
 import org.apache.felix.webconsole.internal.filter.FilteringResponseWrapper;
 import org.apache.felix.webconsole.internal.i18n.ResourceBundleManager;
 import org.apache.felix.webconsole.internal.misc.ConfigurationRender;
+import org.apache.felix.webconsole.internal.servlet.PluginHolder.InternalPlugin;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
@@ -147,23 +148,27 @@
 
     static final String[] PLUGIN_CLASSES =
         { "org.apache.felix.webconsole.internal.compendium.ComponentConfigurationPrinter",
-            "org.apache.felix.webconsole.internal.compendium.ComponentsServlet",
-            "org.apache.felix.webconsole.internal.compendium.ConfigManager",
             "org.apache.felix.webconsole.internal.compendium.ConfigurationAdminConfigurationPrinter",
-            "org.apache.felix.webconsole.internal.compendium.LogServlet",
             "org.apache.felix.webconsole.internal.compendium.PreferencesConfigurationPrinter",
             "org.apache.felix.webconsole.internal.compendium.WireAdminConfigurationPrinter",
-            "org.apache.felix.webconsole.internal.core.BundlesServlet",
             "org.apache.felix.webconsole.internal.core.PermissionsConfigurationPrinter",
             "org.apache.felix.webconsole.internal.core.ServicesConfigurationPrinter",
-            "org.apache.felix.webconsole.internal.core.ServicesServlet",
-            "org.apache.felix.webconsole.internal.deppack.DepPackServlet",
-            "org.apache.felix.webconsole.internal.misc.LicenseServlet",
-            "org.apache.felix.webconsole.internal.misc.ShellServlet",
             "org.apache.felix.webconsole.internal.misc.SystemPropertiesPrinter",
             "org.apache.felix.webconsole.internal.misc.ThreadPrinter",
-            "org.apache.felix.webconsole.internal.obr.BundleRepositoryRender",
-            "org.apache.felix.webconsole.internal.system.VMStatPlugin" };
+        };
+
+    static final String[] PLUGIN_MAP = {
+        "org.apache.felix.webconsole.internal.compendium.ComponentsServlet", "components", //$NON-NLS-1$ //$NON-NLS-2$
+        "org.apache.felix.webconsole.internal.compendium.ConfigManager", "configMgr", //$NON-NLS-1$ //$NON-NLS-2$
+        "org.apache.felix.webconsole.internal.compendium.LogServlet", "logs", //$NON-NLS-1$ //$NON-NLS-2$
+        "org.apache.felix.webconsole.internal.core.BundlesServlet", "bundles", //$NON-NLS-1$ //$NON-NLS-2$
+        "org.apache.felix.webconsole.internal.core.ServicesServlet", "services", //$NON-NLS-1$ //$NON-NLS-2$
+        "org.apache.felix.webconsole.internal.deppack.DepPackServlet", "deppack", //$NON-NLS-1$ //$NON-NLS-2$
+        "org.apache.felix.webconsole.internal.misc.LicenseServlet", "licenses", //$NON-NLS-1$ //$NON-NLS-2$
+        "org.apache.felix.webconsole.internal.misc.ShellServlet", "shell", //$NON-NLS-1$ //$NON-NLS-2$
+        "org.apache.felix.webconsole.internal.obr.BundleRepositoryRender", "obr", //$NON-NLS-1$ //$NON-NLS-2$
+        "org.apache.felix.webconsole.internal.system.VMStatPlugin", "vmstat",  //$NON-NLS-1$ //$NON-NLS-2$
+    };
 
     private BundleContext bundleContext;
 
@@ -208,6 +213,14 @@
         this.bundleContext = bundleContext;
         this.holder = new PluginHolder( bundleContext );
 
+        // new plugins setup
+        for (int i = 0; i < PLUGIN_MAP.length; i++ )
+        {
+            final String pluginClassName = PLUGIN_MAP[i++];
+            final String label = PLUGIN_MAP[i];
+            holder.addInternalPlugin(this, pluginClassName, label);
+        }
+
         // setup the included plugins
         ClassLoader classLoader = getClass().getClassLoader();
         for ( int i = 0; i < PLUGIN_CLASSES.length; i++ )
@@ -219,23 +232,12 @@
                 Class pluginClass = classLoader.loadClass( pluginClassName );
                 Object plugin = pluginClass.newInstance();
 
-                // check whether enabled by configuration
-                if ( isPluginDisabled( pluginClassName, plugin ) )
-                {
-                    log( LogService.LOG_INFO, "Ignoring plugin " + pluginClassName + ": Disabled by configuration" );
-                    continue;
-                }
-
                 if ( plugin instanceof OsgiManagerPlugin )
                 {
                     ( ( OsgiManagerPlugin ) plugin ).activate( bundleContext );
                     osgiManagerPlugins.add( plugin );
                 }
-                if ( plugin instanceof AbstractWebConsolePlugin )
-                {
-                    holder.addOsgiManagerPlugin( ( AbstractWebConsolePlugin ) plugin );
-                }
-                else if ( plugin instanceof BrandingPlugin )
+                if ( plugin instanceof BrandingPlugin )
                 {
                     AbstractWebConsolePlugin.setBrandingPlugin( ( BrandingPlugin ) plugin );
                 }
@@ -529,7 +531,7 @@
      * @param level The log level at which to log the message
      * @param message The message to log
      */
-    private void log( int level, String message )
+    void log( int level, String message )
     {
         if ( logLevel >= level )
         {
@@ -552,7 +554,7 @@
      * @param message The message to log
      * @param t The <code>Throwable</code> to log with the message
      */
-    private void log( int level, String message, Throwable t )
+    void log( int level, String message, Throwable t )
     {
         if ( logLevel >= level )
         {
@@ -664,7 +666,7 @@
 
     private static class BrandingServiceTracker extends ServiceTracker
     {
-        private final OsgiManager osgiManager;
+        private final OsgiManager osgiManager; // FIXME: never read locally
 
 
         BrandingServiceTracker( OsgiManager osgiManager )
@@ -933,18 +935,14 @@
 
 
     /**
-     * Returns <code>true</code> if the plugin is an
-     * {@link AbstractWebConsolePlugin} and a list of enabled plugins is
+     * Returns <code>true</code> if the list of enabled plugins is
      * configured but the plugin is not contained in that list.
      * <p>
-     * This method is intended to be used only for plugins contained in the
-     * web console bundle itself, namely plugins listed in the
-     * {@value #PLUGIN_CLASSES} list.
+     * This method is intended to be used only for {@link InternalPlugin#isEnabled()} 
      */
-    private boolean isPluginDisabled( String pluginClass, Object plugin )
+    boolean isPluginDisabled( String pluginClass )
     {
-        return enabledPlugins != null && !enabledPlugins.contains( pluginClass )
-            && ( plugin instanceof AbstractWebConsolePlugin );
+        return enabledPlugins != null && !enabledPlugins.contains( pluginClass );
     }
 
 
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/PluginHolder.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/PluginHolder.java
index f4188da..48f1e6f 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/PluginHolder.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/PluginHolder.java
@@ -33,6 +33,7 @@
 
 import org.apache.felix.webconsole.AbstractWebConsolePlugin;
 import org.apache.felix.webconsole.WebConsoleConstants;
+import org.apache.felix.webconsole.internal.OsgiManagerPlugin;
 import org.apache.felix.webconsole.internal.WebConsolePluginAdapter;
 import org.apache.felix.webconsole.internal.i18n.ResourceBundleManager;
 import org.osgi.framework.Bundle;
@@ -42,6 +43,7 @@
 import org.osgi.framework.ServiceEvent;
 import org.osgi.framework.ServiceListener;
 import org.osgi.framework.ServiceReference;
+import org.osgi.service.log.LogService;
 
 
 /**
@@ -149,6 +151,11 @@
         this.defaultPluginLabel = defaultPluginLabel;
     }
 
+    void addInternalPlugin( final OsgiManager osgiManager, final String pluginClassName, final String label)
+    {
+        final Plugin plugin = new InternalPlugin(this, osgiManager, pluginClassName, label);
+        addPlugin( label, plugin );
+    }
 
     /**
      * Adds an internal Web Console plugin
@@ -232,6 +239,8 @@
         for ( int i = 0; i < plugins.length; i++ )
         {
             final Plugin plugin = plugins[i];
+            if (!plugin.isEnabled() || null == plugin.getConsolePlugin()) continue;
+
             final String label = plugin.getLabel();
             String title = plugin.getTitle();
             if ( title.startsWith( "%" ) )
@@ -316,6 +325,8 @@
     /**
      * Called when plugin services are registered or unregistered (or modified,
      * which is currently ignored)
+     *
+     * @see org.osgi.framework.ServiceListener#serviceChanged(org.osgi.framework.ServiceEvent)
      */
     public void serviceChanged( ServiceEvent event )
     {
@@ -538,6 +549,9 @@
             return consolePlugin;
         }
 
+        protected boolean isEnabled() {
+            return true;
+        }
 
         protected AbstractWebConsolePlugin doGetConsolePlugin()
         {
@@ -637,6 +651,7 @@
          */
         final void ungetService()
         {
+            // FIXME: this method is used by nobody!?!?
             dispose();
         }
 
@@ -707,4 +722,63 @@
         }
 
     }
+
+    static class InternalPlugin extends Plugin
+    {
+        final String pluginClassName;
+        final OsgiManager osgiManager;
+        AbstractWebConsolePlugin plugin;
+
+        protected InternalPlugin(PluginHolder holder, OsgiManager osgiManager, String pluginClassName, String label)
+        {
+            super(holder, label);
+            this.osgiManager = osgiManager;
+            this.pluginClassName = pluginClassName;
+        }
+
+        protected final boolean isEnabled() {
+            // check if the plugin is enabled
+            return !osgiManager.isPluginDisabled(pluginClassName);
+        }
+
+        protected AbstractWebConsolePlugin doGetConsolePlugin()
+        {
+            if (null == plugin) {
+                if (!isEnabled()) 
+                {
+                    osgiManager.log( LogService.LOG_INFO, "Ignoring plugin " + pluginClassName + ": Disabled by configuration" );
+                    return null;
+                }
+
+                try
+                {
+                    Class pluginClass = getClass().getClassLoader().loadClass(pluginClassName);
+                    plugin = (AbstractWebConsolePlugin) pluginClass.newInstance();
+    
+                    if (plugin instanceof OsgiManagerPlugin)
+                    {
+                        ((OsgiManagerPlugin) plugin).activate(getBundle().getBundleContext());
+                    }
+
+                }
+                catch (Throwable t)
+                {
+                    osgiManager.log( LogService.LOG_WARNING, "Failed to instantiate plugin " + pluginClassName, t );
+                }
+            }
+
+            return plugin;
+        }
+
+        protected void doUngetConsolePlugin(AbstractWebConsolePlugin consolePlugin)
+        {
+            if (consolePlugin == plugin) plugin = null;
+            if (consolePlugin instanceof OsgiManagerPlugin)
+            {
+                ((OsgiManagerPlugin) consolePlugin).deactivate();
+            }
+            super.doUngetConsolePlugin(consolePlugin);
+        }
+
+    }
 }
diff --git a/webconsole/src/main/native2ascii/OSGI-INF/l10n/bundle_bg.properties b/webconsole/src/main/native2ascii/OSGI-INF/l10n/bundle_bg.properties
index f2bd291..387efa6 100644
--- a/webconsole/src/main/native2ascii/OSGI-INF/l10n/bundle_bg.properties
+++ b/webconsole/src/main/native2ascii/OSGI-INF/l10n/bundle_bg.properties
@@ -78,7 +78,7 @@
 services.usingBundles=Използващи бъндъли
 
 # Log plugin
-log.pluginTitle=Журнал
+logs.pluginTitle=Журнал
 log.status.ok=Log Service е активен.
 log.status.missing=Няма активен Log Service.
 log.severity.label=Макс. ниво:
@@ -93,7 +93,7 @@
 log.level.debug=ДЕТАЙЛИ
 
 # Deployment Admin plugin
-deployment.pluginTitle=Управление на пакети
+deppack.pluginTitle=Управление на пакети
 deployment.status.no_data=Няма инсталирани пакети!
 deployment.status.no_service=Услугата Deployment Admin не е налична в момента!
 deployment.status.ok=Deployment Admin е наличен и по-долу е показан списъка с пакет
@@ -163,7 +163,7 @@
 
 
 # Components plugin
-scr.pluginTitle=Компоненти
+components.pluginTitle=Компоненти
 scr.status.no_service=Declarative Service не е наличен!
 scr.status.no_components=Няма инсталирани компонент в момента!
 scr.status.ok=Брой инсталирани компоненти: {0}
@@ -185,7 +185,7 @@
 
 
 # Configuration plugin
-config.pluginTitle=Конфигурации
+configMgr.pluginTitle=Конфигурации
 config.status.ok=Configuration Admin Service е достъпен.
 config.status.missing=Няма Configuration Admin Service
 config.properties=Настройки
@@ -211,7 +211,7 @@
 config.bind.error=Грешка: PID "{0}" е асоцииран с "{1}" но улугата е регистриране от бъндъл "{2}"
 
 # License plugin
-license.pluginTitle=Лицензи
+licenses.pluginTitle=Лицензи
 license.status.ok=Следните бъндъли съдържат лицензионна информация.
 license.status.none=Няма бъндъли съдържащо лицензионна информация
 license.resources=Ресурси на бъндъла: 
diff --git a/webconsole/src/main/native2ascii/OSGI-INF/l10n/bundle_de.properties b/webconsole/src/main/native2ascii/OSGI-INF/l10n/bundle_de.properties
index 1ea0ad9..ff76151 100644
--- a/webconsole/src/main/native2ascii/OSGI-INF/l10n/bundle_de.properties
+++ b/webconsole/src/main/native2ascii/OSGI-INF/l10n/bundle_de.properties
@@ -77,7 +77,7 @@
 services.usingBundles=Nutzende Bundles
 
 # Log plugin
-log.pluginTitle=Log Service
+logs.pluginTitle=Log Service
 log.status.ok=Log Service ist aktiv.
 log.status.missing=Log Service ist nicht installiert/aktiv.
 log.severity.label=Minimaler Level:
@@ -92,7 +92,7 @@
 log.level.debug=Debug
 
 # Deployment Admin plugin
-deployment.pluginTitle=Deployment Packages
+deppack.pluginTitle=Deployment Packages
 deployment.status.no_data=Kein Deployment Package ist installiert!
 deployment.status.no_service=Deployment Admin Dienst ist nicht instaliert/aktiv!
 deployment.status.ok=Deployment Admin Dienst ist aktiv
@@ -161,7 +161,7 @@
 bundles.error.title=Ein Fehler ist aufgetreten während der Ausführung der Bundle Operation!
 
 # Components plugin
-scr.pluginTitle=Komponenten
+components.pluginTitle=Komponenten
 scr.status.no_service=Declarative Service ist Voraussetzung für diese Funktionalität!
 scr.status.no_components=Zur Zeit sind keine Komponenten installiert!
 scr.status.ok=Anzahl installierter Komponenten: {0}
@@ -183,7 +183,7 @@
 
 
 # Configuration plugin
-config.pluginTitle=Konfiguration
+configMgr.pluginTitle=Konfiguration
 config.status.ok=Configuration Admin Dienst ist aktiv.
 config.status.missing=Configuration Admin Dienst ist nicht installiert/aktiv.
 config.properties=Eigenschaften
@@ -208,7 +208,7 @@
 config.title.name=Name
 
 # License plugin
-license.pluginTitle=Lizenzen
+licenses.pluginTitle=Lizenzen
 license.status.ok=Die folgenden Bundles enthalten Lizenz Informationen.
 license.status.none=Keine Bundles mit Lizenz Informationen installiert
 license.resources=Bundle Resourcen: 
diff --git a/webconsole/src/main/native2ascii/OSGI-INF/l10n/bundle_ru.properties b/webconsole/src/main/native2ascii/OSGI-INF/l10n/bundle_ru.properties
index b3b4855..d0bb220 100644
--- a/webconsole/src/main/native2ascii/OSGI-INF/l10n/bundle_ru.properties
+++ b/webconsole/src/main/native2ascii/OSGI-INF/l10n/bundle_ru.properties
@@ -48,7 +48,7 @@
 services.usingBundles=Используется модулями
 
 # Log plugin
-log.pluginTitle=Журнал
+logs.pluginTitle=Журнал
 log.status.ok=Log Service работает.
 log.status.missing=Log Service не установлен или не запущен.
 log.severity.label=Важность:
@@ -63,7 +63,7 @@
 log.level.debug=ОТЛАДКА
 
 # Deployment Admin plugin
-deployment.pluginTitle=Управление пакетами
+deppack.pluginTitle=Управление пакетами
 deployment.status.no_data=Нет установочных пакетов!
 deployment.status.no_service=Сервис Deployment Admin не установлен или не запущен.
 deployment.status.ok=Сервис Deployment Admin работает
@@ -133,7 +133,7 @@
 
 
 # Components plugin
-scr.pluginTitle=Компоненты
+components.pluginTitle=Компоненты
 scr.status.no_service=Сервис Declarative Service не найден!
 scr.status.no_components=Нет установленных компонентов!
 scr.status.ok=Количество установленных компонентов: {0}
@@ -155,7 +155,7 @@
 
 
 # Configuration plugin
-config.pluginTitle=Конфигурирование
+configMgr.pluginTitle=Конфигурирование
 config.status.ok=Сервис Configuration Admin запущен.
 config.status.missing=Сервис Configuration Admin не найден!
 config.properties=Настройки
@@ -181,7 +181,7 @@
 config.bind.error=Ошибка: PID "{0}" привязан к "{1}", но сервис конфигурирования зарегистрирован модулем "{2}"
 
 # License plugin
-license.pluginTitle=Лицензии
+licenses.pluginTitle=Лицензии
 license.status.ok=Модули, содержащие файлы лицензий.
 license.status.none=Нет модулей с информацией о лицензиях
 license.resources=Ресурсы модуля:
diff --git a/webconsole/src/main/resources/OSGI-INF/l10n/bundle.properties b/webconsole/src/main/resources/OSGI-INF/l10n/bundle.properties
index 7df8e19..1291e87 100644
--- a/webconsole/src/main/resources/OSGI-INF/l10n/bundle.properties
+++ b/webconsole/src/main/resources/OSGI-INF/l10n/bundle.properties
@@ -78,7 +78,7 @@
 services.usingBundles=Using Bundles
 
 # Log plugin
-log.pluginTitle=Log Service
+logs.pluginTitle=Log Service
 log.status.ok=Log Service is running.
 log.status.missing=Log Service is not installed/running.
 log.severity.label=Severity at least:
@@ -93,7 +93,7 @@
 log.level.debug=DEBUG
 
 # Deployment Admin plugin
-deployment.pluginTitle=Deployment Packages
+deppack.pluginTitle=Deployment Packages
 deployment.status.no_data=No deployment packages installed!
 deployment.status.no_service=Deployment Admin is not installed/running!
 deployment.status.ok=Deployment Admin service is running
@@ -163,7 +163,7 @@
 
 
 # Components plugin
-scr.pluginTitle=Components
+components.pluginTitle=Components
 scr.status.no_service=Declarative Service required for this function!
 scr.status.no_components=No components installed currently!
 scr.status.ok=Number of installed components: {0}
@@ -185,7 +185,7 @@
 
 
 # Configuration plugin
-config.pluginTitle=Configuration
+configMgr.pluginTitle=Configuration
 config.status.ok=Configuration Admin Service is running.
 config.status.missing=Configuration Admin Service is not installed/running.
 config.properties=Properties
@@ -211,7 +211,7 @@
 config.bind.error=Error: the PID "{0}" is bound to "{1}" but the actual managed service is registered from "{2}" bundle
 
 # License plugin
-license.pluginTitle=Licenses
+licenses.pluginTitle=Licenses
 license.status.ok=The following bundles contains license files.
 license.status.none=No bundles with license files available
 license.resources=Bundle Resources: 
