diff --git a/client/components/admin/admin-pages.vue b/client/components/admin/admin-pages.vue
index dec02278..0327a70a 100644
--- a/client/components/admin/admin-pages.vue
+++ b/client/components/admin/admin-pages.vue
@@ -8,43 +8,72 @@
             .headline.blue--text.text--darken-2 Pages
             .subheading.grey--text Manage pages #[v-chip(label, color='primary', small).white--text coming soon]
           v-spacer
-          v-btn(color='grey', outline, @click='refresh', large, disabled)
+          v-btn(color='grey', outline, @click='refresh', large)
             v-icon.grey--text refresh
           v-btn(color='primary', depressed, large, @click='newpage', disabled)
             v-icon(left) add
             span New Page
-        v-card.mt-3
+        v-card.wiki-form.mt-3
+          v-toolbar(flat, :color='$vuetify.dark ? `grey darken-3-d5` : `white`', height='80')
+            v-spacer
+            v-text-field(
+              outline
+              v-model='search'
+              append-icon='search'
+              label='Search Pages...'
+              single-line
+              hide-details
+              )
+            v-select.ml-2(
+              outline
+              hide-details
+              single-line
+              label='Locale'
+            )
+            v-select.ml-2(
+              outline
+              hide-details
+              single-line
+              label='Publish State'
+            )
+            v-spacer
+          v-divider
           v-data-table(
-            :items='groups'
+            :items='pages'
             :headers='headers'
             :search='search'
             :pagination.sync='pagination'
             :rows-per-page-items='[15]'
+            :loading='loading'
+            must-sort,
             hide-actions
           )
             template(slot='items', slot-scope='props')
-              tr.is-clickable(:active='props.selected', @click='$router.push("/e/" + props.item.id)')
+              tr.is-clickable(:active='props.selected', @click='$router.push(`/pages/` + props.item.id)')
                 td.text-xs-right {{ props.item.id }}
-                td {{ props.item.name }}
-                td {{ props.item.userCount }}
+                td
+                  .body-2 {{ props.item.title }}
+                  .caption {{ props.item.description }}
+                td.admin-pages-path
+                  v-chip(label, small, :color='$vuetify.dark ? `grey darken-4` : `grey lighten-4`') {{ props.item.locale }}
+                  span.ml-2.grey--text(:class='$vuetify.dark ? `text--lighten-1` : `text--darken-2`') {{ props.item.path }}
                 td {{ props.item.createdAt | moment('calendar') }}
                 td {{ props.item.updatedAt | moment('calendar') }}
             template(slot='no-data')
               v-alert.ma-3(icon='warning', :value='true', outline) No pages to display.
-          .text-xs-center.py-2(v-if='this.pages > 0')
-            v-pagination(v-model='pagination.page', :length='pages')
-
-    page-selector(v-model='pageSelectorShown', mode='new')
+          .text-xs-center.py-2(v-if='this.pageTotal > 1')
+            v-pagination(v-model='pagination.page', :length='pageTotal')
 </template>
 
 <script>
