diff --git a/res/layout/parentfragment_viewpager.xml b/res/layout/parentfragment_viewpager.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4c5a75910ee7b2181e969049727c64a1997d539d
--- /dev/null
+++ b/res/layout/parentfragment_viewpager.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.v4.view.ViewPager
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/pager"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
+    <android.support.v4.view.PagerTitleStrip
+        android:id="@+id/pager_title_strip"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="top" />
+</android.support.v4.view.ViewPager>
diff --git a/src/net/i2p/android/router/activity/I2PActivityBase.java b/src/net/i2p/android/router/activity/I2PActivityBase.java
index 04691d8e8ed181b659be2d49b8caa904c865d9b5..a5017fb2a18d4dc25036d098fff809758ea1b089 100644
--- a/src/net/i2p/android/router/activity/I2PActivityBase.java
+++ b/src/net/i2p/android/router/activity/I2PActivityBase.java
@@ -323,7 +323,7 @@ public abstract class I2PActivityBase extends ActionBarActivity implements
     }
 
     public static class TabListener implements ActionBar.TabListener {
-        private Fragment mFragment;
+        protected Fragment mFragment;
 
         public TabListener(Fragment fragment) {
             mFragment = fragment;
diff --git a/src/net/i2p/android/router/activity/NetDbActivity.java b/src/net/i2p/android/router/activity/NetDbActivity.java
index e30600da7e7547b43e36310aaf7ca1ae9af061ee..267320843ce534e8f9cfdbcc3b56138bc9099fb5 100644
--- a/src/net/i2p/android/router/activity/NetDbActivity.java
+++ b/src/net/i2p/android/router/activity/NetDbActivity.java
@@ -1,27 +1,25 @@
 package net.i2p.android.router.activity;
 
 import net.i2p.android.router.R;
-import net.i2p.android.router.fragment.NetDbSummaryTableFragment;
+import net.i2p.android.router.fragment.NetDbListFragment;
+import net.i2p.android.router.fragment.NetDbSummaryPagerFragment;
 import android.os.Bundle;
 import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentStatePagerAdapter;
 import android.support.v4.app.FragmentTransaction;
-import android.support.v4.view.ViewPager;
 import android.support.v7.app.ActionBar;
 import android.support.v7.app.ActionBar.Tab;
 
 public class NetDbActivity extends I2PActivityBase {
-    static final int TAB_SUMMARY = 0;
-    static final int TAB_ROUTERS = 1;
-    static final int TAB_LEASESETS = 2;
-    private static final String SELECTED_TAB = "selected_tab";
+    /**
+     * Whether or not the activity is in two-pane mode, i.e. running on a tablet
+     * device.
+     */
+    private boolean mTwoPane;
 
-    NetDbPagerAdapter mNetDbPagerAdapter;
-    ViewPager mViewPager;
+    private static final String SELECTED_TAB = "selected_tab";
 
     @Override
-    protected boolean useViewPager() {
+    protected boolean canUseTwoPanes() {
         return true;
     }
 
@@ -33,54 +31,50 @@ public class NetDbActivity extends I2PActivityBase {
         ActionBar actionBar = getSupportActionBar();
         actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
 
-        // Set up NetDbPagerAdapter containing the categories
-        mNetDbPagerAdapter = new NetDbPagerAdapter(getSupportFragmentManager());
-
-        // Set up ViewPager for swiping between categories
-        mViewPager = (ViewPager) findViewById(R.id.pager);
-        mViewPager.setAdapter(mNetDbPagerAdapter);
-        mViewPager.setOnPageChangeListener(
-                new ViewPager.SimpleOnPageChangeListener() {
-                    @Override
-                    public void onPageSelected(int position) {
-                        mViewPager.setCurrentItem(position);
-                    }
-                });
-
-        // Set up TabListener to update NetDbPagerAdapter with the
-        // current section to display categories for
-        ActionBar.TabListener tabListener = new ActionBar.TabListener() {
-
-            public void onTabSelected(Tab tab, FragmentTransaction ft) {
-                mNetDbPagerAdapter.setCurrentSection(tab.getPosition());
-            }
-
-            public void onTabUnselected(Tab tab, FragmentTransaction ft) {
-                mNetDbPagerAdapter.setCurrentSection(TAB_SUMMARY);
-            }
-
-            public void onTabReselected(Tab tab, FragmentTransaction ft) {
-                // User selected the already selected tab.
-            }
-        };
-
+        // Statistics tab
+        NetDbSummaryPagerFragment sf = new NetDbSummaryPagerFragment();
         actionBar.addTab(
                 actionBar.newTab()
                         .setText("Statistics")
-                        .setTabListener(tabListener));
+                        .setTabListener(new NetDbSummaryPagerTabListener(sf)));
+
+        // Routers tab
+        NetDbListFragment rf = new NetDbListFragment();
+        Bundle args = new Bundle();
+        args.putBoolean(NetDbListFragment.SHOW_ROUTERS, true);
+        rf.setArguments(args);
         actionBar.addTab(
                 actionBar.newTab()
                         .setText("Routers")
-                        .setTabListener(tabListener));
+                        .setTabListener(new TabListener(rf)));
+
+        // LeaseSets tab
+        NetDbListFragment lf = new NetDbListFragment();
+        args = new Bundle();
+        args.putBoolean(NetDbListFragment.SHOW_ROUTERS, false);
+        lf.setArguments(args);
         actionBar.addTab(
                 actionBar.newTab()
                         .setText("LeaseSets")
-                        .setTabListener(tabListener));
+                        .setTabListener(new TabListener(lf)));
 
         if (savedInstanceState != null) {
             int selected = savedInstanceState.getInt(SELECTED_TAB);
             actionBar.setSelectedNavigationItem(selected);
         }
+
+        if (findViewById(R.id.detail_fragment) != null) {
+            // The detail container view will be present only in the
+            // large-screen layouts (res/values-large and
+            // res/values-sw600dp). If this view is present, then the
+            // activity should be in two-pane mode.
+            mTwoPane = true;
+
+            // In two-pane mode, list items should be given the
+            // 'activated' state when touched.
+            //rf.setActivateOnItemClick(true);
+            //lf.setActivateOnItemClick(true);
+        }
     }
 
     @Override
@@ -90,61 +84,22 @@ public class NetDbActivity extends I2PActivityBase {
                 getSupportActionBar().getSelectedNavigationIndex());
     }
 
