diff --git a/css/imce-content.css b/css/imce-content.css
index ba5c245..d81901a 100644
--- a/css/imce-content.css
+++ b/css/imce-content.css
@@ -454,4 +454,15 @@ body.imce {
 }
 .box-view #file-list td.size, .box-view #file-list td.date, .box-view #file-list td.width, .box-view #file-list td.height {
   display: none;
-}
\ No newline at end of file
+}
+#dir-stat .imce_pager {
+  text-align:right;
+  width:49%;
+
+  float:right;
+}
+#dir-stat .dir-stat-inner {
+  width:49%;
+
+  float:left;
+}
diff --git a/imce.module b/imce.module
index 698d40f..99bb566 100644
--- a/imce.module
+++ b/imce.module
@@ -71,9 +71,14 @@ function imce_theme() {
     'arguments' => array('imce_ref' => NULL),
     'path' => $path,
   );
+  $theme['imce_pager'] = array(
+    'template' => 'imce-pager',
+    'arguments' => array('imce' => NULL, 'start' => NULL, 'end' => NULL, 'total' => NULL, 'page' => NULL),
+    'path' => $path,
+  );
   $theme['imce_content'] = array(
     'template' => 'imce-content',
-    'arguments' => array('tree' => NULL, 'forms' => NULL, 'imce_ref' => NULL),
+    'arguments' => array('tree' => NULL, 'forms' => NULL, 'imce_ref' => NULL, 'pager' => NULL),
     'path' => $path,
   );
   $theme['imce_page'] = array(
@@ -198,4 +203,27 @@ function imce_user_page_access($account, $user = FALSE) {
  */
 function imce_reg_dir($dirname) {
   return $dirname == '.' || is_int($dirname) || (is_string($dirname) && $dirname != '' && !preg_match('@(^\s)|(^/)|(^\./)|(\s$)|(/$)|(/\.$)|(\.\.)|(//)|(\\\\)|(/\./)@', $dirname));
+}
+
+/**
+ * Get pager
+ */
+function imce_get_pager($imce) {
+  $imce_showperpage = variable_get('imce_showperpage', 20);
+  if ($imce_showperpage != 0) {
+  $page = 1;
+  $total = intval(count($imce['files']) / $imce_showperpage);
+
+  if (isset($_GET['page'])) {
+    $page = intval($_GET['page']);
+  }
+
+  $start = $page >= 7 ? $page - 4 : 1;
+  $end = $page >= 7 ? (($page + 4) > $total ? $total : $page + 4 ) : variable_get('imce_maxpages', 10);
+
+  return theme('imce_pager', $imce, $start, $end, $total, $page);
+  }
+  else {
+    return '';
+  }
 }
\ No newline at end of file
diff --git a/inc/imce.admin.inc b/inc/imce.admin.inc
index b844811..2c22feb 100644
--- a/inc/imce.admin.inc
+++ b/inc/imce.admin.inc
@@ -45,6 +45,28 @@ function imce_admin_form(&$form_state) {
     $form['roles'][$rid] = imce_role_form($role, $form['#weighted'], $core);
   }
 
+  //pager settings
+  $form['pager'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Pager settings'),
+    '#collapsible' => true,
+    '#collapsed' => false,
+  );
+
+  $form['pager']['imce_showperpage'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Number files per page'),
+    '#default_value' => variable_get('imce_showperpage', 20),
+    '#description' => t('By default 20 shown per page. Smaller number faster rendering. Set to 0 for remove paging'),
+  );
+
+  $form['pager']['imce_maxpages'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Maximum number of pages to display.'),
+    '#default_value' => variable_get('imce_maxpages', 10),
+    '#description' => t('By default 10 pages displayd in pager.'),
+  );
+
   //common settings
   $form['common'] = array(
     '#type' => 'fieldset',
@@ -148,6 +170,14 @@ function imce_admin_submit($form, &$form_state) {
   if (isset($form_state['values']['disable_private'])) {
     variable_set('imce_settings_disable_private', $form_state['values']['disable_private']);
   }
+
+  if (isset($form_state['values']['imce_maxpages'])) {
+    variable_set('imce_maxpages', $form_state['values']['imce_maxpages']);
+  }
+
+  if (isset($form_state['values']['imce_showperpage'])) {
+    variable_set('imce_showperpage', $form_state['values']['imce_showperpage']);
+  }
   drupal_set_message(t('Changes have been saved.'));
 }
 
diff --git a/inc/imce.page.inc b/inc/imce.page.inc
index 07609f7..2832bb7 100644
--- a/inc/imce.page.inc
+++ b/inc/imce.page.inc
@@ -73,7 +73,20 @@ function imce_content($user, $jsop = NULL) {
     }
   }
 
-  $content = theme('imce_content', imce_create_tree($imce), $forms, $imce_ref);
+  //pager start
+  $page = 1;
+  $total = intval(count($imce['files']) / variable_get('imce_showperpage', 20));
+
+  if (isset($_GET['page'])) {
+    $page = intval($_GET['page']);
+  }
+
+  $start = $page >= 7 ? $page - 4 : 1;
+  $end = $page >= 7 ? (($page + 4) > $total ? $total : $page + 4 ) : variable_get('imce_maxpages', 10);
+  //pager end
+
+  $pager = theme('imce_pager', $imce, $start, $end, $total, $page); 
+  $content = theme('imce_content', imce_create_tree($imce), $forms, $imce_ref, $pager);
 
   //make necessary changes for js conversion
   $imce['dir'] = str_replace('%2F', '/', rawurlencode($imce['dir']));
@@ -106,9 +119,10 @@ function imce_js($user, $jsop = '') {
       }
     }
   }
