diff --git modules/block/block.admin.inc modules/block/block.admin.inc
index cb249c3..34caa89 100644
--- modules/block/block.admin.inc
+++ modules/block/block.admin.inc
@@ -198,6 +198,7 @@ function block_admin_configure(&$form_state, $module = NULL, $delta = 0) {
     '#type' => 'fieldset',
     '#title' => t('Block specific settings'),
     '#collapsible' => TRUE,
+    '#weight' => -10,
   );
   $form['block_settings']['title'] = array(
     '#type' => 'textfield',
@@ -332,6 +333,9 @@ function block_admin_configure_validate($form, &$form_state) {
       form_set_error('info', t('Please ensure that each block description is unique.'));
     }
   }
+  $edit = (object) $form_state['values'];
+  $edit->block_machine_name = $edit->module . '_' . $edit->delta;
+  field_attach_form_validate('block', $edit, $form, $form_state);
 }
 
 function block_admin_configure_submit($form, &$form_state) {
@@ -375,6 +379,11 @@ function block_admin_configure_submit($form, &$form_state) {
     }
     $query->execute();
 
+    $edit = (object) $form_state['values'];
+    $edit->block_machine_name = 'block_' . $edit->delta;
+    field_attach_submit('block', $edit, $form, $form_state);
+    $edit = (array) $edit;
+
     module_invoke($form_state['values']['module'], 'block_save', $form_state['values']['delta'], $form_state['values']);
     drupal_set_message(t('The block configuration has been saved.'));
     cache_clear_all();
@@ -448,6 +457,33 @@ function block_add_block_form_submit($form, &$form_state) {
   }
   $query->execute();
 
+  field_attach_create_bundle('block_' . $delta);
+
+  // Create the 'block_body' field if it doesn't already exist.
+  $field = field_info_field('block_body');
+  if (empty($field)) {
+    $field = array(
+      'field_name' => 'block_body',
+      'type' => 'text_long',
+    );
+    field_create_field($field);
+  }
+
+  // Attach an instance of the 'block_body' field to the new block bundle.
+  $instance = array(
+    'field_name' => 'block_body',
+    'bundle' => 'block_' . $delta,
+    'label' => t('Block body'),
+    'description' => t('The content of the block as shown to the user.'),
+    'required' => TRUE,
+    'settings' => array('text_processing' => 1),
+    'widget' => array(
+      'type' => 'text_textarea',
+      'label' => t('Block body'),
+    ),
+  );
+  field_create_instance($instance);
+
   drupal_set_message(t('The block has been created.'));
   cache_clear_all();
   $form_state['redirect'] = 'admin/structure/block';
@@ -468,6 +504,8 @@ function block_box_delete(&$form_state, $bid = 0) {
  * Deletion of custom blocks.
  */
 function block_box_delete_submit($form, &$form_state) {
+  field_attach_delete_bundle('block_' . $form_state['values']['bid']);
+
   db_delete('box')
     ->condition('bid', $form_state['values']['bid'])
     ->execute();
diff --git modules/block/block.module modules/block/block.module
index 031071a..0f95c59 100644
--- modules/block/block.module
+++ modules/block/block.module
@@ -105,6 +105,48 @@ function block_theme() {
 }
 
 /**
+ * Implement hook_fieldable_info().
+ */
+function block_fieldable_info() {
+  $return = array(
+    'block' => array(
+      'label' => t('Block'),
+      'object keys' => array(
+        'id' => 'bid',
+        'bundle' => 'block_machine_name',
+      ),
+      'bundles' => array(),
+    ),
+  );
+  foreach (_block_rehash() as $block) {
+    // Only custom blocks are fieldable.
+    if ($block['module'] == 'block') {
+      $return['block']['bundles']['block_' . $block['delta']] = array(
+        'label' => $block['info'],
+        'admin' => array(
+          'path' => 'admin/structure/block/configure/block/' . $block['delta'],
+          'access arguments' => array('administer blocks'),
+        ),
+      );
+    }
+  }
+  return $return;
+}
+
+/**
+ * Implement hook_field_build_modes().
+ */
+function block_field_build_modes($obj_type) {
+  $modes = array();
+  if ($obj_type == 'block') {
+    $modes = array(
+      'full' => t('User account'),
+    );
+  }
+  return $modes;
+}
+
+/**
  * Implement hook_permission().
  */
 function block_permission() {
@@ -211,6 +253,11 @@ function block_block_configure($delta = 0, $edit = array()) {
  */
 function block_block_save($delta = 0, $edit = array()) {
   block_box_save($edit, $delta);
+  $edit = (object) $edit;
+  $edit->bid = $delta;
+  $edit->block_machine_name = $edit->module . '_' . $edit->delta;
+  field_attach_presave('block', $edit);
+  field_attach_update('block', $edit);
 }
 
 /**
@@ -225,6 +272,27 @@ function block_block_view($delta = 0, $edit = array()) {
 }
 
 /**
+ * Implement hook_form_FORM_ID_alter().
+ */
+function block_form_block_admin_configure_alter(&$form, &$form_state) {
+  $block = block_box_get($form['delta']['#value']);
+  $field_form = array();
+  $field_form_state = array();
+  field_attach_form('block', (object) $block, $field_form, $field_form_state);
+  if (isset($field_form['#fields'])) {
+    $form['#fields'] = $field_form['#fields'];
+    unset($field_form['#fields']);
+    $form['block_fields'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Block content'),
+      '#collapsible' => TRUE,
+      '#weight' => -5,
+    );
+    $form['block_fields'] += $field_form;
+  }
+}
+
+/**
  * Implement hook_page_alter().
  *
  * Render blocks into their regions.
@@ -328,6 +396,8 @@ function _block_rehash() {
           drupal_write_record('block', $block);
           // Set region to none if not enabled.
           $block['region'] = $block['status'] ? $block['region'] : BLOCK_REGION_NONE;
+          // Create a unique machine-readable name for the block.
+          $block['block_machine_name'] = $module . '_' . $delta;
           // Add to the list of blocks we return.
           $blocks[] = $block;
         }
@@ -348,6 +418,8 @@ function _block_rehash() {
             $old_blocks[$module][$delta]['region'] = $old_blocks[$module][$delta]['status'] ? $old_blocks[$module][$delta]['region'] : BLOCK_REGION_NONE;
           }
           // Add this block to the list of blocks we return.
+          // Create a unique machine-readable name for the block.
+          $old_blocks[$module][$delta]['block_machine_name'] = $module . '_' . $delta;
           $blocks[] = $old_blocks[$module][$delta];
           // Remove this block from the list of blocks to be deleted.
           unset($old_blocks[$module][$delta]);
@@ -370,7 +442,10 @@ function _block_rehash() {
 }
 
 function block_box_get($bid) {
-  return db_query("SELECT * FROM {box} WHERE bid = :bid", array(':bid' => $bid))->fetchAssoc();
+  $box = db_query("SELECT * FROM {box} WHERE bid = :bid", array(':bid' => $bid))->fetchAssoc();
+  $box->block_machine_name = 'block_' . $box->bid;
+  field_attach_load('block', array($box->bid => $box));
+  return (array) $box;
 }
 
 /**
