diff --git a/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/CamelPage.java b/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/CamelPage.java
index a94958d..65a3a94 100644
--- a/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/CamelPage.java
+++ b/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/CamelPage.java
@@ -18,6 +18,11 @@
 
 import org.apache.karaf.webconsole.core.page.SinglePage;
 
+/**
+ * Base page for camel extension pages.
+ */
 public class CamelPage extends SinglePage {
 
+    private static final long serialVersionUID = 1L;
+
 }
diff --git a/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/CamelContextModel.java b/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/CamelContextModel.java
index 9e17b33..79c53be 100644
--- a/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/CamelContextModel.java
+++ b/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/CamelContextModel.java
@@ -21,8 +21,13 @@
 import org.apache.camel.CamelContext;
 import org.apache.wicket.model.LoadableDetachableModel;
 
+/**
+ * Camel context model.
+ */
 public class CamelContextModel extends LoadableDetachableModel<CamelContext> {
 
+    private static final long serialVersionUID = 1L;
+
     private String name;
     private List<CamelContext> contexts;
 
diff --git a/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/CamelContextsDataProvider.java b/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/CamelContextsDataProvider.java
new file mode 100644
index 0000000..10b43f6
--- /dev/null
+++ b/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/CamelContextsDataProvider.java
@@ -0,0 +1,52 @@
+/*
+ * 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.karaf.webconsole.camel.internal.context;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.camel.CamelContext;
+import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
+import org.apache.wicket.model.IModel;
+
+/**
+ * Camel context list data provider.
+ */
+public class CamelContextsDataProvider extends SortableDataProvider<CamelContext> {
+
+    private static final long serialVersionUID = 1L;
+
+    private final List<CamelContext> contexts;
+
+    public CamelContextsDataProvider(List<CamelContext> contexts) {
+        this.contexts = contexts;
+    }
+
+    public Iterator<? extends CamelContext> iterator(int first, int count) {
+        return new ArrayList<CamelContext>(contexts).subList(first, first + count).iterator();
+    }
+
+    public int size() {
+        return contexts.size();
+    }
+
+    public IModel<CamelContext> model(CamelContext object) {
+        return new CamelContextModel(contexts, object);
+    }
+}
+
diff --git a/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/CamelContextsPage.java b/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/CamelContextsPage.java
index 9e44d14..8de1dac 100644
--- a/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/CamelContextsPage.java
+++ b/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/CamelContextsPage.java
@@ -16,9 +16,7 @@
  */
 package org.apache.karaf.webconsole.camel.internal.context;
 
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Iterator;
 import java.util.List;
 
 import org.apache.camel.CamelContext;
@@ -30,8 +28,6 @@
 import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
-import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.model.IModel;
@@ -39,17 +35,23 @@
 import org.ops4j.pax.wicket.api.PaxWicketBean;
 import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
 
+/**
+ * Camel contexts list page.
+ */
 @PaxWicketMountPoint(mountPoint = "/camel/contexts")
 public class CamelContextsPage extends CamelPage {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "contexts")
     private List<CamelContext> contexts;
 
     @PaxWicketBean(name = "tracer")
     private TraceContainer container;
 
+    @SuppressWarnings("unchecked")
     public CamelContextsPage() {
-        @SuppressWarnings("unchecked")
+        @SuppressWarnings("serial")
         IColumn<CamelContext>[] columns = new IColumn[] {
             new OrdinalColumn<CamelContext>(),
             new PropertyColumnExt<CamelContext>("Name", "name"),
@@ -73,21 +75,7 @@
             }
         };
 
-        ISortableDataProvider<CamelContext> provider = new SortableDataProvider<CamelContext>() {
-            public Iterator<? extends CamelContext> iterator(int first, int count) {
-                return new ArrayList<CamelContext>(contexts).subList(first, first + count).iterator();
-            }
-
-            public int size() {
-                return contexts.size();
-            }
-
-            public IModel<CamelContext> model(CamelContext object) {
-                return new CamelContextModel(contexts, object);
-            }
-        };
-
-        add(new DefaultDataTable<CamelContext>("contexts", Arrays.asList(columns), provider, 20));
+        add(new DefaultDataTable<CamelContext>("contexts", Arrays.asList(columns), new CamelContextsDataProvider(contexts), 20));
     }
 
 }
diff --git a/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/ContextActionsPanel.java b/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/ContextActionsPanel.java
index 179965c..e6066c0 100644
--- a/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/ContextActionsPanel.java
+++ b/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/ContextActionsPanel.java
@@ -28,8 +28,13 @@
 import org.apache.wicket.model.IModel;
 import org.ops4j.pax.wicket.api.PaxWicketBean;
 
+/**
+ * Panel with actions for single camel context.
+ */
 public class ContextActionsPanel extends ActionsPanel<CamelContext> {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "tracer")
     private TraceContainer container;
 
@@ -38,6 +43,7 @@
     }
 
     @Override