+import pagesQuery from 'gql/admin/pages/pages-query-list.gql'
 
 export default {
   data() {
     return {
-      selectedGroup: {},
+      selectedPage: {},
       pagination: {},
-      groups: [],
+      pages: [],
       headers: [
         { text: 'ID', value: 'id', width: 50, align: 'right' },
         { text: 'Title', value: 'title' },
@@ -53,23 +82,23 @@ export default {
         { text: 'Last Updated', value: 'updatedAt', width: 250 }
       ],
       search: '',
-      pageSelectorShown: false
+      loading: false
     }
   },
   computed: {
-    pages () {
+    pageTotal () {
       if (this.pagination.rowsPerPage == null || this.pagination.totalItems == null) {
         return 0
       }
 
-      return Math.ceil(this.pagination.totalItems / this.pagination.rowsPerPage)
+      return Math.ceil(this.pages.length / this.pagination.rowsPerPage)
     }
   },
   methods: {
     async refresh() {
-      // await this.$apollo.queries.groups.refetch()
+      await this.$apollo.queries.pages.refetch()
       this.$store.commit('showNotification', {
-        message: 'Pages have been refreshed.',
+        message: 'Page list has been refreshed.',
         style: 'success',
         icon: 'cached'
       })
@@ -77,10 +106,26 @@ export default {
     newpage() {
       this.pageSelectorShown = true
     }
+  },
+  apollo: {
+    pages: {
+      query: pagesQuery,
+      fetchPolicy: 'network-only',
+      update: (data) => data.pages.list,
+      watchLoading (isLoading) {
+        this.loading = isLoading
+        this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'admin-pages-refresh')
+      }
+    }
   }
 }
 </script>
 
 <style lang='scss'>
-
+.admin-pages-path {
+  display: flex;
+  justify-content: flex-start;
+  align-items: center;
+  font-family: 'Source Sans Pro', sans-serif;
+}
 </style>
diff --git a/client/components/editor/editor-modal-media.vue b/client/components/editor/editor-modal-media.vue
index b1ed1326..55b3c6d8 100644
--- a/client/components/editor/editor-modal-media.vue
+++ b/client/components/editor/editor-modal-media.vue
@@ -5,13 +5,13 @@
         v-flex(xs9)
           v-card.radius-7.animated.fadeInLeft.wait-p1s(light)
             v-card-text
-              v-toolbar.radius-7(color='teal lighten-5', dense, flat)
-                .body-2.teal--text Images
-                v-spacer
-                v-btn(outline, small, color='teal')
+              .d-flex
+                v-toolbar.radius-7(color='teal lighten-5', dense, flat, height='44')
+                  .body-2.teal--text Images
+                v-btn.ml-3.my-0.radius-7(outline, large, color='teal', disabled)
                   v-icon(left) keyboard_backspace
                   span Parent Folder
-                v-btn(outline, small, color='teal')
+                v-btn.my-0.radius-7(outline, large, color='teal')
                   v-icon(left) add
                   span New Folder
               v-list.mt-3(dense, two-line)
@@ -26,14 +26,14 @@
                     v-list-tile-action
                       .caption.pr-3 2019-04-07
                     v-list-tile-action
-                      v-chip(label, small) JPG
+                      v-chip.teal--text(label, small, color='teal lighten-5') JPG
                   v-divider(v-if='idx < 10 - 1')
               .d-flex.mt-3
-                v-toolbar.radius-7(flat, color='grey lighten-4', dense)
+                v-toolbar.radius-7(flat, color='grey lighten-4', dense, height='44')
                   .body-2 / universe
                   v-spacer
                   .body-1.grey--text.text--darken-1 10 files
-                v-btn.ml-3(color='teal', dark, @click='insert')
+                v-btn.ml-3.my-0.radius-7(color='teal', large, @click='insert', disabled)
                   v-icon(left) save_alt
                   span Insert
 
diff --git a/client/graph/admin/pages/pages-query-list.gql b/client/graph/admin/pages/pages-query-list.gql
new file mode 100644
index 00000000..0faf0785
--- /dev/null
+++ b/client/graph/admin/pages/pages-query-list.gql
@@ -0,0 +1,17 @@
+query {
+  pages {
+    list {
+      id
+      locale
+      path
+      title
+      description
+      contentType
+      isPublished
+      isPrivate
+      privateNS
+      createdAt
+      updatedAt
+    }
+  }
+}
diff --git a/server/graph/resolvers/page.js b/server/graph/resolvers/page.js
index df79cb3f..20489179 100644
--- a/server/graph/resolvers/page.js
+++ b/server/graph/resolvers/page.js
@@ -28,6 +28,21 @@ module.exports = {
         }
       }
     },
+    async list (obj, args, context, info) {
+      return WIKI.models.pages.query().column([
+        'id',
+        'path',
+        { locale: 'localeCode' },
+        'title',
+        'description',
+        'isPublished',
+        'isPrivate',
+        'privateNS',
+        'contentType',
+        'createdAt',
+        'updatedAt'
+      ])
+    }
   },
   PageMutation: {
     async create(obj, args, context) {
diff --git a/server/graph/schemas/page.graphql b/server/graph/schemas/page.graphql
index 24f93d8c..b8ba1819 100644
--- a/server/graph/schemas/page.graphql
+++ b/server/graph/schemas/page.graphql
@@ -26,6 +26,8 @@ type PageQuery {
     path: String
     locale: String
   ): PageSearchResponse! @auth(requires: ["manage:system", "read:pages"])
+
+  list: [PageListItem!]! @auth(requires: ["manage:system"])
 }
 
 # -----------------------------------------------
@@ -108,3 +110,17 @@ type PageSearchResult {
   path: String!
   locale: String!
 }
+
+type PageListItem {
+  id: Int!
+  path: String!
+  locale: String!
+  title: String
+  description: String
+  contentType: String!
+  isPublished: Boolean!
+  isPrivate: Boolean!
+  privateNS: String
+  createdAt: Date!
+  updatedAt: Date!
+}