diff --git a/contrib/browser/file_browser.module b/contrib/browser/file_browser.module
index a7ce151..b43eb21 100644
--- a/contrib/browser/file_browser.module
+++ b/contrib/browser/file_browser.module
@@ -632,17 +632,34 @@ function file_browser_newterm_form_submit($form, &$form_state) {
 
   // retrieve the new term from the system
   $term = taxonomy_get_term($form_state['values']['tid']);
-  $term = clone($term);
   $vocabularies = _file_browser_get_vocabularies('file');
   $voc = $vocabularies[$term->vid];
   taxonomy_check_vocabulary_hierarchy((array)$voc, (array)$term);
   $childterms = taxonomy_get_tree($term->vid, $term->tid, -1, NULL);
+  $allchildTerms = array();
   foreach ($childterms as $childterm) {
-    if (is_object($childterm)) {
-      $term = _file_browser_term_nodes($term, $childterm, NULL);
+    $allchildTerms[] = $childterm->tid;
+  }
+  $allchildTerms[] = $term->tid;
+
+  //select size and filecount
+  //TODO: access file or node
+  $term->termcount = 0;
+  if(!empty($allchildTerms)){
+    $placeholders = implode(', ', array_fill(0, count($allchildTerms), "%d"));
+    $result = db_query('SELECT SUM(fn.size) AS filesize, COUNT(fn.nid) AS filecount FROM {term_node} AS tn LEFT JOIN {node} ON node.nid = tn.nid RIGHT JOIN file_nodes AS fn ON fn.vid = node.vid WHERE node.vid = tn.vid AND tid IN (' . $placeholders . ') AND node.status = 1', $allchildTerms);
+    while($row = db_fetch_object($result)){
+      $term->filesize = $row->filesize;
+      $term->filecount = $row->filecount;
     }
+    $term->termcount = count($allchildTerms);
+  }
+  if(empty($term->filesize)){
+    $term->filesize = 0;
+  }
+  if(empty($term->filecount)){
+    $term->filecount = 0;
   }
-  $term = _file_browser_term_nodes($term, $term, NULL);
   $output = _file_browser_term('page', $term, FALSE, in_array($term->tid, array()), TRUE);
 
   // Make sure the output is sent back to the server so the data can be updated for the user.
@@ -942,28 +959,34 @@ function _file_browser_ajax_voc($block, $vid, $columns) {
   $output = '';
   if (isset($vid)) {
     if ($terms = taxonomy_get_tree($vid, 0, -1, 1)) {
-      
+
       foreach ($terms as $term) {
-      
+
         $childterms = taxonomy_get_tree($vid, $term->tid, -1, NULL);
         $allchildTerms = array();
-	      foreach ($childterms as $childterm) {
-	        $allchildTerms[] = $childterm->tid;
-	      }
-	     
-	      //select size and filecount
-	      //TODO: access file or node
-	      $term->termcount = 0;
-	      if(!empty($allchildTerms)) {
-	        $placeholders = implode(', ', array_fill(0, count($allchildTerms), "%d"));
-	        $result = db_query('SELECT SUM(fn.size) AS filesize, COUNT(fn.nid) AS filecount FROM {term_node} AS tn LEFT JOIN {file_nodes} AS fn ON tn.nid = fn.nid WHERE tid IN('. $placeholders .')', $allchildTerms);
-	        while ($row = db_fetch_object($result)) {
-	          $term->filesize = $row->filesize;
-	          $term->filecount = $row->filecount;
-	        }
-	        $term->termcount = count($allchildTerms);
-	      }
-	      
+	    foreach ($childterms as $childterm) {
+	      $allchildTerms[] = $childterm->tid;
+	    }
+
+        $allchildTerms[] = $term->tid;
+        //select size and filecount
+        //TODO: access file or node
+        $term->termcount = 0;
+        if(!empty($allchildTerms)){
+          $placeholders = implode(', ', array_fill(0, count($allchildTerms), "%d"));
+          $result = db_query('SELECT SUM(fn.size) AS filesize, COUNT(fn.nid) AS filecount FROM {term_node} AS tn LEFT JOIN {node} ON node.nid = tn.nid RIGHT JOIN file_nodes AS fn ON fn.vid = node.vid WHERE node.vid = tn.vid AND tid IN (' . $placeholders . ') AND node.status = 1', $allchildTerms);
+          while($row = db_fetch_object($result)){
+            $term->filesize = $row->filesize;
+            $term->filecount = $row->filecount;
+          }
+          $term->termcount = count($allchildTerms);
+        }
+        if(empty($term->filesize)){
+          $term->filesize = 0;
+        }
+        if(empty($term->filecount)){
+          $term->filecount = 0;
+        }
         $output .= _file_browser_term($block, $term, TRUE, in_array($term->tid, array()), $columns);
       }
     }
@@ -999,22 +1022,28 @@ function _file_browser_ajax_term($block, $t, $columns) {
       }
       
       //use current term as childterm
-      if(empty($allchildTerms))
-        $allchildTerms[] = $term->tid;
+      $allchildTerms[] = $term->tid;
       
         
       //select size and filecount
       //TODO: access file or node
       $term->termcount = 0;
-      
+      if(!empty($allchildTerms)){
 	    $placeholders = implode(', ', array_fill(0, count($allchildTerms), "%d"));
-	    $result = db_query('SELECT SUM(fn.size) AS filesize, COUNT(fn.nid) AS filecount FROM {term_node} AS tn LEFT JOIN {file_nodes} AS fn ON tn.nid = fn.nid WHERE tid IN('. $placeholders .')', $allchildTerms);
+        $result = db_query('SELECT SUM(fn.size) AS filesize, COUNT(fn.nid) AS filecount FROM {term_node} AS tn LEFT JOIN {node} ON node.nid = tn.nid RIGHT JOIN file_nodes AS fn ON fn.vid = node.vid WHERE node.vid = tn.vid AND tid IN (' . $placeholders . ') AND node.status = 1', $allchildTerms);
 	    while ($row = db_fetch_object($result)) {
 	      $term->filesize = $row->filesize;
 	      $term->filecount = $row->filecount;
 	    }
 	    $term->termcount = count($allchildTerms);
-      
+        if(empty($term->filesize)){
+            $term->filesize = 0;
+        }
+        if(empty($term->filecount)){
+            $term->filecount = 0;
+        }
+      }
+
       $output .= _file_browser_term($block, $term, TRUE, in_array($term->tid, array()), $columns);
     }
   }
@@ -1220,25 +1249,29 @@ function _file_browser_build_terms($block, $vid, $expanded_tids = array(), $colu
       foreach ($childterms as $childterm) {
         $allchildTerms[] = $childterm->tid;
       }
-     
+
+      //include self in order to collect our own children as well, not just our children's children
+      $allchildTerms[] = $term->tid;
+
       //select size and filecount
       //TODO: access file or node
       $term->termcount = 0;
       if(!empty($allchildTerms)) {
-	      $placeholders = implode(', ', array_fill(0, count($allchildTerms), "%d"));
-	      $result = db_query('SELECT SUM(fn.size) AS filesize, COUNT(fn.nid) AS filecount FROM {term_node} AS tn LEFT JOIN {file_nodes} AS fn ON tn.nid = fn.nid WHERE tid IN('. $placeholders .')', $allchildTerms);
-	      while ($row = db_fetch_object($result)) {
-	        $term->filesize = $row->filesize;
-	        $term->filecount = $row->filecount;
-	      }
-	      
-	      $term->termcount = count($allchildTerms);
-	      
-	      
-	      
+	    $placeholders = implode(', ', array_fill(0, count($allchildTerms), "%d"));
+        $result = db_query('SELECT SUM(fn.size) AS filesize, COUNT(fn.nid) AS filecount from {term_node} AS tn LEFT JOIN {node} ON node.nid = tn.nid RIGHT JOIN file_nodes AS fn ON fn.vid = node.vid WHERE node.vid = tn.vid and tid IN (' . $placeholders . ') and node.status = 1', $allchildTerms);
+	    while ($row = db_fetch_object($result)) {
+	      $term->filesize = $row->filesize;
+	      $term->filecount = $row->filecount;
+	    }
+	    $term->termcount = count($allchildTerms);
       }
-      
-      
+      if(empty($term->filesize)){
+        $term->filesize = 0;
+      }
+      if(empty($term->filecount)){
+        $term->filecount = 0;
+      }
+
       $output .= _file_browser_term($block, $term, TRUE, isset($term->tid) && in_array($term->tid, $expanded_tids), $columns);
     }
   }
