diff --git a/term_reference_tree.js b/term_reference_tree.js
index 61e5ed9..b5c618b 100644
--- a/term_reference_tree.js
+++ b/term_reference_tree.js
@@ -113,7 +113,7 @@ Drupal.behaviors.termReferenceTree = {
         $(this).find('.form-checkbox').change(function(event) {
           var event_target = $(event.target);
           var control_id = event_target.attr('id');
-          var children = event_target.parent().next().children().children('div.form-type-checkbox').children('input[id^="' + control_id + '-children"]');
+          var children = event_target.closest('div.form-type-checkbox').next().children().children('div.form-type-checkbox').find('input[id^="' + control_id + '-children"]');
           if(event_target.attr('checked')) {
             //Checkbox checked - check children if none were checked.
             if(!$(children).filter(':checked').length) {
@@ -259,9 +259,9 @@ function checkMaxChoices(item, checkbox) {
   var count = item.find(':checked').length;
 
   if(maxChoices > 0 && count >= maxChoices) {
-    item.find('input[type=checkbox]:not(:checked)').attr('disabled', 'disabled').parent().addClass('disabled');
+    item.find('input[type=checkbox]:not(:checked)').attr('disabled', 'disabled').closest('div.form-type-checkbox').addClass('disabled');
   } else {
-    item.find('input[type=checkbox]').removeAttr('disabled').parent().removeClass('disabled');
+    item.find('input[type=checkbox]').removeAttr('disabled').closest('div.form-type-checkbox').removeClass('disabled');
   }
 
   if(checkbox) {
@@ -271,7 +271,7 @@ function checkMaxChoices(item, checkbox) {
           ( item.has('input[type=checkbox]').size() > 0 ) ? 'checkbox' : 'radio';
 
       if(checkbox.attr('checked')) {
-        checkbox.parents('ul.term-reference-tree-level li').children('div.form-item').children('input[type=checkbox]').each(function() {
+        checkbox.parents('ul.term-reference-tree-level li').children('div.form-item').find('input[type=checkbox]').each(function() {
           $(this).attr('checked', checkbox.attr('checked'));
 
           if(track_list_container) {
