diff --git wp-admin/edit-form-advanced.php wp-admin/edit-form-advanced.php
index 017a163..5bdb4d2 100644
--- wp-admin/edit-form-advanced.php
+++ wp-admin/edit-form-advanced.php
@@ -119,10 +119,14 @@ foreach ( get_object_taxonomies($post_type) as $tax_name ) {
 
 	$label = $taxonomy->labels->name;
 
-	if ( !is_taxonomy_hierarchical($tax_name) )
-		add_meta_box('tagsdiv-' . $tax_name, $label, 'post_tags_meta_box', $post_type, 'side', 'core', array( 'taxonomy' => $tax_name ));
-	else
-		add_meta_box($tax_name . 'div', $label, 'post_categories_meta_box', $post_type, 'side', 'core', array( 'taxonomy' => $tax_name ));
+	if ( !is_taxonomy_hierarchical($tax_name) ) {
+		$tax_meta_box_id = "tagsdiv-{$tax_name}";
+	}
+	else {
+		$tax_meta_box_id = "{$tax_name}div";
+	}
+	
+	add_meta_box( $tax_meta_box_id, $label, $taxonomy->meta_box_callback, $post_type, 'side', 'core', array( 'taxonomy' => $tax_name ) );
 }
 
 if ( post_type_supports($post_type, 'page-attributes') )
diff --git wp-includes/taxonomy.php wp-includes/taxonomy.php
index 72d387a..3371fc8 100644
--- wp-includes/taxonomy.php
+++ wp-includes/taxonomy.php
@@ -356,6 +356,14 @@ function register_taxonomy( $taxonomy, $object_type, $args = array() ) {
 
 	$args['labels'] = get_taxonomy_labels( (object) $args );
 	$args['label'] = $args['labels']->name;
+	
+	if ( empty( $args['meta_box_callback'] ) ) {
+		if ( $args['hierarchical'] ) {
+			$args['meta_box_callback'] = 'post_categories_meta_box';
+		} else {
+			$args['meta_box_callback'] = 'post_tags_meta_box';
+		}
+	}
 
 	$wp_taxonomies[$taxonomy] = (object) $args;
 
