Index: src/wp-admin/includes/template.php
===================================================================
--- src/wp-admin/includes/template.php	(revision 30242)
+++ src/wp-admin/includes/template.php	(working copy)
@@ -202,11 +202,13 @@
 		) );
 	}
 	if ( $descendants_and_self ) {
-		$categories = (array) get_terms( $taxonomy, array(
-			'child_of' => $descendants_and_self,
-			'hierarchical' => 0,
-			'hide_empty' => 0
-		) );
+		
+		if( is_taxonomy_hierarchical( $taxonomy ) ) {
+			$categories = (array) get_terms( $taxonomy, array( 'child_of' => $descendants_and_self, 'hierarchical' => 0, 'hide_empty' => 0 ) );
+		} else {
+			$categories = array();
+		}
+		
 		$self = get_term( $descendants_and_self, $taxonomy );
 		array_unshift( $categories, $self );
 	} else {
Index: tests/phpunit/tests/admin/includesTemplate.php
===================================================================
--- tests/phpunit/tests/admin/includesTemplate.php	(revision 30242)
+++ tests/phpunit/tests/admin/includesTemplate.php	(working copy)
@@ -3,6 +3,23 @@
  * @group admin
  */
 class Tests_Admin_includesTemplate extends WP_UnitTestCase {
+
+	function setUp() {
+		parent::setUp();
+
+		register_taxonomy( 'testing-non-slug', array( 'post' ), array( 'labels' => array( 'name' => 'testing-non' ) ) );
+		$this->non_id = wp_insert_term( 'testnon1', 'testing-non-slug' );
+		wp_insert_term( 'testnon2', 'testing-non-slug' );
+		wp_insert_term( 'testnon3', 'testing-non-slug' );
+		wp_insert_term( 'testnon4', 'testing-non-slug' );
+
+		register_taxonomy( 'testing-h-slug', array( 'post' ), array( 'labels' => array( 'name' => 'testing-h', 'hierarchal' => true ) ) );
+		$this->parent_id = wp_insert_term( 'testh1', 'testing-h-slug' );
+		wp_insert_term( 'testh2', 'testing-h-slug', array( 'parent' => $this->parent_id['term_id'] ) );
+		wp_insert_term( 'testh3', 'testing-h-slug', array( 'parent' => $this->parent_id['term_id'] ) );
+		wp_insert_term( 'testh4', 'testing-h-slug', array( 'parent' => $this->parent_id['term_id'] ) );
+	}
+
 	function test_equal() {
 		$this->assertEquals(' selected=\'selected\'', selected('foo','foo',false));
 		$this->assertEquals(' checked=\'checked\'', checked('foo','foo',false));
@@ -45,4 +62,42 @@
 		$this->assertEquals('', selected(0,false,false));
 		$this->assertEquals('', checked(0,false,false));
 	}
+
+	function test_wp_terms_checklist_decendants_and_self() { 
+		ob_start(); 
+		wp_terms_checklist( 0, array( 'decendants_and_self' => 1 ) ); 
+		$actual = ob_get_clean();
+		$expected = "\n<li id='category-1'><label class=\"selectit\"><input value=\"1\" type=\"checkbox\" name=\"post_category[]\" id=\"in-category-1\" disabled='disabled' /> Uncategorized</label></li>\n"; 
+		$this->assertSame( $actual, $expected );
+	}
+
+	function test_wp_terms_checklist_decendants_and_self_non_hierarchal() {
+		ob_start(); 
+		wp_terms_checklist( 0, array( 'decendants_and_self' => $this->non_id, 'taxonomy' => 'testing-non-slug' ) );
+		$actual = ob_get_clean();
+		$expected = "\n" . '<li id=\'testing-non-slug-26\'><label class="selectit"><input value="26" type="checkbox" name="tax_input[testing-non-slug][]" id="in-testing-non-slug-26" disabled=\'disabled\' /> testnon1</label></li>
+
+<li id=\'testing-non-slug-27\'><label class="selectit"><input value="27" type="checkbox" name="tax_input[testing-non-slug][]" id="in-testing-non-slug-27" disabled=\'disabled\' /> testnon2</label></li>
+
+<li id=\'testing-non-slug-28\'><label class="selectit"><input value="28" type="checkbox" name="tax_input[testing-non-slug][]" id="in-testing-non-slug-28" disabled=\'disabled\' /> testnon3</label></li>
+
+<li id=\'testing-non-slug-29\'><label class="selectit"><input value="29" type="checkbox" name="tax_input[testing-non-slug][]" id="in-testing-non-slug-29" disabled=\'disabled\' /> testnon4</label></li>' . "\n";
+		$this->assertSame( $actual, $expected );
+	}
+
+	function test_wp_terms_checklist_decendants_and_self_hierarchal() {
+		ob_start(); 
+		wp_terms_checklist( 0, array( 'decendants_and_self' => $this->parent_id['term_id'], 'taxonomy' => 'testing-h-slug' ) );
+		$actual = ob_get_clean();
+		$expected = "\n" . '<li id=\'testing-h-slug-38\'><label class="selectit"><input value="38" type="checkbox" name="tax_input[testing-h-slug][]" id="in-testing-h-slug-38" disabled=\'disabled\' /> testh1</label><ul class=\'children\'>
+
+<li id=\'testing-h-slug-39\'><label class="selectit"><input value="39" type="checkbox" name="tax_input[testing-h-slug][]" id="in-testing-h-slug-39" disabled=\'disabled\' /> testh2</label></li>
+
+<li id=\'testing-h-slug-40\'><label class="selectit"><input value="40" type="checkbox" name="tax_input[testing-h-slug][]" id="in-testing-h-slug-40" disabled=\'disabled\' /> testh3</label></li>
+
+<li id=\'testing-h-slug-41\'><label class="selectit"><input value="41" type="checkbox" name="tax_input[testing-h-slug][]" id="in-testing-h-slug-41" disabled=\'disabled\' /> testh4</label></li>
+</ul>
+</li>' . "\n";
+		$this->assertSame( $actual, $expected );
+	}
 }