+    @SuppressWarnings({"rawtypes", "serial"})
     protected List<Link> getLinks(CamelContext object, String linkId, String labelId) {
         List<Link> links = new ArrayList<Link>();
 
diff --git a/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/DumpPage.java b/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/DumpPage.java
index d1c0a05..e8353b5 100644
--- a/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/DumpPage.java
+++ b/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/context/DumpPage.java
@@ -31,8 +31,14 @@
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 
+/**
+ * Page with trace view.
+ */
 public class DumpPage extends CamelPage {
 
+    private static final long serialVersionUID = 1L;
+
+    @SuppressWarnings("serial")
     public DumpPage(TraceContainer container, CamelContext context) {
         Tracer tracer = container.getTracer(context);
         List<Map<String, Serializable>> info;
diff --git a/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/tracking/TraceProcessor.java b/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/tracking/TraceProcessor.java
index 74f7b51..16c8873 100644
--- a/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/tracking/TraceProcessor.java
+++ b/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/tracking/TraceProcessor.java
@@ -50,7 +50,7 @@
         Message msg = exchange.getIn();
         if (msg != null) {
             properties.put("exchangeInId", msg.getMessageId());
-            properties.put("exchangeInHeaders", new HashMap(msg.getHeaders()));
+            properties.put("exchangeInHeaders", new HashMap<String, Object>(msg.getHeaders()));
             Object body = msg.getBody();
             if (body instanceof Serializable) {
                 properties.put("exchangeInBody", (Serializable) body);
@@ -64,7 +64,7 @@
         msg = exchange.getOut();
         if (msg != null) {
             properties.put("exchangeOutId", msg.getMessageId());
-            properties.put("exchangeOutHeaders", new HashMap(msg.getHeaders()));
+            properties.put("exchangeOutHeaders", new HashMap<String, Object>(msg.getHeaders()));
             Object body = msg.getBody();
             if (body instanceof Serializable) {
                 properties.put("exchangeOutBody", (Serializable) body);
diff --git a/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/widget/CamelWidget.java b/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/widget/CamelWidget.java
index 7fce73d..a7289b6 100644
--- a/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/widget/CamelWidget.java
+++ b/camel/src/main/java/org/apache/karaf/webconsole/camel/internal/widget/CamelWidget.java
@@ -26,8 +26,14 @@
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.html.panel.Panel;
 
+/**
+ * Widget with list of camel contexts.
+ */
 public class CamelWidget extends Panel {
 
+    private static final long serialVersionUID = 1L;
+
+    @SuppressWarnings("serial")
     public CamelWidget(String id, List<CamelContext> contexts) {
         super(id);
 
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/BasePage.java b/core/src/main/java/org/apache/karaf/webconsole/core/BasePage.java
index 5402fb1..c57fd92 100644
--- a/core/src/main/java/org/apache/karaf/webconsole/core/BasePage.java
+++ b/core/src/main/java/org/apache/karaf/webconsole/core/BasePage.java
@@ -35,6 +35,8 @@
  */
 public class BasePage extends WebPage {
 
+    private static final long serialVersionUID = 1L;
+
     /**
      * Brand provider responsible for l&f customization.
      */
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/dashboard/DashboardPage.java b/core/src/main/java/org/apache/karaf/webconsole/core/dashboard/DashboardPage.java
index e04b07a..6e515a0 100644
--- a/core/src/main/java/org/apache/karaf/webconsole/core/dashboard/DashboardPage.java
+++ b/core/src/main/java/org/apache/karaf/webconsole/core/dashboard/DashboardPage.java
@@ -39,12 +39,11 @@
     @PaxWicketBean(name = "widgets")
     private List<WidgetProvider> widgets;
 
+    @SuppressWarnings("serial")
     public DashboardPage() {
         add(new CssBehavior(DashboardPage.class, "dashboard.css"));
 
         add(new Label("noWidgets", getString("widgets.empty")) {
-            private static final long serialVersionUID = 1L;
-
             @Override
             public boolean isVisible() {
                 return widgets.size() == 0;
@@ -52,8 +51,6 @@
         });
 
         add(new ListView<WidgetProvider>("widgets", new ListModel<WidgetProvider>(widgets)) {
-            private static final long serialVersionUID = 1L;
-
             @Override
             protected void populateItem(ListItem<WidgetProvider> item) {
                 item.add(item.getModelObject().createPanel("widget"));
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/navigation/markup/ModuleTabPanel.java b/core/src/main/java/org/apache/karaf/webconsole/core/navigation/markup/ModuleTabPanel.java
index b8e4299..96c7ccb 100644
--- a/core/src/main/java/org/apache/karaf/webconsole/core/navigation/markup/ModuleTabPanel.java
+++ b/core/src/main/java/org/apache/karaf/webconsole/core/navigation/markup/ModuleTabPanel.java
@@ -21,8 +21,8 @@
 
 import org.apache.karaf.webconsole.core.navigation.ConsoleTabProvider;
 import org.apache.karaf.webconsole.core.util.LinkUtils;
+import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Page;
-import org.apache.wicket.behavior.SimpleAttributeModifier;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
@@ -37,17 +37,16 @@
  */
 public class ModuleTabPanel extends Panel {
 
-    private static final long serialVersionUID = 1491009991152801134L;
+    private static final long serialVersionUID = 1L;
 
     @PaxWicketBean(name = "tabs")
     protected List<ConsoleTabProvider> tabs;
 
+    @SuppressWarnings("serial")
     public ModuleTabPanel(String id) {
         super(id);
 
         IModel<List<Link<Page>>> links = new LoadableDetachableModel<List<Link<Page>>>() {
-            private static final long serialVersionUID = 1L;
-
             @Override
             protected List<Link<Page>> load() {
                 if (tabs == null) {
@@ -64,14 +63,12 @@
         };
 
         add(new ListView<Link<Page>>("moduleLinks", links) {
-            private static final long serialVersionUID = 1L;
-
             @Override
             protected void populateItem(ListItem<Link<Page>> item) {
                 Link<Page> link = item.getModelObject();
                 item.add(link);
                 if (LinkUtils.isActiveTrail(link)) {
-                    item.add(new SimpleAttributeModifier("class", "active"));
+                    item.add(new AttributeModifier("class", "active"));
                 }
             }
         });
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/page/LoginPage.java b/core/src/main/java/org/apache/karaf/webconsole/core/page/LoginPage.java
index cefd5f2..d0b8ab3 100644
--- a/core/src/main/java/org/apache/karaf/webconsole/core/page/LoginPage.java
+++ b/core/src/main/java/org/apache/karaf/webconsole/core/page/LoginPage.java
@@ -25,6 +25,8 @@
  */
 public class LoginPage extends BasePage {
 
+    private static final long serialVersionUID = 1L;
+
     public LoginPage() {
         this(null);
     }
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/page/SecuredPage.java b/core/src/main/java/org/apache/karaf/webconsole/core/page/SecuredPage.java
index a4e8fcd..43e0970 100644
--- a/core/src/main/java/org/apache/karaf/webconsole/core/page/SecuredPage.java
+++ b/core/src/main/java/org/apache/karaf/webconsole/core/page/SecuredPage.java
@@ -27,6 +27,8 @@
 @AuthorizeInstantiation("admin")
 public class SecuredPage extends BasePage {
 
+    private static final long serialVersionUID = 1L;
+
     @Override
     protected Panel createTopPanel(String id) {
         return new NavigationTopPanel(id, getSupportedLocales());
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/page/SidebarPage.java b/core/src/main/java/org/apache/karaf/webconsole/core/page/SidebarPage.java
index ac0fc00..a8a7005 100644
--- a/core/src/main/java/org/apache/karaf/webconsole/core/page/SidebarPage.java
+++ b/core/src/main/java/org/apache/karaf/webconsole/core/page/SidebarPage.java
@@ -27,6 +27,8 @@
  */
 public class SidebarPage extends SecuredPage {
 
+    private static final long serialVersionUID = 1L;
+
     private Panel sidebar;
 
     public SidebarPage() {
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/page/SinglePage.java b/core/src/main/java/org/apache/karaf/webconsole/core/page/SinglePage.java
index cbc30a7..bdf57ea 100644
--- a/core/src/main/java/org/apache/karaf/webconsole/core/page/SinglePage.java
+++ b/core/src/main/java/org/apache/karaf/webconsole/core/page/SinglePage.java
@@ -24,6 +24,8 @@
  */
 public class SinglePage extends SecuredPage {
 
+    private static final long serialVersionUID = 1L;
+
     public SinglePage() {
         add(new ModuleTabPanel("tabs"));
 
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/preferences/PreferencesPage.java b/core/src/main/java/org/apache/karaf/webconsole/core/preferences/PreferencesPage.java
index e0a8609..5833afb 100644
--- a/core/src/main/java/org/apache/karaf/webconsole/core/preferences/PreferencesPage.java
+++ b/core/src/main/java/org/apache/karaf/webconsole/core/preferences/PreferencesPage.java
@@ -33,6 +33,8 @@
 @PaxWicketMountPoint(mountPoint = "/preferences")
 public class PreferencesPage extends SinglePage {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "preferencesProviders")
     private List<PanelProvider> providers;
 
diff --git a/core/src/test/java/org/apache/karaf/webconsole/core/TestTargetLocator.java b/core/src/test/java/org/apache/karaf/webconsole/core/TestTargetLocator.java
index 5eab88a..d478342 100644
--- a/core/src/test/java/org/apache/karaf/webconsole/core/TestTargetLocator.java
+++ b/core/src/test/java/org/apache/karaf/webconsole/core/TestTargetLocator.java
@@ -21,6 +21,7 @@
 /**
  * Test target locator for test injections.
  */
+@SuppressWarnings("serial")
 public class TestTargetLocator implements IProxyTargetLocator {
 
     private Object value;
diff --git a/core/src/test/java/org/apache/karaf/webconsole/core/page/SidebarPageTest.java b/core/src/test/java/org/apache/karaf/webconsole/core/page/SidebarPageTest.java
index 9d66de1..963a500 100644
--- a/core/src/test/java/org/apache/karaf/webconsole/core/page/SidebarPageTest.java
+++ b/core/src/test/java/org/apache/karaf/webconsole/core/page/SidebarPageTest.java
@@ -74,6 +74,7 @@
         return AlwaysAuthenticatedWebSession.class;
     }
 
+    @SuppressWarnings("serial")
     static class TestSidebarPage extends SidebarPage {
         public TestSidebarPage(SidebarProvider provider) {
             setSidebarProvider(provider);
diff --git a/core/src/test/java/org/apache/karaf/webconsole/core/page/SinglePageTest.java b/core/src/test/java/org/apache/karaf/webconsole/core/page/SinglePageTest.java
index 5d00710..b0158fd 100644
--- a/core/src/test/java/org/apache/karaf/webconsole/core/page/SinglePageTest.java
+++ b/core/src/test/java/org/apache/karaf/webconsole/core/page/SinglePageTest.java
@@ -205,5 +205,6 @@
     // as ConsoleTabProviders are OSGi services.
     interface SerializableConsoleTabProvider extends Serializable, ConsoleTabProvider {}
 
+    @SuppressWarnings("serial")
     public static class SinglePageExt extends SinglePage {}
 }
diff --git a/core/src/test/java/org/apache/karaf/webconsole/core/test/AlwaysAuthenticatedWebSession.java b/core/src/test/java/org/apache/karaf/webconsole/core/test/AlwaysAuthenticatedWebSession.java
index fb52c25..f7754ec 100644
--- a/core/src/test/java/org/apache/karaf/webconsole/core/test/AlwaysAuthenticatedWebSession.java
+++ b/core/src/test/java/org/apache/karaf/webconsole/core/test/AlwaysAuthenticatedWebSession.java
@@ -24,6 +24,7 @@
  * Dummy session which does not handle authentication, simply returns true for
  * all input values and only one role.
  */
+@SuppressWarnings("serial")
 public class AlwaysAuthenticatedWebSession extends WebConsoleSession {
 
     private Roles roles;
diff --git a/core/src/test/java/org/apache/karaf/webconsole/core/test/BaseLinkAnswer.java b/core/src/test/java/org/apache/karaf/webconsole/core/test/BaseLinkAnswer.java
index bc4c00e..73edfcc 100644
--- a/core/src/test/java/org/apache/karaf/webconsole/core/test/BaseLinkAnswer.java
+++ b/core/src/test/java/org/apache/karaf/webconsole/core/test/BaseLinkAnswer.java
@@ -25,6 +25,7 @@
 /**
  * Base class for link answers in many providers..
  */
+@SuppressWarnings("serial")
 public abstract class BaseLinkAnswer<T> implements IAnswer<T>, Serializable {
 
     public final T answer() throws Throwable {
diff --git a/core/src/test/java/org/apache/karaf/webconsole/core/test/LinkAnswer.java b/core/src/test/java/org/apache/karaf/webconsole/core/test/LinkAnswer.java
index d46768e..48b35e3 100644
--- a/core/src/test/java/org/apache/karaf/webconsole/core/test/LinkAnswer.java
+++ b/core/src/test/java/org/apache/karaf/webconsole/core/test/LinkAnswer.java
@@ -23,6 +23,7 @@
 /**
  * Easy mock answer to return prepared link.
  */
+@SuppressWarnings("serial")
 public class LinkAnswer extends BaseLinkAnswer<Link<Page>> {
 
     private String label;
diff --git a/core/src/test/java/org/apache/karaf/webconsole/core/test/LinksAnswer.java b/core/src/test/java/org/apache/karaf/webconsole/core/test/LinksAnswer.java
index 71fc61a..da2ac6e 100644
--- a/core/src/test/java/org/apache/karaf/webconsole/core/test/LinksAnswer.java
+++ b/core/src/test/java/org/apache/karaf/webconsole/core/test/LinksAnswer.java
@@ -29,6 +29,7 @@
 /**
  * An easy mock answer which returns list of links.
  */
+@SuppressWarnings("serial")
 public class LinksAnswer extends BaseLinkAnswer<List<Link<Page>>> {
 
     private Map<String, Class<? extends WebPage>> links = new LinkedHashMap<String, Class<? extends WebPage>>();
diff --git a/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/navigation/CxfConsoleTabProvider.java b/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/navigation/CxfConsoleTabProvider.java
index 181dcc4..9db1532 100644
--- a/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/navigation/CxfConsoleTabProvider.java
+++ b/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/navigation/CxfConsoleTabProvider.java
@@ -25,6 +25,9 @@
 import org.apache.wicket.Page;
 import org.apache.wicket.markup.html.link.Link;
 
+/**
+ * Navigation provider for console, introduces CXF module.
+ */
 public class CxfConsoleTabProvider implements ConsoleTabProvider {
 
     public List<Link<Page>> getItems(String componentId, String labelId) {
diff --git a/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/BusModel.java b/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/BusModel.java
index 3e94285..317c7fb 100644
--- a/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/BusModel.java
+++ b/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/BusModel.java
@@ -21,8 +21,12 @@
 import org.apache.cxf.Bus;
 import org.apache.wicket.model.LoadableDetachableModel;
 
+/**
+ * Model of CXF bus.
+ */
 public class BusModel extends LoadableDetachableModel<Bus> {
 
+    private static final long serialVersionUID = 1L;
     private List<Bus> buses;
     private String id;
 
diff --git a/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/CxfBusesActionPanel.java b/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/CxfBusesActionPanel.java
index a6de9d2..9858370 100644
--- a/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/CxfBusesActionPanel.java
+++ b/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/CxfBusesActionPanel.java
@@ -27,13 +27,19 @@
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
+/**
+ * Action panel for single CXF panel.
+ */
 public class CxfBusesActionPanel extends ActionsPanel<Bus> {
 
+    private static final long serialVersionUID = 1L;
+
     public CxfBusesActionPanel(String componentId, IModel<Bus> model) {
         super(componentId, model);
     }
 
     @Override
+    @SuppressWarnings("rawtypes")
     protected List<Link> getLinks(Bus object, String linkId, String labelId) {
         List<Link> links = new ArrayList<Link>();
 
diff --git a/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/CxfServicesPage.java b/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/CxfServicesPage.java
index 259c4ab..a3c4b09 100644
--- a/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/CxfServicesPage.java
+++ b/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/CxfServicesPage.java
@@ -36,11 +36,17 @@
 import org.apache.wicket.model.Model;
 import org.ops4j.pax.wicket.api.PaxWicketBean;
 
+/**
+ * Page representing CXF buses list.
+ */
 public class CxfServicesPage extends SinglePage {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "busList")
     private List<Bus> buses;
 
+    @SuppressWarnings("serial")
     public CxfServicesPage() {
         @SuppressWarnings("unchecked")
         IColumn<Bus>[] columns = new IColumn[] {
diff --git a/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/DetailsPage.java b/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/DetailsPage.java
index a8a719a..6df857e 100644
--- a/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/DetailsPage.java
+++ b/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/DetailsPage.java
@@ -39,14 +39,20 @@
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.ops4j.pax.wicket.api.PaxWicketBean;
 
+/**
+ * Page with bus details.
+ */
 public class DetailsPage extends SinglePage {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "busList")
     private List<Bus> buses;
 
     private TraceInterceptor traceIn = new TraceInterceptor(Phase.RECEIVE, "in");
     private TraceInterceptor traceOut = new TraceInterceptor(Phase.PRE_STREAM, "out");
 
+    @SuppressWarnings({"serial", "rawtypes"})
     public DetailsPage(PageParameters params) {
         String busId = params.get("busId").toString();
 
@@ -130,9 +136,9 @@
                 });
 
                 Endpoint endpoint = server.getEndpoint();
-                List<Interceptor> inInterceptors = (List) endpoint.getInInterceptors();
-                List<Interceptor> outInterceptors = (List) endpoint.getOutInterceptors();
-                List<Interceptor> faultInterceptors = (List) endpoint.getInFaultInterceptors();
+                List<Interceptor<?>> inInterceptors = (List) endpoint.getInInterceptors();
+                List<Interceptor<?>> outInterceptors = (List) endpoint.getOutInterceptors();
+                List<Interceptor<?>> faultInterceptors = (List) endpoint.getInFaultInterceptors();
 
                 item.add(new InterceptorView("in-interceptors", inInterceptors));
                 item.add(new InterceptorView("out-interceptors", outInterceptors));
diff --git a/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/InterceptorView.java b/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/InterceptorView.java
index 1cdc24a..1b25456 100644
--- a/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/InterceptorView.java
+++ b/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/services/InterceptorView.java
@@ -25,20 +25,25 @@
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 
-public class InterceptorView extends ListView<Interceptor> {
+/**
+ * List of interceptors.
+ */
+public class InterceptorView extends ListView<Interceptor<?>> {
 
-    public InterceptorView(String id, List<Interceptor> interceptors) {
+    private static final long serialVersionUID = 1L;
+
+    public InterceptorView(String id, List<Interceptor<?>> interceptors) {
         super(id, interceptors);
     }
 
     @Override
-    protected void populateItem(ListItem<Interceptor> item) {
+    protected void populateItem(ListItem<Interceptor<?>> item) {
         Interceptor<? extends Message> interceptor = item.getModelObject();
 
         item.add(new Label("class", interceptor.getClass().getName()));
 
         if (interceptor instanceof PhaseInterceptor) {
-            PhaseInterceptor phaseInterceptor = (PhaseInterceptor) interceptor;
+            PhaseInterceptor<?> phaseInterceptor = (PhaseInterceptor<?>) interceptor;
             item.add(new Label("phase", phaseInterceptor.getPhase()));
             item.add(new Label("id", phaseInterceptor.getId()));
         } else {
diff --git a/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/trace/TraceInterceptor.java b/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/trace/TraceInterceptor.java
index 417d900..0e8d51c 100644
--- a/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/trace/TraceInterceptor.java
+++ b/cxf/src/main/java/org/apache/karaf/webconsole/cxf/internal/trace/TraceInterceptor.java
@@ -22,8 +22,13 @@
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.AbstractPhaseInterceptor;
 
+/**
+ * Tracing interceptor for CXF.
+ */
 public class TraceInterceptor extends AbstractPhaseInterceptor<Message> implements Serializable {
 
+    private static final long serialVersionUID = 1L;
+
     private String direction;
 
     public TraceInterceptor(String phase, String direction) {
diff --git a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/AdminPage.java b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/AdminPage.java
index 1144cb5..26d8d4a 100644
--- a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/AdminPage.java
+++ b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/AdminPage.java
@@ -25,6 +25,8 @@
  */
 public class AdminPage extends SinglePage {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "adminService")
     protected AdminService admin;
 
diff --git a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/create/CreateInstancePage.java b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/create/CreateInstancePage.java
index 1dd20c2..212384a 100644
--- a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/create/CreateInstancePage.java
+++ b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/create/CreateInstancePage.java
@@ -35,6 +35,9 @@
 @PaxWicketMountPoint(mountPoint = "/karaf/admin/create")
 public class CreateInstancePage extends AdminPage {
 
+    private static final long serialVersionUID = 1L;
+
+    @SuppressWarnings("serial")
     public CreateInstancePage() {
         WicketInstance instance = new WicketInstance();
         instance.setSettings(new WicketInstanceSettings());
diff --git a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/list/InstanceActionsPanel.java b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/list/InstanceActionsPanel.java
index c4f4595..b2af988 100644
--- a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/list/InstanceActionsPanel.java
+++ b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/list/InstanceActionsPanel.java
@@ -31,13 +31,14 @@
  */
 public class InstanceActionsPanel extends ActionsPanel<Instance> {
 
-    private static final long serialVersionUID = 1205787953299100012L;
+    private static final long serialVersionUID = 1L;
 
     public InstanceActionsPanel(String id, IModel<Instance> model) {
         super(id, model);
     }
 
     @Override
+    @SuppressWarnings({"serial", "rawtypes"})
     protected List<Link> getLinks(Instance object, String linkId, final String labelId) {
         List<Link> links = new ArrayList<Link>();
 
diff --git a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/list/InstancePage.java b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/list/InstancePage.java
index d309061..83a0ce5 100644
--- a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/list/InstancePage.java
+++ b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/list/InstancePage.java
@@ -39,6 +39,8 @@
 @PaxWicketMountPoint(mountPoint = "/karaf/instance")
 public class InstancePage extends AdminPage {
 
+    private static final long serialVersionUID = 1L;
+
     @SuppressWarnings("unchecked")
     public InstancePage() {
         IColumn<Instance>[] columns = new IColumn[] {
diff --git a/karaf/core/src/main/java/org/apache/karaf/webconsole/karaf/core/KarafOverviewPage.java b/karaf/core/src/main/java/org/apache/karaf/webconsole/karaf/core/KarafOverviewPage.java
index d4b3cf5..985bfe2 100644
--- a/karaf/core/src/main/java/org/apache/karaf/webconsole/karaf/core/KarafOverviewPage.java
+++ b/karaf/core/src/main/java/org/apache/karaf/webconsole/karaf/core/KarafOverviewPage.java
@@ -28,6 +28,8 @@
 @PaxWicketMountPoint(mountPoint = "/karaf")
 public class KarafOverviewPage extends SinglePage {
 
+    private static final long serialVersionUID = 1L;
+
     public KarafOverviewPage() {
         setDefaultModel(new CompoundPropertyModel<WicketKaraf>(new WicketKaraf()));
 
diff --git a/karaf/core/src/main/java/org/apache/karaf/webconsole/karaf/core/model/WicketKaraf.java b/karaf/core/src/main/java/org/apache/karaf/webconsole/karaf/core/model/WicketKaraf.java
index 4a733a6..5d4f6c9 100644
--- a/karaf/core/src/main/java/org/apache/karaf/webconsole/karaf/core/model/WicketKaraf.java
+++ b/karaf/core/src/main/java/org/apache/karaf/webconsole/karaf/core/model/WicketKaraf.java
@@ -23,6 +23,8 @@
  */
 public class WicketKaraf implements Serializable {
 
+    private static final long serialVersionUID = 1L;
+
     public String getVersion() {
         return System.getProperty("karaf.version");
     }
diff --git a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/FeatureModel.java b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/FeatureModel.java
index 1bd285d..0c9797a 100644
--- a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/FeatureModel.java
+++ b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/FeatureModel.java
@@ -20,8 +20,13 @@
 import org.apache.karaf.features.FeaturesService;
 import org.apache.wicket.model.LoadableDetachableModel;
 
+/**
+ * Feature model.
+ */
 public class FeatureModel extends LoadableDetachableModel<Feature> {
 
+    private static final long serialVersionUID = 1L;
+
     private FeaturesService service;
     private String version;
     private String name;
diff --git a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/FeaturesProvider.java b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/FeaturesProvider.java
index c720015..fa4c397 100644
--- a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/FeaturesProvider.java
+++ b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/FeaturesProvider.java
@@ -29,8 +29,13 @@
 import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
 import org.apache.wicket.model.IModel;
 
+/**
+ * Feature list data provider.
+ */
 public class FeaturesProvider extends SortableDataProvider<Feature> {
 
+    private static final long serialVersionUID = 1L;
+
     private final FeaturesService service;
 
     public FeaturesProvider(FeaturesService service) {
diff --git a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/KarafFeaturesPage.java b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/KarafFeaturesPage.java
index ebe5873..e8e605c 100644
--- a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/KarafFeaturesPage.java
+++ b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/KarafFeaturesPage.java
@@ -20,8 +20,13 @@
 import org.apache.karaf.webconsole.core.page.SinglePage;
 import org.ops4j.pax.wicket.api.PaxWicketBean;
 
+/**
+ * Base page for karaf features.
+ */
 public class KarafFeaturesPage extends SinglePage {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "featuresService")
     protected FeaturesService featuresService;
 
diff --git a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/MissingFeatureException.java b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/MissingFeatureException.java
index 1a0ccd0..b25e2f1 100644
--- a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/MissingFeatureException.java
+++ b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/MissingFeatureException.java
@@ -16,8 +16,13 @@
  */
 package org.apache.karaf.webconsole.karaf.feature;
 
+/**
+ * Exception thrown when feature is missing.
+ */
 public class MissingFeatureException extends RuntimeException {
 
+    private static final long serialVersionUID = 1L;
+
     public MissingFeatureException(String name, String version) {
         super("Feature " + name + " with version " + version + " is no longer available");
     }
diff --git a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/RepositoriesProvider.java b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/RepositoriesProvider.java
index 0daf07f..155b130 100644
--- a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/RepositoriesProvider.java
+++ b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/RepositoriesProvider.java
@@ -25,8 +25,13 @@
 import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
 import org.apache.wicket.model.IModel;
 
+/**
+ * Data provider for repository list.
+ */
 public class RepositoriesProvider extends SortableDataProvider<Repository> {
 
+    private static final long serialVersionUID = 1L;
+
     private final FeaturesService service;
 
     public RepositoriesProvider(FeaturesService service) {
@@ -36,7 +41,7 @@
 
     public Iterator<Repository> iterator(int first, int count) {
         return Arrays.asList(service.listRepositories())
-                .subList(first, first + count).iterator();
+            .subList(first, first + count).iterator();
     }
 
     public int size() {
diff --git a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/feature/FeaturesActionsPanel.java b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/feature/FeaturesActionsPanel.java
index ebda174..021ea3d 100644
--- a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/feature/FeaturesActionsPanel.java
+++ b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/feature/FeaturesActionsPanel.java
@@ -22,14 +22,19 @@
 import org.apache.karaf.features.Feature;
 import org.apache.karaf.features.FeaturesService;
 import org.apache.karaf.webconsole.core.table.ActionsPanel;
-import org.apache.wicket.behavior.SimpleAttributeModifier;
+import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.model.IModel;
 import org.ops4j.pax.wicket.api.PaxWicketBean;
 
+/**
+ * Actions for single feature.
+ */
 public class FeaturesActionsPanel extends ActionsPanel<Feature> {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "featuresService")
     private FeaturesService featuresService;
 
@@ -38,6 +43,7 @@
     }
 
     @Override
+    @SuppressWarnings({"rawtypes", "serial"})
     protected List<Link> getLinks(Feature object, String linkId, String labelId) {
         Link link = new Link(linkId) {
 
@@ -57,7 +63,7 @@
             }
         };
 
-        link.add(new SimpleAttributeModifier("class", isInstalled(object) ? "icon-eject" : "icon-play"));
+        link.add(new AttributeModifier("class", isInstalled(object) ? "icon-eject" : "icon-play"));
         link.add(new Label(labelId));
 
         // add image to the link
diff --git a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/feature/FeaturesPage.java b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/feature/FeaturesPage.java
index 471b13e..e989728 100644
--- a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/feature/FeaturesPage.java
+++ b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/feature/FeaturesPage.java
@@ -45,8 +45,11 @@
 @PaxWicketMountPoint(mountPoint = "/karaf/features")
 public class FeaturesPage extends KarafFeaturesPage {
 
+    private static final long serialVersionUID = 1L;
+
     private Map<String, String> feature2repo = new HashMap<String, String>();
 
+    @SuppressWarnings({"rawtypes", "serial"})
     public FeaturesPage() throws Exception {
         add(new CssBehavior(FeaturesPage.class, "features.css"));
 
@@ -65,7 +68,7 @@
 
         List<IColumn<Feature>> columns = new ArrayList<IColumn<Feature>>();
         columns.add(new PropertyColumn<Feature>(new StringResourceModel("table.version", this, version), "version", "version"));
-        columns.add(new PropertyColumn<Feature>(new StringResourceModel("table.name", this, state), "name", "name"));
+        columns.add(new PropertyColumn<Feature>(new StringResourceModel("table.name", this, name), "name", "name"));
         columns.add(new AbstractColumn<Feature>(new StringResourceModel("table.repository", this, repository), "repository") {
             public void populateItem(Item<ICellPopulator<Feature>> cellItem, String componentId, IModel<Feature> rowModel) {
                 cellItem.add(new Label(componentId, feature2repo.get(rowModel.getObject().getId())));
diff --git a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/model/RepositoryModel.java b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/model/RepositoryModel.java
index cedf1dc..2754a9c 100644
--- a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/model/RepositoryModel.java
+++ b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/model/RepositoryModel.java
@@ -22,8 +22,13 @@
 import org.apache.karaf.features.Repository;
 import org.apache.wicket.model.LoadableDetachableModel;
 
+/**
+ * Repository model.
+ */
 public class RepositoryModel extends LoadableDetachableModel<Repository> {
 
+    private static final long serialVersionUID = 1L;
+
     private final FeaturesService service;
     private URI uri;
 
diff --git a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/model/RepositoryNotFoundException.java b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/model/RepositoryNotFoundException.java
index 9e17786..528f45e 100644
--- a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/model/RepositoryNotFoundException.java
+++ b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/model/RepositoryNotFoundException.java
@@ -18,8 +18,13 @@
 
 import java.net.URI;
 
+/**
+ * Exception thrown when repository is not found.
+ */
 public class RepositoryNotFoundException extends RuntimeException {
 
+    private static final long serialVersionUID = 1L;
+
     public RepositoryNotFoundException(URI uri) {
         super(uri.toString());
     }
diff --git a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/repository/AddRepositoryPage.java b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/repository/AddRepositoryPage.java
index f9457b0..68837c3 100644
--- a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/repository/AddRepositoryPage.java
+++ b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/repository/AddRepositoryPage.java
@@ -29,29 +29,34 @@
 import org.apache.wicket.model.Model;
 import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
 
+/**
+ * Repository input page.
+ */
 @PaxWicketMountPoint(mountPoint = "/karaf/repositories/add")
 public class AddRepositoryPage extends KarafFeaturesPage {
 
+    private static final long serialVersionUID = 1L;
+
+    @SuppressWarnings({"rawtypes", "unchecked", "serial"})
     public AddRepositoryPage() {
         final IModel<Repository> model = new Model(new WicketRepository());
 
         final Form<Repository> form = new Form<Repository>("form", model);
         form.add(new AddRepositoryPanel("repository", model));
         form.add(new SubmitLink("submit") {
-            private static final long serialVersionUID = 1L;
-
             @Override
             public void onSubmit() {
-				URI uri = model.getObject().getURI();
+                URI uri = model.getObject().getURI();
                 try {
-					featuresService.addRepository(uri);
-				} catch (Exception e) {
-					Map<String, Object> map = new HashMap<String, Object>();
-					map.put("uri", uri);
-					form.error("Can not create repository " + e.getMessage(), map);
-				}
+                    featuresService.addRepository(uri);
+                } catch (Exception e) {
+                    Map<String, Object> map = new HashMap<String, Object>();
+                    map.put("uri", uri);
+                    form.error("Can not create repository " + e.getMessage(), map);
+                }
             }
         });
+
         add(form);
     }
 
diff --git a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/repository/AddRepositoryPanel.java b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/repository/AddRepositoryPanel.java
index 2c068fd..7d773f3 100644
--- a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/repository/AddRepositoryPanel.java
+++ b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/repository/AddRepositoryPanel.java
@@ -28,6 +28,9 @@
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
 
+/**
+ * Repository add panel.
+ */
 public class AddRepositoryPanel extends Panel {
 
     private static final long serialVersionUID = 1L;
diff --git a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/repository/RepositoriesActionPanel.java b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/repository/RepositoriesActionPanel.java
index b43ec7e..297baea 100644
--- a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/repository/RepositoriesActionPanel.java
+++ b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/repository/RepositoriesActionPanel.java
@@ -28,8 +28,13 @@
 import org.apache.wicket.model.IModel;
 import org.ops4j.pax.wicket.api.PaxWicketBean;
 
+/**
+ * Actions for repository.
+ */
 public class RepositoriesActionPanel extends ActionsPanel<Repository> {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "featuresService")
     private FeaturesService featuresService;
 
@@ -38,6 +43,7 @@
     }
 
     @Override
+    @SuppressWarnings({"rawtypes", "serial"})
     protected List<Link> getLinks(Repository object, String linkId, String labelId) {
         List<Link> links = new ArrayList<Link>();
 
diff --git a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/repository/RepositoriesPage.java b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/repository/RepositoriesPage.java
index d3da9ab..097fd20 100644
--- a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/repository/RepositoriesPage.java
+++ b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/repository/RepositoriesPage.java
@@ -35,9 +35,15 @@
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
 
+/**
+ * Page with list of repositories.
+ */
 @PaxWicketMountPoint(mountPoint = "/karaf/repositories")
 public class RepositoriesPage extends KarafFeaturesPage {
 
+    private static final long serialVersionUID = 1L;
+
+    @SuppressWarnings({"rawtypes", "serial", "unchecked"})
     public RepositoriesPage() {
         IColumn<Repository>[] columns = new IColumn[] {
             new OrdinalColumn<Repository>(),
diff --git a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/widget/FeatureWidgetPanel.java b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/widget/FeatureWidgetPanel.java
index 36a97cd..4251998 100644
--- a/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/widget/FeatureWidgetPanel.java
+++ b/karaf/feature/src/main/java/org/apache/karaf/webconsole/karaf/feature/widget/FeatureWidgetPanel.java
@@ -24,8 +24,13 @@
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.html.panel.Panel;
 
+/**
+ * Dashboard panel.
+ */
 public class FeatureWidgetPanel extends Panel {
 
+    private static final long serialVersionUID = 1L;
+
     public FeatureWidgetPanel(String id, FeaturesService service) {
         super(id);
 
diff --git a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/BlueprintDataProvider.java b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/BlueprintDataProvider.java
index 56aef1d..a39ad63 100644
--- a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/BlueprintDataProvider.java
+++ b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/BlueprintDataProvider.java
@@ -25,8 +25,13 @@
 import org.apache.wicket.model.IModel;
 import org.osgi.framework.ServiceReference;
 
+/**
+ * Data provider for bundle list.
+ */
 public class BlueprintDataProvider extends SortableDataProvider<ServiceReference> {
 
+    private static final long serialVersionUID = 1L;
+
     private final List<ServiceReference> containers;
 
     public BlueprintDataProvider(List<ServiceReference> containers) {
diff --git a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/BlueprintPage.java b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/BlueprintPage.java
index 8471ab4..2c10b1d 100644
--- a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/BlueprintPage.java
+++ b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/BlueprintPage.java
@@ -24,9 +24,14 @@
 import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
 import org.osgi.framework.ServiceReference;
 
+/**
+ * Blueprint list page.
+ */
 @PaxWicketMountPoint(mountPoint = "/osgi/blueprint")
 public class BlueprintPage extends SinglePage {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "containers")
     private List<ServiceReference> containers;
 
diff --git a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/bundle/BlueprintActionProvider.java b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/bundle/BlueprintActionProvider.java
index 35b4f1d..bc26b77 100644
--- a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/bundle/BlueprintActionProvider.java
+++ b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/bundle/BlueprintActionProvider.java
@@ -25,7 +25,9 @@
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.osgi.framework.Bundle;
 
-
+/**
+ * Action provider for blueprint.
+ */
 public class BlueprintActionProvider implements IActionProvider {
 
     private IBlueprintBundleStateTracker tracker;
diff --git a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/bundle/BlueprintColumnProvider.java b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/bundle/BlueprintColumnProvider.java
index 307ed95..2ab809a 100644
--- a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/bundle/BlueprintColumnProvider.java
+++ b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/bundle/BlueprintColumnProvider.java
@@ -39,6 +39,7 @@
         this.tracker = tracker;
     }
 
+    @SuppressWarnings("serial")
     public IColumn<Bundle> getColumn() {
         return new AbstractColumn<Bundle>(Model.of("Blueprint")) {
             public void populateItem(Item<ICellPopulator<Bundle>> cellItem, String componentId, IModel<Bundle> rowModel) {
diff --git a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/details/DetailsPage.java b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/details/DetailsPage.java
index befefc7..28d5bc9 100644
--- a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/details/DetailsPage.java
+++ b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/details/DetailsPage.java
@@ -36,6 +36,9 @@
 @PaxWicketMountPoint(mountPoint = "/osgi/blueprint/details")
 public class DetailsPage extends OsgiPage {
 
+    private static final long serialVersionUID = 1L;
+
+    @SuppressWarnings("serial")
     public DetailsPage(PageParameters params) {
         add(new DraculaBehavior());
         add(new JavaScriptBehavior(DetailsPage.class, "details.js"));
diff --git a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/details/MetadataModel.java b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/details/MetadataModel.java
index 0306934..b4bf6fb 100644
--- a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/details/MetadataModel.java
+++ b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/details/MetadataModel.java
@@ -26,6 +26,9 @@
 import org.osgi.service.blueprint.container.BlueprintContainer;
 import org.osgi.service.blueprint.reflect.ComponentMetadata;
 
+/**
+ * Model for blueprint metadata.
+ */
 class MetadataModel extends LoadableDetachableModel<List<ComponentMetadata>> {
 
     private static final long serialVersionUID = 1L;
diff --git a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/view/BlueprintActionsPanel.java b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/view/BlueprintActionsPanel.java
index ef60f88..74de833 100644
--- a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/view/BlueprintActionsPanel.java
+++ b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/view/BlueprintActionsPanel.java
@@ -28,13 +28,19 @@
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.osgi.framework.ServiceReference;
 
+/**
+ * Actions panel for blueprint.
+ */
 public class BlueprintActionsPanel extends ActionsPanel<ServiceReference> {
 
+    private static final long serialVersionUID = 1L;
+
     public BlueprintActionsPanel(String componentId, IModel<ServiceReference> model) {
         super(componentId, model);
     }
 
     @Override
+    @SuppressWarnings({"rawtypes", "unchecked"})
     protected List<Link> getLinks(ServiceReference object, String linkId, String labelId) {
         PageParameters params = new PageParameters();
         params.add("bundleId", object.getBundle().getBundleId());
diff --git a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/view/BlueprintDataTable.java b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/view/BlueprintDataTable.java
index f938fd4..13c3936 100644
--- a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/view/BlueprintDataTable.java
+++ b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/view/BlueprintDataTable.java
@@ -28,9 +28,14 @@
 import org.apache.wicket.model.Model;
 import org.osgi.framework.ServiceReference;
 
+/**
+ * Table with blueprint containers.
+ */
 public class BlueprintDataTable extends DefaultDataTable<ServiceReference> {
 
-    @SuppressWarnings({"rawtypes", "unchecked"})
+    private static final long serialVersionUID = 1L;
+
+    @SuppressWarnings({"rawtypes", "unchecked", "serial"})
     private static final List COLUMNS = Arrays.asList(
         new DefaultServiceReferencePropertyColumn("Id", "service.id"),
         new DefaultServiceReferencePropertyColumn("Container", "osgi.blueprint.container.symbolicname"),
@@ -42,6 +47,7 @@
         }
     );
 
+    @SuppressWarnings("unchecked")
     public BlueprintDataTable(String id, ISortableDataProvider<ServiceReference> dataProvider, int rowsPerPage) {
         super(id, COLUMNS, dataProvider, rowsPerPage);
     }
diff --git a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/view/DefaultServiceReferencePropertyColumn.java b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/view/DefaultServiceReferencePropertyColumn.java
index 0252871..ab39e82 100644
--- a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/view/DefaultServiceReferencePropertyColumn.java
+++ b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/view/DefaultServiceReferencePropertyColumn.java
@@ -18,8 +18,13 @@
 
 import org.apache.wicket.markup.html.basic.Label;
 
+/**
+ * Column representing given property from service reference.
+ */
 public class DefaultServiceReferencePropertyColumn extends ServiceReferencePropertyColumn {
 
+    private static final long serialVersionUID = 1L;
+
     public DefaultServiceReferencePropertyColumn(String displayModel, String sortProperty) {
         super(displayModel, sortProperty);
     }
diff --git a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/view/ServiceReferencePropertyColumn.java b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/view/ServiceReferencePropertyColumn.java
index ea23e34..0841b64 100644
--- a/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/view/ServiceReferencePropertyColumn.java
+++ b/osgi/blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/view/ServiceReferencePropertyColumn.java
@@ -24,8 +24,13 @@
 import org.apache.wicket.model.Model;
 import org.osgi.framework.ServiceReference;
 
+/**
+ * Column representing single service reference property.
+ */
 public abstract class ServiceReferencePropertyColumn extends AbstractColumn<ServiceReference> {
 
+    private static final long serialVersionUID = 1L;
+
     public ServiceReferencePropertyColumn(String displayModel, String sortProperty) {
         super(Model.of(displayModel), sortProperty);
     }
diff --git a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/ConfigurationEditPage.java b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/ConfigurationEditPage.java
index b55cb0c..05f6ba9 100644
--- a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/ConfigurationEditPage.java
+++ b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/ConfigurationEditPage.java
@@ -36,13 +36,19 @@
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 
+/**
+ * Configuration edit page.
+ */
 @PaxWicketMountPoint(mountPoint = "/osgi/configuration/edit")
 public class ConfigurationEditPage extends OsgiPage {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "configurationAdmin")
     private ConfigurationAdmin configurationAdmin;
     private String pid;
 
+    @SuppressWarnings("serial")
     public ConfigurationEditPage(PageParameters params) {
         pid = params.get("pid").toString();
 
diff --git a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/ConfigurationProvider.java b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/ConfigurationProvider.java
index 9145d9b..4a1fff0 100644
--- a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/ConfigurationProvider.java
+++ b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/ConfigurationProvider.java
@@ -26,8 +26,13 @@
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 
+/**
+ * Data provider for configuration list.
+ */
 public class ConfigurationProvider extends SortableDataProvider<Configuration> {
 
+    private static final long serialVersionUID = 1L;
+
     private Configuration[] configurations = new Configuration[0];
     private ConfigurationAdmin configurationAdmin;
 
diff --git a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/ConfigurationRemovePage.java b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/ConfigurationRemovePage.java
index 4aeb111..93fcdd9 100644
--- a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/ConfigurationRemovePage.java
+++ b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/ConfigurationRemovePage.java
@@ -31,6 +31,8 @@
 @PaxWicketMountPoint(mountPoint = "/osgi/configuration/remove")
 public class ConfigurationRemovePage extends OsgiPage {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "configurationAdmin")
     private ConfigurationAdmin configurationAdmin;
     private String pid;
diff --git a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/ConfigurationsPage.java b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/ConfigurationsPage.java
index c846953..fdc4b53 100644
--- a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/ConfigurationsPage.java
+++ b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/ConfigurationsPage.java
@@ -23,9 +23,14 @@
 import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
 import org.osgi.service.cm.ConfigurationAdmin;
 
+/**
+ * Base page for configuration admin extension.
+ */
 @PaxWicketMountPoint(mountPoint = "/osgi/configuration")
 public class ConfigurationsPage extends OsgiPage {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "configurationAdmin")
     private ConfigurationAdmin configurationAdmin;
 
diff --git a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/model/ConfigurationModel.java b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/model/ConfigurationModel.java
index 2cc4fad..839ac93 100644
--- a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/model/ConfigurationModel.java
+++ b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/model/ConfigurationModel.java
@@ -22,8 +22,13 @@
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 
+/**
+ * Model for configuration objects.
+ */
 public class ConfigurationModel extends LoadableDetachableModel<Configuration> {
 
+    private static final long serialVersionUID = 1L;
+
     private String pid;
     private ConfigurationAdmin configurationAdmin;
 
diff --git a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/model/ConfigurationNotFoundException.java b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/model/ConfigurationNotFoundException.java
index 1fdc6a4..35c7b46 100644
--- a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/model/ConfigurationNotFoundException.java
+++ b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/model/ConfigurationNotFoundException.java
@@ -16,8 +16,13 @@
  */
 package org.apache.karaf.webconsole.osgi.config.model;
 
+/**
+ * Exception thrown when configuration is not found.
+ */
 public class ConfigurationNotFoundException extends RuntimeException {
 
+    private static final long serialVersionUID = 1L;
+
     public ConfigurationNotFoundException(String pid) {
         super(pid);
     }
diff --git a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/model/ConfigurationsModel.java b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/model/ConfigurationsModel.java
index 91177ff..50e26ea 100644
--- a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/model/ConfigurationsModel.java
+++ b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/model/ConfigurationsModel.java
@@ -20,8 +20,13 @@
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 
+/**
+ * Model for configurations.
+ */
 public class ConfigurationsModel extends LoadableDetachableModel<Configuration[]> {
 
+    private static final long serialVersionUID = 1L;
+
     private final ConfigurationAdmin configurationAdmin;
 
     public ConfigurationsModel(ConfigurationAdmin configurationAdmin) {
diff --git a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/view/ConfigurationRemoveForm.java b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/view/ConfigurationRemoveForm.java
index b8f511e..0335dee 100644
--- a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/view/ConfigurationRemoveForm.java
+++ b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/view/ConfigurationRemoveForm.java
@@ -31,6 +31,8 @@
  */
 public class ConfigurationRemoveForm extends Form<Configuration> {
 
+    private static final long serialVersionUID = 1L;
+
     public ConfigurationRemoveForm(String id, IModel<Configuration> model) {
         super(id, model);
 
diff --git a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/view/ConfigurationsActionPanel.java b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/view/ConfigurationsActionPanel.java
index c6ec01a..fda40ff 100644
--- a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/view/ConfigurationsActionPanel.java
+++ b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/view/ConfigurationsActionPanel.java
@@ -30,14 +30,19 @@
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.osgi.service.cm.Configuration;
 
-@SuppressWarnings("rawtypes")
+/**
+ * Action panel for configuration.
+ */
 class ConfigurationsActionPanel extends ActionsPanel<Configuration> {
 
+    private static final long serialVersionUID = 1L;
+
     public ConfigurationsActionPanel(String componentId, IModel<Configuration> model) {
         super(componentId, model);
     }
 
     @Override
+    @SuppressWarnings("rawtypes")
     protected List<Link> getLinks(Configuration object, String linkId, String labelId) {
         PageParameters params = new PageParameters();
         params.add("pid", object.getPid());
diff --git a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/view/ConfigurationsDataTable.java b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/view/ConfigurationsDataTable.java
index c57b8b5..4911867 100644
--- a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/view/ConfigurationsDataTable.java
+++ b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/view/ConfigurationsDataTable.java
@@ -33,9 +33,11 @@
 /**
  * Datatable which shows list of configurations from OSGi {@link ConfigurationAdmin}.
  */
-@SuppressWarnings({"rawtypes", "unchecked"})
 public class ConfigurationsDataTable extends DefaultDataTable<Configuration> {
 
+    private static final long serialVersionUID = 1L;
+
+    @SuppressWarnings({"rawtypes", "serial", "unchecked"})
     private static List COLUMNS = Arrays.asList(
         new PropertyColumn<Configuration>(Model.of("pid"), "pid"),
         new AbstractColumn<Configuration>(Model.of("operations")) {
@@ -45,6 +47,7 @@
         }
     );
 
+    @SuppressWarnings("unchecked")
     public ConfigurationsDataTable(String id, ISortableDataProvider<Configuration> dataProvider, int rowsPerPage) {
         super(id, COLUMNS, dataProvider, rowsPerPage);
     }
diff --git a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/view/FactoryPidItem.java b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/view/FactoryPidItem.java
index 454011d..68c7e5a 100644
--- a/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/view/FactoryPidItem.java
+++ b/osgi/config/src/main/java/org/apache/karaf/webconsole/osgi/config/view/FactoryPidItem.java
@@ -21,8 +21,13 @@
 import org.apache.wicket.model.IModel;
 import org.osgi.service.cm.Configuration;
 
+/**
+ * Item which add "factory" class to configuration produced my configuration factory.
+ */
 public class FactoryPidItem extends OddEvenItem<Configuration> {
 
+    private static final long serialVersionUID = 1L;
+
     public FactoryPidItem(String id, int index, IModel<Configuration> model) {
         super(id, index, model);
     }
diff --git a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/FrameworkPage.java b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/FrameworkPage.java
index 7ca5453..42caec2 100644
--- a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/FrameworkPage.java
+++ b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/FrameworkPage.java
@@ -31,6 +31,8 @@
 @AuthorizeInstantiation({"admin", "osgi-user", "osgi-developer"})
 public class FrameworkPage extends OsgiPage {
 
+    private static final long serialVersionUID = 1L;
+
     public FrameworkPage() {
         setDefaultModel(new CompoundPropertyModel<Bundle>(new SystemBundleModel(context)));
 
diff --git a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/SingleBundlePage.java b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/SingleBundlePage.java
index fb33c0f..27e55ee 100644
--- a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/SingleBundlePage.java
+++ b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/SingleBundlePage.java
@@ -35,6 +35,8 @@
 @PaxWicketMountPoint(mountPoint = "/osgi/bundle/detail")
 public class SingleBundlePage extends OsgiPage {
 
+    private static final long serialVersionUID = 1L;
+
     public static String BUNDLE_ID = "bundleId";
 
     private long bundleId;
diff --git a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/install/InstallBundlePage.java b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/install/InstallBundlePage.java
index e34d372..8580328 100644
--- a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/install/InstallBundlePage.java
+++ b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/install/InstallBundlePage.java
@@ -31,6 +31,8 @@
 @PaxWicketMountPoint(mountPoint = "/osgi/bundle/add")
 public class InstallBundlePage extends OsgiPage {
 
+    private static final long serialVersionUID = 1L;
+
     public InstallBundlePage() {
         IModel<WicketInstallModel> model = of(new WicketInstallModel());
 
diff --git a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/install/InstallBundlePanel.java b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/install/InstallBundlePanel.java
index a5c6c69..a9f5452 100644
--- a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/install/InstallBundlePanel.java
+++ b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/install/InstallBundlePanel.java
@@ -18,11 +18,10 @@
 
 import static org.apache.wicket.model.Model.of;
 
-import org.apache.karaf.webconsole.core.behavior.RemoveAttributeBehavior;
 import org.apache.karaf.webconsole.core.form.LabelBorder;
+import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
-import org.apache.wicket.behavior.SimpleAttributeModifier;
 import org.apache.wicket.markup.html.form.CheckBox;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.RequiredTextField;
@@ -62,7 +61,7 @@
                     } else {
                         onUnchecked();
                     }
-                    target.addComponent(file);
+                    target.add(file);
                 }
             }
         };
@@ -72,7 +71,7 @@
 
         file = new FileUploadField("file");
         file.setLabel(of("Bundle file"));
-        file.add(new SimpleAttributeModifier("disabled", "disabled"));
+        file.add(new AttributeModifier("disabled", "disabled"));
         file.setOutputMarkupId(true);
         border = new LabelBorder("fileGroup", file);
         form.add(border);
@@ -81,10 +80,10 @@
     }
 
     protected void onChecked() {
-        file.add(new RemoveAttributeBehavior("disabled"));
+        file.add(AttributeModifier.remove("disabled"));
     }
 
     protected void onUnchecked() {
-        file.add(new SimpleAttributeModifier("disabled", "disabled"));
+        file.add(new AttributeModifier("disabled", "disabled"));
     }
 }
diff --git a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/list/BundleActionsPanel.java b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/list/BundleActionsPanel.java
index 074774c..e7233d1 100644
--- a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/list/BundleActionsPanel.java
+++ b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/list/BundleActionsPanel.java
@@ -29,7 +29,7 @@
 import org.apache.karaf.webconsole.osgi.core.bundle.list.link.UpdateLink;
 import org.apache.karaf.webconsole.osgi.core.shared.State;
 import org.apache.karaf.webconsole.osgi.core.spi.IActionProvider;
-import org.apache.wicket.behavior.SimpleAttributeModifier;
+import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.model.IModel;
@@ -62,7 +62,7 @@
 
         // details link
         Link link = SingleBundlePage.createLink(linkId, object);
-        link.add(new Label("label", "").add(new SimpleAttributeModifier("class", "icon-info-sign")));
+        link.add(new Label("label", "").add(new AttributeModifier("class", "icon-info-sign")));
 
         links.add(link);
 
@@ -87,38 +87,38 @@
 
     private Link createUninstallLink(String linkId, String labelId) {
         Link link = new UninstallLink(linkId, getModel());
-        link.add(new Label(labelId, "").add(new SimpleAttributeModifier("class", "icon-eject")));
+        link.add(new Label(labelId, "").add(new AttributeModifier("class", "icon-eject")));
         return link;
     }
 
     private Link createRefreshLink(String linkId, String labelId) {
         Link link = new RefreshLink(linkId, getModel());
-        link.add(new Label(labelId, "").add(new SimpleAttributeModifier("class", "icon-refresh")));
+        link.add(new Label(labelId, "").add(new AttributeModifier("class", "icon-refresh")));
         return link;
     }
 
     private Link createUpdateLink(String linkId, String labelId) {
         Link link = new UpdateLink(linkId, getModel());
         //link.add(new SimpleAttributeModifier("title", getLocalizer().getString("bundle.update.link", this, getModel())));
-        link.add(new Label(labelId, "").add(new SimpleAttributeModifier("class", "icon-retweet")));
+        link.add(new Label(labelId, "").add(new AttributeModifier("class", "icon-retweet")));
         return link;
     }
 
     private Link createResolveLink(String linkId, String labelId) {
         Link link = new ResolveLink(linkId, getModel());
-        link.add(new Label(labelId, "").add(new SimpleAttributeModifier("class", "icon-step-forward")));
+        link.add(new Label(labelId, "").add(new AttributeModifier("class", "icon-step-forward")));
         return link;
     }
 
     private Link createStartLink(String linkId, String labelId) {
         Link link = new StartLink(linkId, getModel());
-        link.add(new Label(labelId, "").add(new SimpleAttributeModifier("class", "icon-play")));
+        link.add(new Label(labelId, "").add(new AttributeModifier("class", "icon-play")));
         return link;
     }
 
     private Link createStopLink(String linkId, String labelId) {
         Link link = new StopLink(linkId, getModel());
-        link.add(new Label(labelId, "").add(new SimpleAttributeModifier("class", "icon-pause")));
+        link.add(new Label(labelId, "").add(new AttributeModifier("class", "icon-pause")));
         return link;
     }
 }
diff --git a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/list/BundlePage.java b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/list/BundlePage.java
index e138416..81fce1d 100644
--- a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/list/BundlePage.java
+++ b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/list/BundlePage.java
@@ -50,6 +50,8 @@
 @PaxWicketMountPoint(mountPoint = "/osgi/bundle")
 public class BundlePage extends OsgiPage {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "columnProviders")
     private List<IColumnProvider> columnProviders;
 
diff --git a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/pkg/SinglePackagePage.java b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/pkg/SinglePackagePage.java
index 0c6139e..d6fe385 100644
--- a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/pkg/SinglePackagePage.java
+++ b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/pkg/SinglePackagePage.java
@@ -32,9 +32,14 @@
 import org.osgi.service.packageadmin.ExportedPackage;
 import org.osgi.service.packageadmin.PackageAdmin;
 
+/**
+ * Single package page.
+ */
 @PaxWicketMountPoint(mountPoint = "/osgi/package/detail")
 public class SinglePackagePage extends OsgiPage {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "packageAdmin")
     private PackageAdmin admin;
 
diff --git a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/pkg/column/PackagePanel.java b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/pkg/column/PackagePanel.java
index 3821f14..90def5d 100644
--- a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/pkg/column/PackagePanel.java
+++ b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/pkg/column/PackagePanel.java
@@ -18,7 +18,7 @@
 
 import org.apache.felix.utils.manifest.Clause;
 import org.apache.karaf.webconsole.osgi.core.pkg.SinglePackagePage;
-import org.apache.wicket.behavior.SimpleAttributeModifier;
+import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.html.panel.Panel;
@@ -59,7 +59,7 @@
 
         ExportedPackage exportedPackage = admin.getExportedPackage(pkg);
         if (exportedPackage == null) {
-            link.add(new SimpleAttributeModifier("class", "error"));
+            link.add(new AttributeModifier("class", "error"));
         }
 
         add(link);
diff --git a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/pkg/column/ResolutionPanel.java b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/pkg/column/ResolutionPanel.java
index 7c1e7f5..dbd3de5 100644
--- a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/pkg/column/ResolutionPanel.java
+++ b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/pkg/column/ResolutionPanel.java
@@ -17,7 +17,7 @@
 package org.apache.karaf.webconsole.osgi.core.pkg.column;
 
 import org.apache.felix.utils.manifest.Clause;
-import org.apache.wicket.behavior.SimpleAttributeModifier;
+import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.IModel;
@@ -46,10 +46,10 @@
 
         add(new Label("resolution", resolution).setRenderBodyOnly(true));
         Label icon = new Label("icon", "");
-        icon.add(new SimpleAttributeModifier("class", css));
+        icon.add(new AttributeModifier("class", css));
         add(icon);
 
-        add(new SimpleAttributeModifier("title", "Resolution is " + resolution));
+        add(new AttributeModifier("title", "Resolution is " + resolution));
     }
 
 }
diff --git a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/pkg/list/PackagePage.java b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/pkg/list/PackagePage.java
index 5add819..219d345 100644
--- a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/pkg/list/PackagePage.java
+++ b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/pkg/list/PackagePage.java
@@ -30,9 +30,14 @@
 import org.osgi.service.packageadmin.ExportedPackage;
 import org.osgi.service.packageadmin.PackageAdmin;
 
+/**
+ * Package list page.
+ */
 @PaxWicketMountPoint(mountPoint = "/osgi/package")
 public class PackagePage extends OsgiPage {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "packageAdmin")
     private PackageAdmin admin;
 
diff --git a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ExportServiceTable.java b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ExportServiceTable.java
index f6df4d6..794d6e3 100644
--- a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ExportServiceTable.java
+++ b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ExportServiceTable.java
@@ -32,6 +32,7 @@
 
     private static final long serialVersionUID = 1L;
 
+    @SuppressWarnings("unchecked")
     private static IColumn<ServiceReference>[] columns = new IColumn[] {
         new ServicePropertyColumn("Service Id", Constants.SERVICE_ID),
         new ObjectClassColumn(Model.of("Object classes")),
diff --git a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ImportServiceTable.java b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ImportServiceTable.java
index ad7b2b3..a7d3366 100644
--- a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ImportServiceTable.java
+++ b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ImportServiceTable.java
@@ -32,6 +32,7 @@
 
     private static final long serialVersionUID = 1L;
 
+    @SuppressWarnings("unchecked")
     private static IColumn<ServiceReference>[] columns = new IColumn[] {
         new ServicePropertyColumn("Service Id", Constants.SERVICE_ID),
         new ObjectClassColumn(Model.of("Object classes")),
diff --git a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ServiceDetailPage.java b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ServiceDetailPage.java
index 37a30e2..833250b 100644
--- a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ServiceDetailPage.java
+++ b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ServiceDetailPage.java
@@ -30,6 +30,8 @@
  */
 public class ServiceDetailPage extends OsgiPage {
 
+    private static final long serialVersionUID = 1L;
+
     public ServiceDetailPage(PageParameters parameters) {
         long serviceId = parameters.get("id").toLong();
 
diff --git a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/list/ServicePage.java b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/list/ServicePage.java
index d7ccdc4..b295062 100644
--- a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/list/ServicePage.java
+++ b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/list/ServicePage.java
@@ -38,6 +38,8 @@
 @PaxWicketMountPoint(mountPoint = "/osgi/service")
 public class ServicePage extends OsgiPage {
 
+    private static final long serialVersionUID = 1L;
+
     public ServicePage() {
         List<IColumn<ServiceReference>> columns = new ArrayList<IColumn<ServiceReference>>();
         columns.add(new ServicePropertyColumn("Service Id", Constants.SERVICE_ID));
diff --git a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/shared/MissingServiceReferenceException.java b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/shared/MissingServiceReferenceException.java
index 982507d..a8f6c4a 100644
--- a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/shared/MissingServiceReferenceException.java
+++ b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/shared/MissingServiceReferenceException.java
@@ -21,6 +21,8 @@
  */
 public class MissingServiceReferenceException extends RuntimeException {
 
+    private static final long serialVersionUID = 1L;
+
     public MissingServiceReferenceException(String symbolicName, Long serviceId) {
         super("Bundle " + symbolicName + " doesn't register service with id " + serviceId);
     }
diff --git a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/shared/OsgiPage.java b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/shared/OsgiPage.java
index 11a0a4d..4dc53c2 100644
--- a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/shared/OsgiPage.java
+++ b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/shared/OsgiPage.java
@@ -25,6 +25,8 @@
  */
 public abstract class OsgiPage extends SinglePage {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "blueprintBundleContext")
     protected BundleContext context;
 
diff --git a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/spi/IColumnProvider.java b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/spi/IColumnProvider.java
index f8ef2f1..aa3c76d 100644
--- a/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/spi/IColumnProvider.java
+++ b/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/spi/IColumnProvider.java
@@ -16,12 +16,10 @@
  */
 package org.apache.karaf.webconsole.osgi.core.spi;
 
-import java.io.Serializable;
-
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
 import org.osgi.framework.Bundle;
 
-public interface IColumnProvider extends Serializable {
+public interface IColumnProvider {
 
     IColumn<Bundle> getColumn();
 
diff --git a/osgi/event/src/main/java/org/apache/karaf/webconsole/osgi/event/EventsPage.java b/osgi/event/src/main/java/org/apache/karaf/webconsole/osgi/event/EventsPage.java
index 8114fed..a74a81e 100644
--- a/osgi/event/src/main/java/org/apache/karaf/webconsole/osgi/event/EventsPage.java
+++ b/osgi/event/src/main/java/org/apache/karaf/webconsole/osgi/event/EventsPage.java
@@ -29,11 +29,13 @@
 import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
 
 /**
- * Events admin.
+ * Event admin page.
  */
 @PaxWicketMountPoint(mountPoint = "/osgi/event")
 public class EventsPage extends OsgiPage {
 
+    private static final long serialVersionUID = 1L;
+
     public EventsPage() {
         List<IColumn<EventTopicInfo>> columns = new ArrayList<IColumn<EventTopicInfo>>();
         columns.add(new OrdinalColumn<EventTopicInfo>());
diff --git a/osgi/event/src/main/java/org/apache/karaf/webconsole/osgi/event/model/EventTopicInfo.java b/osgi/event/src/main/java/org/apache/karaf/webconsole/osgi/event/model/EventTopicInfo.java
index e55e344..c2482e4 100644
--- a/osgi/event/src/main/java/org/apache/karaf/webconsole/osgi/event/model/EventTopicInfo.java
+++ b/osgi/event/src/main/java/org/apache/karaf/webconsole/osgi/event/model/EventTopicInfo.java
@@ -23,6 +23,8 @@
  */
 public class EventTopicInfo implements Serializable {
 
+    private static final long serialVersionUID = 1L;
+
     private String topic;
     private int consumers;
 
diff --git a/osgi/event/src/main/java/org/apache/karaf/webconsole/osgi/event/model/EventTopicsProvider.java b/osgi/event/src/main/java/org/apache/karaf/webconsole/osgi/event/model/EventTopicsProvider.java
index 10ce7f6..8df9cfe 100644
--- a/osgi/event/src/main/java/org/apache/karaf/webconsole/osgi/event/model/EventTopicsProvider.java
+++ b/osgi/event/src/main/java/org/apache/karaf/webconsole/osgi/event/model/EventTopicsProvider.java
@@ -34,6 +34,8 @@
  */
 public class EventTopicsProvider  extends SortableDataProvider<EventTopicInfo> {
 
+    private static final long serialVersionUID = 1L;
+
     private Map<String, EventTopicInfo> topics = new HashMap<String, EventTopicInfo>();
 
     public EventTopicsProvider(BundleContext context) {
diff --git a/osgi/log/src/main/java/org/apache/karaf/webconsole/osgi/log/LogsPage.java b/osgi/log/src/main/java/org/apache/karaf/webconsole/osgi/log/LogsPage.java
index fd549d3..f7420c5 100644
--- a/osgi/log/src/main/java/org/apache/karaf/webconsole/osgi/log/LogsPage.java
+++ b/osgi/log/src/main/java/org/apache/karaf/webconsole/osgi/log/LogsPage.java
@@ -50,11 +50,14 @@
 @PaxWicketMountPoint(mountPoint = "/osgi/log")
 public class LogsPage extends OsgiPage {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "logReader")
     private LogReaderService logReader;
 
     private Options options = new Options();
 
+    @SuppressWarnings("serial")
     public LogsPage() {
         CompoundPropertyModel<Options> model = new CompoundPropertyModel<Options>(new PropertyModel<Options>(this, "options"));
         setDefaultModel(model);
diff --git a/osgi/log/src/main/java/org/apache/karaf/webconsole/osgi/log/OptionsForm.java b/osgi/log/src/main/java/org/apache/karaf/webconsole/osgi/log/OptionsForm.java
index 3957bf5..4e2fb2c 100644
--- a/osgi/log/src/main/java/org/apache/karaf/webconsole/osgi/log/OptionsForm.java
+++ b/osgi/log/src/main/java/org/apache/karaf/webconsole/osgi/log/OptionsForm.java
@@ -35,6 +35,7 @@
 
     private static final long serialVersionUID = 1L;
 
+    @SuppressWarnings("serial")
     public OptionsForm(String id, CompoundPropertyModel<Options> model) {
         super(id, model);
 
diff --git a/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumn.java b/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumn.java
index fe72357..88052d6 100644
--- a/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumn.java
+++ b/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumn.java
@@ -32,6 +32,8 @@
  */
 public class ScrColumn extends AbstractColumn<Bundle> {
 
+    private static final long serialVersionUID = 1L;
+
     private ScrService scr;
 
     public ScrColumn(ScrService scr, String title) {
diff --git a/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumnPanel.java b/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumnPanel.java
index 2ec80e0..e1dafba 100644
--- a/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumnPanel.java
+++ b/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumnPanel.java
@@ -30,6 +30,8 @@
  */
 public class ScrColumnPanel extends Panel {
 
+    private static final long serialVersionUID = 1L;
+
     public ScrColumnPanel(String id, Component[] components) {
         super(id);
 
diff --git a/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumnProvider.java b/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumnProvider.java
index 3624d26..29cd5c4 100644
--- a/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumnProvider.java
+++ b/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumnProvider.java
@@ -25,8 +25,6 @@
  */
 public class ScrColumnProvider extends ScrComponent implements IColumnProvider {
 
-    private static final long serialVersionUID = 1L;
-
     public IColumn<Bundle> getColumn() {
         return new ScrColumn(scr, "SCR");
     }
diff --git a/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/DetailsPage.java b/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/DetailsPage.java
index 8be83e8..bb094d2 100644
--- a/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/DetailsPage.java
+++ b/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/DetailsPage.java
@@ -40,6 +40,9 @@
  */
 public class DetailsPage extends SinglePage {
 
+    private static final long serialVersionUID = 1L;
+
+    @SuppressWarnings("serial")
     public DetailsPage(Exchange object) {
         add(new CssBehavior(DetailsPage.class, "message.css"));
 
diff --git a/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/EndpointsPage.java b/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/EndpointsPage.java
index c287ca7..8ee4ebf 100644
--- a/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/EndpointsPage.java
+++ b/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/EndpointsPage.java
@@ -38,6 +38,9 @@
  */
 public class EndpointsPage extends ServiceMixPage {
 
+    private static final long serialVersionUID = 1L;
+
+    @SuppressWarnings({"unchecked", "serial"})
     public EndpointsPage() {
         IColumn<Map<String, Object>>[] columns = new IColumn[] {
             new OrdinalColumn<Map<String, Object>>(),
diff --git a/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ExchangeActionsPanel.java b/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ExchangeActionsPanel.java
index 007fdac..d4d9cf3 100644
--- a/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ExchangeActionsPanel.java
+++ b/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ExchangeActionsPanel.java
@@ -31,11 +31,14 @@
  */
 public class ExchangeActionsPanel extends ActionsPanel<Exchange> {
 
+    private static final long serialVersionUID = 1L;
+
     public ExchangeActionsPanel(String componentId, IModel<Exchange> model) {
         super(componentId, model);
     }
 
     @Override
+    @SuppressWarnings({"rawtypes", "serial"})
     protected List<Link> getLinks(final Exchange object, String linkId, String labelId) {
         List<Link> links = new ArrayList<Link>();
 
diff --git a/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ExchangeModel.java b/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ExchangeModel.java
index 8372e7a..7d85215 100644
--- a/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ExchangeModel.java
+++ b/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ExchangeModel.java
@@ -26,6 +26,8 @@
  */
 public class ExchangeModel extends LoadableDetachableModel<Exchange> {
 
+    private static final long serialVersionUID = 1L;
+
     /**
      * Listener - it keeps references.
      */
diff --git a/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ServiceMixPage.java b/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ServiceMixPage.java
index dcb3d78..f887b4e 100644
--- a/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ServiceMixPage.java
+++ b/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ServiceMixPage.java
@@ -26,6 +26,8 @@
  */
 public class ServiceMixPage extends SidebarPage {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "nmr")
     protected NMR nmr;
 
diff --git a/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/TrackNmrPage.java b/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/TrackNmrPage.java
index 29adb4b..e3f7905 100644
--- a/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/TrackNmrPage.java
+++ b/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/TrackNmrPage.java
@@ -38,10 +38,12 @@
  */
 public class TrackNmrPage extends ServiceMixPage {
 
+    private static final long serialVersionUID = 1L;
+
     @PaxWicketBean(name = "tracker")
     private ITrackingExchangeListener listener;
 
-    @SuppressWarnings({"unchecked", "rawtypes"})
+    @SuppressWarnings({"unchecked", "serial", "rawtypes"})
     public TrackNmrPage() {
         IColumn<Exchange>[] columns = new IColumn[] {
             new PropertyColumnExt<Exchange>("Id", "id"),
diff --git a/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/TrackingExchangeListener.java b/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/TrackingExchangeListener.java
index 7ff246d..99edca9 100644
--- a/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/TrackingExchangeListener.java
+++ b/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/TrackingExchangeListener.java
@@ -16,7 +16,6 @@
  */
 package org.apache.karaf.webconsole.servicemix.internal;
 
-import java.io.Serializable;
 import java.util.Deque;
 import java.util.LinkedList;
 
@@ -25,7 +24,7 @@
 /**
  * Implementation of tracking listener which keeps last few exchanges.
  */
-public class TrackingExchangeListener implements ITrackingExchangeListener, Serializable {
+public class TrackingExchangeListener implements ITrackingExchangeListener {
 
     private final int maxSize;
     private Deque<Exchange> exchanges = new LinkedList<Exchange>();
