diff --git a/cmis_browser.js b/cmis_browser.js
index 9c3e440..c7bfcf3 100644
--- a/cmis_browser.js
+++ b/cmis_browser.js
@@ -1,47 +1,15 @@
-(function ($) {
-$(document).ready(function() {
-  var returnUrl = '';
-  $('<input type="submit" id="cmis-browse" class="form-submit" value="Browse CMIS repository"><div id="example"></div>').insertAfter('#edit-filepath');
-  $('#cmis-browse').click(function() {
-
-    $("#example").load('?q=cmis/browser/Sites #cmis-breadcrumb', function(){
-      $("#example").append("<div id='cmistable'></div>")
-      //ideally we'd just call the cmis/browser popup here, but in the event that someone hasn't enabled safe urls the query will fail
-      //?type=popup to be added
-      $("#cmistable").load('?q=cmis/browser/Sites .cmis_browser_browse_children', function(){
-        $('div#example ul.actions').css("display","none");
-      })
-    }).dialog({
-      width: 900,
-      height: 650,
-      title: "Choose a folder",
-      resizable: true,
-      modal: true,
-      overlay: { 
-            opacity: 0.1, 
-            background: "black" 
-      }, 
-      buttons: {
-        'Use this view': function() {          
-          $("#edit-filepath").val(unescape(returnUrl));
-          $(this).dialog('close');
+(function($) {
+  Drupal.behaviors.cmis_browser = {
+    attach : function(context, settings) {
+      // Attach a close button to the folder dialog box.
+      $('.cmis_views_browse_folder').dialog("option", "buttons", {
+        "Select This Folder" : function() {
+          path = $(this).dialog("option", "title");
+          $('#edit-filepath')[0].value = path.substr(1,path.length-1);
+          $(this).dialog("close");
         }
-      }
-    });
-  
-    $('.ui-dialog').css("display","block", "position","fixed", "top","100px", "left","100px");
-    $("a").live('click', function(){
-      var href = this.href.toString().split("cmis/browser/")[1].split("?")[0];
-	  $("#example").load('?q=cmis/browser/'+href+' #cmis-breadcrumb', function(){
-        $("#example").append("<div id='cmistable'></div>")
-		$("#cmistable").load('?q=cmis/browser/'+href+' .cmis_browser_browse_children', function(){
-          $('div#example ul.actions').css("display","none");
-        })
-      })
-      returnUrl = this.href.toString().split("cmis/browser/")[1].split("?")[0];
-      return false;
-    });
-    return false;
-  });
-});
-})(jQuery);
\ No newline at end of file
+      });
+    }
+  }
+})(jQuery);
+;
\ No newline at end of file
diff --git a/cmis_views.admin.inc b/cmis_views.admin.inc
index d8022c6..675d3ab 100644
--- a/cmis_views.admin.inc
+++ b/cmis_views.admin.inc
@@ -68,7 +68,7 @@ function cmis_views_admin_overview() {
     '#theme' => 'table',
     '#header' => $header,
     '#rows' => $rows,
-    '#empty' => t('No CMIS views available.')),
+    '#empty' => t('No CMIS views available.'),
   );
   $build['cmis_views_pager'] = array('#theme' => 'pager');
 
