diff --git a/cck_blocks.module b/cck_blocks.module
index 016f4b7..2b92944 100644
--- a/cck_blocks.module
+++ b/cck_blocks.module
@@ -46,19 +46,25 @@ function cck_blocks_block($op = 'list', $delta = 0, $edit = array()) {
     case 'view':
 	default:
 		$block = array();
-	
+
 		if (arg(0) == 'node' && is_numeric(arg(1)) && !arg(2) && $fields[$delta]) {
 			$node = node_load(arg(1));
+			// bits and pieces adopted from _content_field_view(...)
+			$type_name = is_string($node) ? $node : (is_array($node) ? $node['type'] : $node->type);
+			$type = content_types($type_name);
+			// substitute fields array with the type-specific version
+			$fields = $type['fields'];
 
 			if ($items = $node->$delta) {
 				$block['subject'] = $fields[$delta]['widget']['label'] ? $fields[$delta]['widget']['label'] : $delta;
 				$block['content'] = '';
 				
 				$settings = variable_get('cck_blocks_' . $delta, array('formatter' => 'default'));				
-				foreach ($items as $item) {
-					$block['content'] .= module_invoke('content', 'format', $fields[$delta], $item, $settings['formatter'], $node);
+				foreach ($items as $k => $item) {
+					$items[$k]['view'] = content_format($fields[$delta]['field_name'], $item, $settings['formatter'], $node);
 				}
-			}
+				$block['content'] = theme('field', $node, $fields[$delta], $items, 'full', NULL);
+  		}
 		}
 
 		return $block;
