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 34a24db..463dba9 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,15 +1,16 @@
 package org.apache.karaf.webconsole.core;
 
-import java.util.Collections;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
 
+import org.apache.karaf.webconsole.core.internal.LanguagePanel;
 import org.apache.wicket.ResourceReference;
 import org.apache.wicket.markup.html.CSSPackageResource;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.image.Image;
-import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.util.ListModel;
 import org.ops4j.pax.wicket.api.PaxWicketBean;
 
@@ -18,6 +19,9 @@
     @PaxWicketBean(name = "tabs")
     private List<ConsoleTab> tabs;
 
+    // list of supported Locales - should be replaced by resolver/detector or something similar
+    private IModel<List<Locale>> supportedLocales = new ListModel<Locale>(Arrays.asList(Locale.FRENCH, Locale.ENGLISH));
+
     public BasePage() {
         add(CSSPackageResource.getHeaderContribution(BasePage.class, "style.css"));
         add(CSSPackageResource.getHeaderContribution(BasePage.class, "grid.css"));
@@ -26,39 +30,9 @@
 
         add(new Image("karafLogo", new ResourceReference(BasePage.class, "images/karaf-logo.png")));
 
-        Link linkFr = new Link("goFrench") {
-			@Override
-			public void onClick() {
-				getSession().setLocale(Locale.FRANCE);
-			}
-		};
-
-        Link linkEn = new Link("goEnglish") {
-			@Override
-			public void onClick() {
-				getSession().setLocale(Locale.ENGLISH);
-			}
-		};
-
-
-        add(linkFr);
-        linkFr.add(new Image("frenchFlag", new ResourceReference(BasePage.class, "images/french-flag.jpeg")));
-
-        add(linkEn);
-        linkEn.add(new Image("englishFlag", new ResourceReference(BasePage.class, "images/english-flag.jpeg")));
+        add(new LanguagePanel("languagePanel", supportedLocales));
 
         add(new NavigationPanel("navigationPanel", new ListModel<ConsoleTab>(tabs)));
-
-        List<Class> subPages = getSubPages();
-        if (subPages != null && subPages.size() > 0) {
-            add(new SidebarPanel("sidebar", getClass(), subPages));
-        } else {
-            add(new Label("sidebar").setRenderBodyOnly(true));
-        }
-    }
-
-    protected List<Class> getSubPages() {
-        return Collections.emptyList();
     }
 
 }
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/NavigationPanel.java b/core/src/main/java/org/apache/karaf/webconsole/core/NavigationPanel.java
index de3ca48..f475a7d 100644
--- a/core/src/main/java/org/apache/karaf/webconsole/core/NavigationPanel.java
+++ b/core/src/main/java/org/apache/karaf/webconsole/core/NavigationPanel.java
@@ -1,5 +1,8 @@
 package org.apache.karaf.webconsole.core;
 
+import java.util.LinkedList;
+import java.util.List;
+
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.html.list.ListItem;
@@ -8,9 +11,6 @@
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
 
