diff --git a/google_plusone.module b/google_plusone.module
index dd9578e..596ee4e 100644
--- a/google_plusone.module
+++ b/google_plusone.module
@@ -570,3 +570,52 @@ function google_plusone_block_save($delta = '', $edit = array()) {
   }
 }
 
+/**
+ * Implements hook_ds_fields_info().
+ */
+function google_plusone_ds_fields_info($entity_type) {
+  $fields = array();
+
+  if ($entity_type == 'node') {
+    $ui_limit = array();
+    $bundles = variable_get('google_plusone_node_types', array());
+    foreach ($bundles as $bundle) {
+      $ui_limit[] = $bundle . '|*';
+    }
+    $fields['node'] = array();
+    $fields['node']['google_plusone_ds_field'] = array(
+      'title' => t('Google Plus One +1 field'),
+      'field_type' => DS_FIELD_TYPE_FUNCTION,
+      'function' => '_google_plusone_ds_field',
+      'ui_limit' => $ui_limit,
+    );
+  }
+
+  return $fields;
+}
+
+/**
+ * Callback for ds button.
+ */
+function _google_plusone_ds_field($field) {
+  if (!user_access('view google plusone')) {
+    return '';
+  }
+
+  $node = $field['entity'];
+
+  $default = array(
+    'annotation' => 'bubble',
+    'width' => '250',
+    'size' => '',  // standard
+    'css' => 'margin: 0 1em 1em 1em;float:right',
+    'syntax' => 'g:plusone',
+    'alias' => 'aliased'
+  );
+  $button_settings = array_merge($default, variable_get('google_plusone_button_settings', array()));
+  $settings = array_merge($button_settings, variable_get('google_plusone_block_settings', array()));
+  $settings['node'] = $node;
+
+  return theme('google_plusone_button__' . $node->type, $settings);
+}
+
