diff --git a/blueprint/src/main/java/org/apache/karaf/webconsole/blueprint/internal/details/DetailsPage.java b/blueprint/src/main/java/org/apache/karaf/webconsole/blueprint/internal/details/DetailsPage.java
index d42a5b3..c4c01c0 100644
--- a/blueprint/src/main/java/org/apache/karaf/webconsole/blueprint/internal/details/DetailsPage.java
+++ b/blueprint/src/main/java/org/apache/karaf/webconsole/blueprint/internal/details/DetailsPage.java
@@ -37,6 +37,9 @@
 import org.osgi.service.blueprint.container.BlueprintContainer;
 import org.osgi.service.blueprint.reflect.ComponentMetadata;
 
+/**
+ * Page with blueprint container details.
+ */
 @PaxWicketMountPoint(mountPoint = "/osgi/blueprint/details")
 public class DetailsPage extends SinglePage {
 
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 6f15fcf..8262caa 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
@@ -1,3 +1,19 @@
+/*
+ * 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.core;
 
 import java.util.Arrays;
@@ -14,8 +30,14 @@
 import org.apache.wicket.model.util.ListModel;
 import org.ops4j.pax.wicket.api.PaxWicketBean;
 
+/**
+ * Base page for resource loading and keeping same look and feel in extensions.
+ */
 public class BasePage extends WebPage {
 
+    /**
+     * Brand provider responsible for l&f customization.
+     */
     @PaxWicketBean(name = "brandProvider")
     protected BrandProvider brandProvider;
 
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/navigation/ExtendableSidebarProvider.java b/core/src/main/java/org/apache/karaf/webconsole/core/navigation/ExtendableSidebarProvider.java
index c8edbf2..3cec6bf 100644
--- a/core/src/main/java/org/apache/karaf/webconsole/core/navigation/ExtendableSidebarProvider.java
+++ b/core/src/main/java/org/apache/karaf/webconsole/core/navigation/ExtendableSidebarProvider.java
@@ -1,3 +1,19 @@
+/*
+ * 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.core.navigation;
 
 import java.util.ArrayList;
@@ -8,6 +24,9 @@
 import org.apache.wicket.Page;
 import org.apache.wicket.markup.html.link.Link;
 
+/**
+ * Sidebar provider implementation which can be extended by other providers.
+ */
 public class ExtendableSidebarProvider implements SidebarProvider {
 
     private Collection<NavigationProvider> navigationProviders;
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/navigation/SidebarProvider.java b/core/src/main/java/org/apache/karaf/webconsole/core/navigation/SidebarProvider.java
index 5c613b9..bf4a655 100644
--- a/core/src/main/java/org/apache/karaf/webconsole/core/navigation/SidebarProvider.java
+++ b/core/src/main/java/org/apache/karaf/webconsole/core/navigation/SidebarProvider.java
@@ -1,3 +1,19 @@
+/*
+ * 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.core.navigation;
 
 import java.util.List;
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 6ceea19..be90bef 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
@@ -1,9 +1,28 @@
+/*
+ * 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.core.page;
 
 import org.apache.karaf.webconsole.core.BasePage;
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.authentication.panel.SignInPanel;
 
+/**
+ * Dummy login page used to aurgorize user.
+ */
 public class LoginPage extends BasePage {
 
     public LoginPage() {
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 9539faf..6aeabbe 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
@@ -28,6 +28,9 @@
 import org.apache.wicket.model.LoadableDetachableModel;
 import org.ops4j.pax.wicket.api.PaxWicketBean;
 
+/**
+ * Page which requires admin role, in other words authorized user.
+ */
 @AuthorizeInstantiation("admin")
 public class SecuredPage extends BasePage {
 
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 6744cca..6e1408e 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
@@ -16,6 +16,9 @@
  */
 package org.apache.karaf.webconsole.core.page;
 
+/**
+ * Page which body uses all available space - all screen width.
+ */
 public class SinglePage extends SecuredPage {
 
     public SinglePage() {
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/util/LinkUtils.java b/core/src/main/java/org/apache/karaf/webconsole/core/util/LinkUtils.java
index f9bbb61..8753f42 100644
--- a/core/src/main/java/org/apache/karaf/webconsole/core/util/LinkUtils.java
+++ b/core/src/main/java/org/apache/karaf/webconsole/core/util/LinkUtils.java
@@ -1,3 +1,19 @@
+/*
+ * 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.core.util;
 
 import org.apache.wicket.Page;
diff --git a/examples/branding/src/main/java/org/apache/karaf/webconsole/examples/branding/ExampleBrandProvider.java b/examples/branding/src/main/java/org/apache/karaf/webconsole/examples/branding/ExampleBrandProvider.java
index e7362c5..c319ea3 100644
--- a/examples/branding/src/main/java/org/apache/karaf/webconsole/examples/branding/ExampleBrandProvider.java
+++ b/examples/branding/src/main/java/org/apache/karaf/webconsole/examples/branding/ExampleBrandProvider.java
@@ -25,6 +25,9 @@
 import org.apache.wicket.markup.html.CSSPackageResource;
 import org.apache.wicket.markup.html.image.Image;
 
+/**
+ * Example brand provider which modify console look and feel.
+ */
 public class ExampleBrandProvider implements BrandProvider {
 
     public Image getHeaderImage(String imageId) {
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/sidebar/KarafFeaturesSidebar.java b/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/sidebar/KarafFeaturesSidebar.java
index 7e8e08b..7fad1e5 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/sidebar/KarafFeaturesSidebar.java
+++ b/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/sidebar/KarafFeaturesSidebar.java
@@ -1,3 +1,19 @@
+/*
+ * 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.karaf.internal.sidebar;
 
 import static org.apache.karaf.webconsole.core.util.LinkUtils.createPageLink;
@@ -14,8 +30,12 @@
 import org.apache.wicket.Page;
 import org.apache.wicket.markup.html.link.Link;
 
+/**
+ * Karaf features sidebar.
+ */
 public class KarafFeaturesSidebar implements SidebarProvider {
 
+    @SuppressWarnings("unchecked")
     public List<Link<Page>> getItems(String componentId, String labelId) {
         return Arrays.asList(
             createPageLink(componentId, labelId, "Repositories", RepositoriesPage.class),
diff --git a/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/bundle/view/BundleActionsPanel.java b/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/bundle/view/BundleActionsPanel.java
index f83370d..d606ff6 100644
--- a/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/bundle/view/BundleActionsPanel.java
+++ b/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/bundle/view/BundleActionsPanel.java
@@ -36,6 +36,10 @@
 import org.osgi.framework.BundleException;
 import org.osgi.service.packageadmin.PackageAdmin;
 
+/**
+ * Action panel for bundles list.
+ */
+@SuppressWarnings("rawtypes")
 public class BundleActionsPanel extends ActionsPanel<Bundle> {
 
     @PaxWicketBean(name = "packageAdmin")
diff --git a/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationsPage.java b/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationsPage.java
index b0d1f7c..321e9a2 100644
--- a/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationsPage.java
+++ b/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationsPage.java
@@ -17,7 +17,7 @@
 package org.apache.karaf.webconsole.osgi.internal.configuration;
 
 import org.apache.karaf.webconsole.osgi.internal.OsgiPage;
-import org.apache.karaf.webconsole.osgi.internal.configuration.view.ConfigurationstDataTable;
+import org.apache.karaf.webconsole.osgi.internal.configuration.view.ConfigurationsDataTable;
 import org.apache.wicket.markup.html.CSSPackageResource;
 import org.ops4j.pax.wicket.api.PaxWicketBean;
 import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
@@ -32,7 +32,7 @@
     public ConfigurationsPage() {
         add(CSSPackageResource.getHeaderContribution(ConfigurationsPage.class, "configurations.css"));
 
-        add(new ConfigurationstDataTable("configurations", new ConfigurationProvider(configurationAdmin), 20));
+        add(new ConfigurationsDataTable("configurations", new ConfigurationProvider(configurationAdmin), 20));
 
     }
 
diff --git a/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/view/ConfigurationstDataTable.java b/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/view/ConfigurationsDataTable.java
similarity index 85%
rename from osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/view/ConfigurationstDataTable.java
rename to osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/view/ConfigurationsDataTable.java
index 07cf7a8..d8e21e5 100644
--- a/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/view/ConfigurationstDataTable.java
+++ b/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/view/ConfigurationsDataTable.java
@@ -28,10 +28,14 @@
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
 
-public class ConfigurationstDataTable extends DefaultDataTable<Configuration> {
+/**
+ * Datatable which shows list of configurations from OSGi {@link ConfigurationAdmin}.
+ */
+@SuppressWarnings({"rawtypes", "unchecked"})
+public class ConfigurationsDataTable extends DefaultDataTable<Configuration> {
 
-    @SuppressWarnings({"rawtypes", "unchecked"})
     private static List COLUMNS = Arrays.asList(
         new PropertyColumn<Configuration>(Model.of("pid"), "pid"),
         new AbstractColumn<Configuration>(Model.of("operations")) {
@@ -41,7 +45,7 @@
         }
     );
 
-    public ConfigurationstDataTable(String id, ISortableDataProvider<Configuration> dataProvider, int rowsPerPage) {
+    public ConfigurationsDataTable(String id, ISortableDataProvider<Configuration> dataProvider, int rowsPerPage) {
         super(id, COLUMNS, dataProvider, rowsPerPage);
     }
 
diff --git a/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/sidebar/OsgiSidebar.java b/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/sidebar/OsgiSidebar.java
index 6a62b32..b2d1b9f 100644
--- a/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/sidebar/OsgiSidebar.java
+++ b/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/sidebar/OsgiSidebar.java
@@ -1,3 +1,19 @@
+/*
+ * 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.osgi.internal.sidebar;
 
 import static org.apache.karaf.webconsole.core.util.LinkUtils.createPageLink;
@@ -14,8 +30,12 @@
 import org.apache.wicket.Page;
 import org.apache.wicket.markup.html.link.Link;
 
+/**
+ * Generic OSGi sidebar.
+ */
 public class OsgiSidebar implements SidebarProvider {
 
+    @SuppressWarnings("unchecked")
     public List<Link<Page>> getItems(String componentId, String labelId) {
         return Arrays.asList(
             createPageLink(componentId, labelId, "Configuration", ConfigurationsPage.class),
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 edf13b0..dcb3d78 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
@@ -1,3 +1,19 @@
+/*
+ * 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.servicemix.internal;
 
 import org.apache.karaf.webconsole.core.navigation.SidebarProvider;
@@ -5,6 +21,9 @@
 import org.apache.servicemix.nmr.api.NMR;
 import org.ops4j.pax.wicket.api.PaxWicketBean;
 
+/**
+ * Base for servicemix pages.
+ */
 public class ServiceMixPage extends SidebarPage {
 
     @PaxWicketBean(name = "nmr")
diff --git a/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/sidebar/ServicemixSidebar.java b/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/sidebar/ServicemixSidebar.java
index 65a67c2..90f47e1 100644
--- a/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/sidebar/ServicemixSidebar.java
+++ b/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/sidebar/ServicemixSidebar.java
@@ -1,3 +1,19 @@
+/*
+ * 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.servicemix.internal.sidebar;
 
 import static org.apache.karaf.webconsole.core.util.LinkUtils.createPageLink;
@@ -13,9 +29,12 @@
 import org.apache.wicket.Page;
 import org.apache.wicket.markup.html.link.Link;
 
-
+/**
+ * ServiceMix sidebar.
+ */
 public class ServicemixSidebar implements SidebarProvider {
 
+    @SuppressWarnings("unchecked")
     public List<Link<Page>> getItems(String componentId, String labelId) {
         return Arrays.asList(
             createPageLink(componentId, labelId, "Exchanges", TrackNmrPage.class)
