diff --git a/includes/media_browser_plus.folders.inc b/includes/media_browser_plus.folders.inc
index fd7c99d..1001439 100644
--- a/includes/media_browser_plus.folders.inc
+++ b/includes/media_browser_plus.folders.inc
@@ -245,8 +245,8 @@ function media_browser_plus_folder_edit($form, &$form_state, $folder) {
     ),
     'pid' => array(
       '#type' => 'select',
-      '#title' => t('Parent Category'),
-      '#options' => media_browser_plus_folder_get_folders(),
+      '#title' => t('Parent Category'),
+      '#options' => media_browser_plus_folder_get_folders($folder->tid),
       '#default_value' => count($parents) ? array_pop($parents_keys) : 0,
       '#description' => t('Sets one parent folder for the new folder'),
     ),
@@ -513,11 +513,24 @@ function media_browser_plus_move_subfolder($folder, $source, $destination) {
 /**
  * @todo Document what this function is does.
  */
-function media_browser_plus_folder_get_folders() {
+function media_browser_plus_folder_get_folders($tid = NULL) {
   $vocabulary = taxonomy_vocabulary_machine_name_load('media_folders');
+
+  $exclude = array();
+  if(!is_null($tid)) {
+    $children = taxonomy_get_tree($vocabulary->vid, $tid);
+    // A term can't be the child of itself, nor of its children.
+    foreach ($children as $child) {
+      $exclude[] = $child->tid;
+    }
+    $exclude[] = $tid;
+  }
+
   $folders = array(0 => '> ' . t('No Parent') . ' <');
   foreach (taxonomy_get_tree($vocabulary->vid) as $key => $value) {
-    $folders[$value->tid] = str_pad('', $value->depth, '-') . $value->name;
+    if(!in_array($value->tid, $exclude)) {
+      $folders[$value->tid] = str_pad('', $value->depth, '-') . $value->name;
+    }
   }
   return $folders;
 }