+  //pager
+  $response['data']['dirpager'] = imce_get_pager($imce);
   //messages
   $response['messages'] = drupal_get_messages();
-
   //disable devel log.
   $GLOBALS['devel_shutdown'] = FALSE;
   //for upload we must return plain text header.
diff --git a/js/imce.js b/js/imce.js
index 2fa265e..02c91b8 100644
--- a/js/imce.js
+++ b/js/imce.js
@@ -416,7 +416,7 @@ navUpdate: function(data, dir) {
 
 //set cache
 navCache: function (dir, newdir) {
-  var C = imce.cache[dir] = {'dir': dir, files: imce.el('file-list'), dirsize: imce.el('dir-size').innerHTML, perm: $.extend({}, imce.conf.perm)};
+  var C = imce.cache[dir] = {'dir': dir, files: imce.el('file-list'), dirsize: imce.el('dir-size').innerHTML, dirpager: imce.el('dir-pager').innerHTML, perm: $.extend({}, imce.conf.perm)};
   C.files.id = 'cached-list-'+ dir;
   imce.FW.appendChild(C.files);
   imce.invoke('cache', C, newdir);
@@ -593,6 +593,7 @@ resData: function (data) {
     imce.fileRemove(removed[i]);
   }
   imce.conf.dirsize = data.dirsize;
+  imce.conf.dirpager = data.dirpager
   imce.updateStat();
 },
 
@@ -642,6 +643,7 @@ validateSelCount: function (Min, Max) {
 updateStat: function () {
   imce.el('file-count').innerHTML = imce.findex.length;
   imce.el('dir-size').innerHTML = imce.conf.dirsize;
+  imce.el('dir-pager').innerHTML = imce.conf.dirpager;
 },
 
 //serialize selected files. return fids with a colon between them
diff --git a/js/imce_set_app.js b/js/imce_set_app.js
index 2390868..fe118db 100644
--- a/js/imce_set_app.js
+++ b/js/imce_set_app.js
@@ -60,7 +60,9 @@ imce.hooks.load.push(function(win) {
       }
     }
     var filename = $('#'+ appFields.url, appWindow.document).val() || '';
-    imce.highlight(filename.substr(filename.lastIndexOf('/')+1));
+    if (typeof (filename) != 'undefined') {
+      imce.highlight(filename.substr(filename.lastIndexOf('/')+1));
+    }
   }
   // Set send to
   sendtoFunc && imce.setSendTo(Drupal.t('Insert file'), sendtoFunc);
diff --git a/tpl/imce-content.tpl.php b/tpl/imce-content.tpl.php
index c57fdfa..a7e2295 100644
--- a/tpl/imce-content.tpl.php
+++ b/tpl/imce-content.tpl.php
@@ -87,11 +87,15 @@ $imce =& $imce_ref['imce'];//keep this line.
       <?php print theme('imce_file_list', $imce_ref); /* see imce-file-list-tpl.php */?>
     </div>
 
-    <div id="dir-stat"><?php print t('!num files using !dirsize of !quota', array(
+    <div id="dir-stat" style="width:98%">
+      <div class="dir-stat-inner">
+      <?php print t('!num files using !dirsize of !quota', array(
         '!num' => '<span id="file-count">'. count($imce['files']) .'</span>',
         '!dirsize' => '<span id="dir-size">'. format_size($imce['dirsize']) .'</span>',
         '!quota' => '<span id="dir-quota">'. ($imce['quota'] ? format_size($imce['quota']) : ($imce['tuquota'] ? format_size($imce['tuquota']) : t('unlimited quota'))) .'</span>'
       )); ?>
+      </div>
+      <div class="imce_pager" id="dir-pager"><?php print $pager ;?></div>
     </div>
 
   </div><!-- sub-browse-wrapper -->
diff --git a/tpl/imce-file-list.tpl.php b/tpl/imce-file-list.tpl.php
index 88c27ef..956fef0 100644
--- a/tpl/imce-file-list.tpl.php
+++ b/tpl/imce-file-list.tpl.php
@@ -8,11 +8,22 @@ $imce =& $imce_ref['imce'];//keep this line.
  * You can always change the data created by format functions
  * such as format_size or format_date, or you can do css theming which is the best practice here.
  */
+$imce_showperpage = variable_get('imce_showperpage', 20);
+if ($imce_showperpage != 0) {
+  $start = 0;
+  if (isset($_GET['page']) && $_GET['page'] != 1) {
+    $start = ($_GET['page'] - 1) * $imce_showperpage;
+  }
+  $files = array_slice($imce['files'], $start, $imce_showperpage);
+}
+else {
+  $files = $imce['files'];
+}
 ?>
 
 <table id="file-list" class="files"><tbody><?php
-if ($imce['perm']['browse'] && !empty($imce['files'])) {
-  foreach ($imce['files'] as $name => $file) {?>
+if ($imce['perm']['browse'] && !empty($files)) :
+  foreach ($files as $name => $file) : ?>
   <tr id="<?php print $raw = rawurlencode($file['name']); ?>">
     <td class="name"><?php print $raw; ?></td>
     <td class="size" id="<?php print $file['size']; ?>"><?php print format_size($file['size']); ?></td>
@@ -20,6 +31,6 @@ if ($imce['perm']['browse'] && !empty($imce['files'])) {
     <td class="height"><?php print $file['height']; ?></td>
     <td class="date" id="<?php print $file['date']; ?>"><?php print format_date($file['date'], 'small'); ?></td>
   </tr><?php
-  }
-}?>
+  endforeach;
+endif; ?>
 </tbody></table>
\ No newline at end of file
diff --git a/tpl/imce-pager.tpl.php b/tpl/imce-pager.tpl.php
new file mode 100644
index 0000000..8f82584
--- /dev/null
+++ b/tpl/imce-pager.tpl.php
@@ -0,0 +1,28 @@
+<?php print t('Pages'); ?>:
+<?php
+  if ($total > variable_get('imce_maxpages', 10))
+  {
+    for($i = $start; $i < $end; $i++) {
+      if ($page == $i) {
+        print l($i, 'imce', array('query' => 'app=tinymce&page='.$i, 'attributes' => array('style' => 'font-weight:bold;text-decoration:underline;'))).' | ';
+      }
+      else {
+        print l($i, 'imce', array('query' => 'app=tinymce&page='.$i)).' | ';
+      }
+    }
+    if (($page + 4) < $total) {
+      print ' ... | ';
+    }
+    print l($total, 'imce', array('query' => 'app=tinymce&page='.$total, 'attributes' => ($total == $page ? array('style' => 'font-weight:bold;text-decoration:underline;') : array()))).' | ';
+  }
+  else {
+    for($i = 1; $i < $total; $i++) {
+      if ($page == $i) {
+        print l($i, 'imce', array('query' => 'app=tinymce&page='.$i, 'attributes' => array('style' => 'font-weight:bold;text-decoration:underline;'))).' | ';
+      }
+      else {
+        print l($i, 'imce', array('query' => 'app=tinymce&page='.$i)).' | ';
+      }
+    }
+  }
+?>
\ No newline at end of file