-import java.util.LinkedList;
-import java.util.List;
-
 public class NavigationPanel extends Panel {
 
     public NavigationPanel(String id, IModel<List<ConsoleTab>> model) {
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/SidebarPage.java b/core/src/main/java/org/apache/karaf/webconsole/core/SidebarPage.java
new file mode 100644
index 0000000..cbec73d
--- /dev/null
+++ b/core/src/main/java/org/apache/karaf/webconsole/core/SidebarPage.java
@@ -0,0 +1,22 @@
+package org.apache.karaf.webconsole.core;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.karaf.webconsole.core.internal.SidebarPanel;
+import org.apache.wicket.Page;
+import org.apache.wicket.model.util.ListModel;
+
+public class SidebarPage extends BasePage {
+
+    public SidebarPage() {
+        ListModel<Class<? extends Page>> listModel = new ListModel<Class<? extends Page>>(getSubPages());
+
+        add(new SidebarPanel("sidebar", getClass(), listModel));
+    }
+
+    protected List<Class<? extends Page>> getSubPages() {
+        return Collections.emptyList();
+    }
+
+}
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/SidebarPanel.java b/core/src/main/java/org/apache/karaf/webconsole/core/SidebarPanel.java
deleted file mode 100644
index 8342dd5..0000000
--- a/core/src/main/java/org/apache/karaf/webconsole/core/SidebarPanel.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.apache.karaf.webconsole.core;
-
-import java.util.List;
-
-import org.apache.wicket.Page;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.link.BookmarkablePageLink;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.util.ListModel;
-
-public class SidebarPanel<T extends Page> extends Panel {
-
-    public SidebarPanel(String id, Class<T> basePage, List<Class<Page>> subPages) {
-        super(id);
-
-        add(new BookmarkablePageLink<T>("masterPageLink", basePage).add(new Label("masterPageLabel", basePage.getName())));
-
-        add(new ListView<Class<Page>>("subPageLinks", new ListModel<Class<Page>>(subPages)) {
-            @Override
-            protected void populateItem(ListItem<Class<Page>> item) {
-                BookmarkablePageLink<T> link = new BookmarkablePageLink<T>("subPageLink", item.getModelObject());
-                link.add(new Label("subPageLabel", item.getModelObject().getName()));
-                item.add(link);
-            }
-        });
-    }
-
-}
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/internal/LanguagePanel.java b/core/src/main/java/org/apache/karaf/webconsole/core/internal/LanguagePanel.java
new file mode 100644
index 0000000..9016719
--- /dev/null
+++ b/core/src/main/java/org/apache/karaf/webconsole/core/internal/LanguagePanel.java
@@ -0,0 +1,36 @@
+package org.apache.karaf.webconsole.core.internal;
+
+import java.util.List;
+import java.util.Locale;
+
+import org.apache.karaf.webconsole.core.BasePage;
+import org.apache.wicket.ResourceReference;
+import org.apache.wicket.markup.html.image.Image;
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
+
+public class LanguagePanel extends Panel {
+
+    public LanguagePanel(String id, IModel<List<Locale>> locales) {
+        super(id);
+
+        add(new ListView<Locale>("languages", locales) {
+            @Override
+            protected void populateItem(final ListItem<Locale> item) {
+                final Locale model = item.getModelObject();
+                Image flagImage = new Image("flag", new ResourceReference(BasePage.class, "images/" + model.getDisplayName(Locale.ENGLISH).toLowerCase() + "-flag.png"));
+                Link<Void> link = new Link<Void>("languageLink") {
+                    @Override
+                    public void onClick() {
+                        getSession().setLocale(model);
+                    }
+                };
+                item.add(link.add(flagImage));
+            }
+        });
+    }
+
+}
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/internal/SidebarPanel.java b/core/src/main/java/org/apache/karaf/webconsole/core/internal/SidebarPanel.java
new file mode 100644
index 0000000..4c9be6e
--- /dev/null
+++ b/core/src/main/java/org/apache/karaf/webconsole/core/internal/SidebarPanel.java
@@ -0,0 +1,28 @@
+package org.apache.karaf.webconsole.core.internal;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.util.ListModel;
+
+public class SidebarPanel extends Panel {
+
+    public SidebarPanel(String id, Class<? extends Page> basePage, ListModel<Class<? extends Page>> listModel) {
+        super(id, listModel);
+
+        add(new BookmarkablePageLink<Page>("masterPageLink", basePage).add(new Label("masterPageLabel", basePage.getName())));
+
+        add(new ListView<Class<? extends Page>>("subPageLinks", listModel) {
+            @Override
+            protected void populateItem(ListItem<Class<? extends Page>> item) {
+                BookmarkablePageLink<Page> link = new BookmarkablePageLink<Page>("subPageLink", item.getModelObject());
+                link.add(new Label("subPageLabel", item.getModelObject().getName()));
+                item.add(link);
+            }
+        });
+    }
+
+}
diff --git a/core/src/main/resources/org/apache/karaf/webconsole/core/BasePage.html b/core/src/main/resources/org/apache/karaf/webconsole/core/BasePage.html
index 0e4d868..6c83638 100644
--- a/core/src/main/resources/org/apache/karaf/webconsole/core/BasePage.html
+++ b/core/src/main/resources/org/apache/karaf/webconsole/core/BasePage.html
@@ -13,30 +13,19 @@
         </div>
         <div class="grid_9">
             <h3>Administration console</h3>
-            <a href="#" wicket:id="goFrench">
-                <img wicket:id="frenchFlag" alt="french flag" height="14" width="20" />
-            </a>
-            <a href="#" wicket:id="goEnglish">
-                <img wicket:id="englishFlag" alt="english flag" height="14" width="20" />
-            </a>
+
+            <div wicket:id="languagePanel" id="languages">Languages go here</div>
         </div>
 
         <div class="clear"></div>
-
         <div class="grid_12">
             <div wicket:id="navigationPanel">Navigation goes here</div>
         </div>
 
         <div class="clear"></div>
-
-        <div class="grid_3">
-            <div wicket:id="sidebar">Sidebar goes here</div>
-        </div>
-
-        <div class="grid_9">
+        <div class="grid_12">
             <wicket:child />
         </div>
-
         <div class="clear"></div>
 
         <div class="grid_12">
diff --git a/core/src/main/resources/org/apache/karaf/webconsole/core/SidebarPage.html b/core/src/main/resources/org/apache/karaf/webconsole/core/SidebarPage.html
new file mode 100644
index 0000000..df9f17a
--- /dev/null
+++ b/core/src/main/resources/org/apache/karaf/webconsole/core/SidebarPage.html
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>Karaf wicket console</title>
+</head>
+
+<body>
+    <div class="container container_12">
+        <div class="grid_3">
+            <img wicket:id="karafLogo" alt="karaf-logo" height="70" width="150" />
+        </div>
+        <div class="grid_9">
+            <h3>Administration console</h3>
+
+            <div wicket:id="languagePanel" id="languages">Languages go here</div>
+        </div>
+
+        <div class="clear"></div>
+
+        <div class="grid_12">
+            <div wicket:id="navigationPanel">Navigation goes here</div>
+        </div>
+
+        <div class="clear"></div>
+        <div class="grid_3">
+            <div wicket:id="sidebar">Sidebar goes here</div>
+        </div>
+        <div class="grid_9">
+            <wicket:child />
+        </div>
+        <div class="clear"></div>
+
+        <div class="grid_12">
+            <div wicket:id="footer">Footer</div>
+        </div>
+    </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/core/src/main/resources/org/apache/karaf/webconsole/core/images/english-flag.jpeg b/core/src/main/resources/org/apache/karaf/webconsole/core/images/english-flag.png
similarity index 100%
rename from core/src/main/resources/org/apache/karaf/webconsole/core/images/english-flag.jpeg
rename to core/src/main/resources/org/apache/karaf/webconsole/core/images/english-flag.png
Binary files differ
diff --git a/core/src/main/resources/org/apache/karaf/webconsole/core/images/french-flag.jpeg b/core/src/main/resources/org/apache/karaf/webconsole/core/images/french-flag.jpeg
deleted file mode 100644
index 0c72cef..0000000
--- a/core/src/main/resources/org/apache/karaf/webconsole/core/images/french-flag.jpeg
+++ /dev/null
Binary files differ
diff --git a/core/src/main/resources/org/apache/karaf/webconsole/core/internal/LanguagePanel.html b/core/src/main/resources/org/apache/karaf/webconsole/core/internal/LanguagePanel.html
new file mode 100644
index 0000000..275e99e
--- /dev/null
+++ b/core/src/main/resources/org/apache/karaf/webconsole/core/internal/LanguagePanel.html
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <title>Karaf wicket console</title>
+</head>
+<body>
+
+    <wicket:panel>
+        <ul>
+            <li wicket:id="languages">
+                <a href="#" wicket:id="languageLink">
+                    <img wicket:id="flag" alt="flag" height="14" width="20" />
+                </a>
+            </li>
+        </ul>
+    </wicket:panel>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/core/src/main/resources/org/apache/karaf/webconsole/core/SidebarPanel.html b/core/src/main/resources/org/apache/karaf/webconsole/core/internal/SidebarPanel.html
similarity index 100%
rename from core/src/main/resources/org/apache/karaf/webconsole/core/SidebarPanel.html
rename to core/src/main/resources/org/apache/karaf/webconsole/core/internal/SidebarPanel.html
diff --git a/core/src/main/resources/org/apache/karaf/webconsole/core/style.css b/core/src/main/resources/org/apache/karaf/webconsole/core/style.css
index 58bb9b0..51600de 100644
--- a/core/src/main/resources/org/apache/karaf/webconsole/core/style.css
+++ b/core/src/main/resources/org/apache/karaf/webconsole/core/style.css
@@ -30,10 +30,14 @@
     width: 250px;
 }
 
-#sidebar ul li {
+#sidebar ul li, #languages ul li {
     list-style-type: none;
 }
 
