Index: css/imce-content.css
===================================================================
--- css/imce-content.css	(revision 2553)
+++ css/imce-content.css	(working copy)
@@ -450,4 +450,13 @@
 }
 .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;
+}
Index: imce.module
===================================================================
--- imce.module	(revision 2553)
+++ imce.module	(working copy)
@@ -72,9 +72,14 @@
     '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(
@@ -208,4 +213,27 @@
  */
 function imce_reg_dir($dirname) {
   return $dirname == '.' || (is_string($dirname) && $dirname != '' && !preg_match('@(^\s)|(^/)|(^\./)|(\s$)|(/$)|(/\.$)|(\.\.)|(//)|(\\\\)|(/\./)@', $dirname));
-}
\ No newline at end of file
+}
+
+/**
+ * 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 '';
+  }
+}
Index: inc/imce.admin.inc
===================================================================
--- inc/imce.admin.inc	(revision 2553)
+++ inc/imce.admin.inc	(working copy)
@@ -45,6 +45,28 @@
     $core = $rid == DRUPAL_ANONYMOUS_RID || $rid == DRUPAL_AUTHENTICATED_RID;
     $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(
@@ -149,6 +171,14 @@
   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.'));
 }
 
Index: inc/imce.page.inc
===================================================================
--- inc/imce.page.inc	(revision 2553)
+++ inc/imce.page.inc	(working copy)
@@ -73,9 +73,22 @@
       $forms .= $output;
     }
   }
+  
+  //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);
 
-  $content = theme('imce_content', imce_create_tree($imce), $forms, $imce_ref);
-
   //make necessary changes for js conversion
   $imce['dir'] = str_replace('%2F', '/', rawurlencode($imce['dir']));
   unset($imce['files'], $imce['name'], $imce['directories'], $imce['subdirectories'], $imce['filesize'], $imce['quota'], $imce['tuquota'], $imce['thumbnails'], $imce['uid'], $imce['usertab']);
@@ -101,9 +114,10 @@
       }
     }
   }
+  //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.
Index: js/imce.js
===================================================================
--- js/imce.js	(revision 2553)
+++ js/imce.js	(working copy)
@@ -425,7 +425,7 @@
 
 //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);
@@ -609,6 +609,7 @@
     imce.fileRemove(removed[i]);
   }
   imce.conf.dirsize = data.dirsize;
+  imce.conf.dirpager = data.dirpager
   imce.updateStat();
 },
 //set response messages
@@ -653,6 +654,7 @@
 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
 serialNames: function () {
Index: js/imce_set_app.js
===================================================================
--- js/imce_set_app.js	(revision 2553)
+++ js/imce_set_app.js	(working copy)
@@ -52,7 +52,9 @@
       }
     }
     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);
Index: tpl/imce-content.tpl.php
===================================================================
--- tpl/imce-content.tpl.php	(revision 2553)
+++ tpl/imce-content.tpl.php	(working copy)
@@ -1,6 +1,6 @@
 <?php
 // $Id: imce-content.tpl.php,v 1.9.2.3 2010/10/06 04:38:09 ufku Exp $
-$imce =& $imce_ref['imce'];//keep this line.
+$imce =& $imce_ref['imce'];//keep this line.           
 ?>
 
 <script type="text/javascript">
@@ -88,12 +88,16 @@
       <?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>
+      <div class="imce_pager" id="dir-pager"><?php print $pager ;?></div>     
+    </div>  
 
   </div><!-- sub-browse-wrapper -->
 </div><!-- browse-wrapper -->
Index: tpl/imce-file-list.tpl.php
===================================================================
--- tpl/imce-file-list.tpl.php	(revision 2553)
+++ tpl/imce-file-list.tpl.php	(working copy)
@@ -9,11 +9,23 @@
  * 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>
@@ -21,6 +33,6 @@
     <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
Index: tpl/imce-pager.tpl.php
===================================================================
--- tpl/imce-pager.tpl.php	(revision 0)
+++ tpl/imce-pager.tpl.php	(revision 0)
@@ -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