-    public class NetDbPagerAdapter extends FragmentStatePagerAdapter {
-        private int mSection;
-
-        public NetDbPagerAdapter(FragmentManager fm) {
-            super(fm);
-            mSection = TAB_SUMMARY;
-        }
-
-        public void setCurrentSection(int section) {
-            // Change the ViewPager item (in case the
-            // new section doesn't have as many items)
-            mViewPager.setCurrentItem(0);
-            // Update the section
-            mSection = section;
-            notifyDataSetChanged();
-        }
-
-        @Override
-        public Fragment getItem(int i) {
-            switch (mSection) {
-            case TAB_ROUTERS:
-            case TAB_LEASESETS:
-            default: // TAB_SUMMARY
-                return NetDbSummaryTableFragment.newInstance(i);
-            }
-        }
-
-        @Override
-        public int getCount() {
-            switch (mSection) {
-            case TAB_ROUTERS:
-                return 2;
-            case TAB_LEASESETS:
-                return 1;
-            default: // TAB_SUMMARY
-                return 3;
-            }
+    public static class NetDbSummaryPagerTabListener extends TabListener {
+        public NetDbSummaryPagerTabListener(Fragment fragment) {
+            super(fragment);
         }
 
         @Override
-        public CharSequence getPageTitle(int i) {
-            switch (mSection) {
-            case TAB_ROUTERS:
-            case TAB_LEASESETS:
-                return "CAT " + (i + 1);
-            default: // TAB_SUMMARY
-                switch (i) {
-                case 1:
-                    return "Countries";
-                case 2:
-                    return "Transports";
-                default:
-                    return "Versions";
-                }
-            } 
+        public void onTabSelected(Tab tab, FragmentTransaction ft) {
+            /**
+             * This is a work-around for Issue 42601
+             * https://code.google.com/p/android/issues/detail?id=42601
+             * 
+             * The method getChildFragmentManager() does not clear up
+             * when the Fragment is detached.
+             */
+            mFragment = new NetDbSummaryPagerFragment();
+            super.onTabSelected(tab, ft);
         }
     }
 }
diff --git a/src/net/i2p/android/router/fragment/NetDbListFragment.java b/src/net/i2p/android/router/fragment/NetDbListFragment.java
new file mode 100644
index 0000000000000000000000000000000000000000..aa3cf320fa4163c1d5090103504af67acdba62c3
--- /dev/null
+++ b/src/net/i2p/android/router/fragment/NetDbListFragment.java
@@ -0,0 +1,8 @@
+package net.i2p.android.router.fragment;
+
+import android.support.v4.app.Fragment;
+
+public class NetDbListFragment extends Fragment {
+    public static final String SHOW_ROUTERS = "show_routers";
+
+}
diff --git a/src/net/i2p/android/router/fragment/NetDbSummaryPagerFragment.java b/src/net/i2p/android/router/fragment/NetDbSummaryPagerFragment.java
new file mode 100644
index 0000000000000000000000000000000000000000..872e782d35666411c67303256649134cabecdf12
--- /dev/null
+++ b/src/net/i2p/android/router/fragment/NetDbSummaryPagerFragment.java
@@ -0,0 +1,69 @@
+package net.i2p.android.router.fragment;
+
+import net.i2p.android.router.R;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentStatePagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+public class NetDbSummaryPagerFragment extends Fragment {
+    NetDbPagerAdapter mNetDbPagerAdapter;
+    ViewPager mViewPager;
+
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        View v = inflater.inflate(R.layout.parentfragment_viewpager, container, false);
+        return v;
+    }
+
+    @Override
+    public void onViewCreated(View view, Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+
+        // Set up NetDbPagerAdapter containing the categories
+        mNetDbPagerAdapter = new NetDbPagerAdapter(getChildFragmentManager());
+
+        // Set up ViewPager for swiping between categories
+        mViewPager = (ViewPager) getActivity().findViewById(R.id.pager);
+        mViewPager.setAdapter(mNetDbPagerAdapter);
+        mViewPager.setOnPageChangeListener(
+                new ViewPager.SimpleOnPageChangeListener() {
+                    @Override
+                    public void onPageSelected(int position) {
+                        mViewPager.setCurrentItem(position);
+                    }
+                });
+    }
+
+    public class NetDbPagerAdapter extends FragmentStatePagerAdapter {
+        public NetDbPagerAdapter(FragmentManager fm) {
+            super(fm);
+        }
+
+        @Override
+        public Fragment getItem(int i) {
+            return NetDbSummaryTableFragment.newInstance(i);
+        }
+
+        @Override
+        public int getCount() {
+            return 3;
+        }
+
+        @Override
+        public CharSequence getPageTitle(int i) {
+            switch (i) {
+            case 1:
+                return "Countries";
+            case 2:
+                return "Transports";
+            default:
+                return "Versions";
+            } 
+        }
+    }
+}