@@ -126,13 +126,12 @@ function cmis_views_admin_edit($cmisinfo = array()) {
  * @see cmis_views_admin_form_submit()
  */
  
+
 function cmis_views_admin_form($form, &$form_state, $cmisinfo = array('cmisviewname' => '', 'themetype' => '', 'querytype' => '', 'cmisquery' => '', 'createblock' => '', 'blocktitle' => '', 'filepath' => '', 'cmid' => NULL)) {
-  ctools_include('dependent');
   module_load_include('utils.inc', 'cmis_views');
+  drupal_add_library('system','ui.dialog');
+  drupal_add_js(drupal_get_path('module','cmis_views') . '/cmis_browser.js');
 
-  drupal_add_library('system', 'ui.dialog');
-  drupal_add_js(drupal_get_path('module', 'cmis_views') . '/cmis_browser.js');
-  
   $types = node_type_get_types();
   $options[0] = t('Directory');
   $options[1] = t('CMIS');
@@ -188,6 +187,19 @@ function cmis_views_admin_form($form, &$form_state, $cmisinfo = array('cmisviewn
     '#dependency' => array('radio:querytype' => array('0')),
   );
   
+  $form['cmis_views_add']['queryinfo']['browse'] = array(
+    '#type' => 'button',
+    '#value' => t('Browse CMIS repository'),
+    '#submit' => array(),
+    '#ajax' => array(
+      'path' => 'admin/config/cmis/views/ajax/',
+    ),
+    '#limit_validation_errors' => array(), // No validation needed for this.
+    '#dependency' => array('radio:querytype' => array('0')),
+  );
+
+ cmis_views_admin_ajax_browse(''); 
+  
   $form['cmis_views_add']['queryinfo']['cmisquery'] = array(
     '#type' => 'textfield',
     '#title' => t('CMIS SQL Query'),
@@ -281,6 +293,7 @@ function cmis_views_block_save($delta = '') {
 function cmis_views_admin_form_submit($form, &$form_state) {
   module_load_include('utils.inc', 'cmis_views');
   module_load_include('api.inc', 'cmis');
+
   $repository = cmisapi_getRepositoryInfo();
 
   form_state_values_clean($form_state);
@@ -314,4 +327,92 @@ function cmis_views_admin_form_submit($form, &$form_state) {
     drupal_set_message(t('The CMIS view has been updated.'));
   }  
   $form_state['redirect'] = 'admin/structure/block/manage/cmis_views/' . $form_state['values']['cmid']. '/configure';
-}
\ No newline at end of file
+}
+
+/**
+ * Browse a CMIS reposiotry with ajax commands.
+ * string $foldier_id the id of the folder to browse
+ */
+function cmis_views_admin_ajax_browse($folder_id = '') {
+  module_load_include('api.inc', 'cmis');
+  module_load_include('utils.inc', 'cmis_browser');
+  $commands = array();
+
+  // Invoke CMIS service
+  try {
+    $repository = cmis_get_repository();
+
+    module_load_include('utils.inc', 'cmis_views');
+    module_load_include('api.inc', 'cmis');
+    $repository = cmis_get_repository();
+    if ($folder_id == '') {
+      if(array_key_exists('browser_default_folderId', $repository->settings)) {
+        // grab default folderId from repository's settings
+        $folder_id = $repository->settings['browser_default_folderId'];
+      }
+      else {
+        // fallback to repository's root folderId
+        $folder_id = $repository->info->repositoryInfo['cmis:rootFolderId'];
+      }
+    }
+    $object = cmisapi_getProperties($repository->repositoryId, $folder_id);
+    $children = cmisapi_getChildren($repository->repositoryId, $folder_id);
+    $content = array();
+    if(isset($object->properties['cmis:parentId'])) {
+      $items[] = l('Parent Folder',
+                   'admin/config/cmis/views/nojs/'.urlencode($object->properties['cmis:parentId']),
+                   array(
+                      'attributes' => array(
+                         'class' =>array(
+                            'use-ajax'
+                         ),
+                      ),
+      ));
+    }
+    foreach ($children->objectList as $cmis_item) {
+      if ($cmis_item->properties['cmis:objectTypeId'] == 'cmis:folder') {
+        $items[] = l($cmis_item->properties['cmis:name'],
+                     'admin/config/cmis/views/nojs/'. urlencode($cmis_item->id),
+                     array(
+                       'attributes' => array(
+                         'class' =>array(
+                           'use-ajax'
+                         ),
+                       ),
+        ));
+      }
+      else {
+        // show a name so that users have an idea what is in the folder.
+        $items[] = $cmis_item->properties['cmis:name'];
+      }
+    }
+
+    $content['list'] = array(
+                  '#theme_wrappers' => array('container'),
+                  '#attributes' => array(
+                      'class' => array(
+                        'cmis_views_browse_folder'
+                      ),
+                  ),
+                  'child' =>  array(
+                    '#theme' => 'item_list',
+                    '#title' => t('Browse folder'),
+                    '#items' => $items,
+                  )
+    );
+    $folder_path = $object->properties['cmis:path'];
+    $commands[] =  ajax_command_remove('.cmis_views_browse_folder');
+    $commands[] =  ajax_command_append('html', drupal_render($content) );
+    $commands[] =  ajax_command_invoke('.cmis_views_browse_folder', 'dialog', array(array('modal' => "true", 'title' => $folder_path)) );
+    // Fire attach behaviors for the dialog by doing a dummy insert.
+    $commands[] =  ajax_command_append('html', '');
+  }
+  catch(Exception $error) {
+    $commands[] = ajax_command_alert(t('Cmis Error, %error',array('%error' => $error->getMessage())));
+  }
+
+  $page = array();
+  $page['#type'] = 'ajax';
+  $page['#commands'] = $commands;
+  return $page;
+}
diff --git a/cmis_views.module b/cmis_views.module
index 1e8627a..e0b6fa8 100644
--- a/cmis_views.module
+++ b/cmis_views.module
@@ -68,6 +68,28 @@ function cmis_views_menu() {
     'type' => MENU_CALLBACK,
   );  
 
+  // Paths for ajax browsing
+  // Possibly TODO nojs version.
+  $items['admin/config/cmis/views/ajax/%'] = array(
+    'title' => 'cmis browse',
+    'page callback' => 'cmis_views_admin_ajax_browse',
+    'page arguments' => array(5),
+    'delivery callback' => 'ajax_deliver',
+    'access arguments' => array('administer cmis views'),
+    'file' => 'cmis_views.admin.inc',
+    'type' => MENU_CALLBACK,
+  );
+
+  $items['admin/config/cmis/views/ajax'] = array(
+      'title' => 'cmis browse',
+      'page callback' => 'cmis_views_admin_ajax_browse',
+      'page arguments' => array(),
+      'delivery callback' => 'ajax_deliver',
+      'access arguments' => array('administer cmis views'),
+      'file' => 'cmis_views.admin.inc',
+      'type' => MENU_CALLBACK,
+  );
+  
   return $items;
 }
 