+#languages ul li {
+    display: inline;
+}
+
 #topmenu ul li, #top-panel ul li {
     display: inline;
 }
diff --git a/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/HomePage.java b/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/HomePage.java
index feedd35..d18b75b 100644
--- a/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/HomePage.java
+++ b/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/HomePage.java
@@ -5,12 +5,12 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.apache.karaf.webconsole.core.BasePage;
+import org.apache.karaf.webconsole.core.SidebarPage;
+import org.apache.wicket.Page;
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.behavior.SimpleAttributeModifier;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
-import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.ops4j.pax.wicket.api.PaxWicketBean;
@@ -22,7 +22,7 @@
 /**
  * Homepage
  */
-public class HomePage extends BasePage {
+public class HomePage extends SidebarPage {
 
     @PaxWicketBean(name = "blueprintBundleContext")
     private BundleContext context;
@@ -153,8 +153,8 @@
     }
 
     @Override
-    protected List<Class> getSubPages() {
-        List<Class> subpages = new LinkedList<Class>();
+    protected List<Class<? extends Page>> getSubPages() {
+        List<Class<? extends Page>> subpages = new LinkedList<Class<? extends Page>>();
         subpages.add(ConfigurationsPage.class);
         subpages.add(EventsPage.class);
         return subpages;
