diff --git a/components/email.inc b/components/email.inc
index eb6acfa..58f6a1d 100644
--- a/components/email.inc
+++ b/components/email.inc
@@ -22,6 +22,7 @@ function _webform_defaults_email() {
       'disabled' => 0,
       'title_display' => 0,
       'description' => '',
+      'placeholder' => '',
       'attributes' => array(),
       'private' => FALSE,
     ),
@@ -77,6 +78,13 @@ function _webform_edit_email($component) {
     '#maxlength' => 10,
     '#parents' => array('extra', 'width'),
   );
+  $form['display']['placeholder'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Placeholder'),
+    '#default_value' => $component['extra']['placeholder'],
+    '#description' => t('The placeholder will be shown in the field until the user starts entering a value.') . ' ' . t('Often used for example values, such as "john@example.com".'),
+    '#parents' => array('extra', 'placeholder'),
+  );
   $form['display']['disabled'] = array(
     '#type' => 'checkbox',
     '#title' => t('Disabled'),
@@ -140,6 +148,10 @@ function _webform_render_email($component, $value = NULL, $filter = TRUE) {
     $element['#default_value'] = $value[0];
   }
 
+  if ($component['extra']['placeholder']) {
+    $element['#attributes']['placeholder'] = $component['extra']['placeholder'];
+  }
+
   if ($component['extra']['disabled']) {
     if ($filter) {
       $element['#attributes']['readonly'] = 'readonly';
diff --git a/components/textarea.inc b/components/textarea.inc
index 9dd2387..d0859fa 100644
--- a/components/textarea.inc
+++ b/components/textarea.inc
@@ -23,6 +23,7 @@ function _webform_defaults_textarea() {
       'resizable' => 1,
       'disabled' => 0,
       'description' => '',
+      'placeholder' => '',
       'attributes' => array(),
       'private' => FALSE,
     ),
@@ -82,6 +83,13 @@ function _webform_edit_textarea($component) {
     '#default_value' => $component['extra']['resizable'],
     '#parents' => array('extra', 'resizable'),
   );
+  $form['display']['placeholder'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Placeholder'),
+    '#default_value' => $component['extra']['placeholder'],
+    '#description' => t('The placeholder will be shown in the field until the user starts entering a value.'),
+    '#parents' => array('extra', 'placeholder'),
+  );
   $form['display']['disabled'] = array(
     '#type' => 'checkbox',
     '#title' => t('Disabled'),
@@ -116,6 +124,10 @@ function _webform_render_textarea($component, $value = NULL, $filter = TRUE) {
     '#translatable' => array('title', 'description'),
   );
 
+  if ($component['extra']['placeholder']) {
+    $element['#attributes']['placeholder'] = $component['extra']['placeholder'];
+  }
+
   if ($component['extra']['disabled']) {
     if ($filter) {
       $element['#attributes']['readonly'] = 'readonly';
diff --git a/components/textfield.inc b/components/textfield.inc
index 2a04061..10db477 100644
--- a/components/textfield.inc
+++ b/components/textfield.inc
@@ -25,6 +25,7 @@ function _webform_defaults_textfield() {
       'unique' => 0,
       'title_display' => 0,
       'description' => '',
+      'placeholder' => '',
       'attributes' => array(),
       'private' => FALSE,
     ),
@@ -67,6 +68,14 @@ function _webform_edit_textfield($component) {
     '#weight' => 0,
     '#parents' => array('extra', 'width'),
   );
+  $form['display']['placeholder'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Placeholder'),
+    '#default_value' => $component['extra']['placeholder'],
+    '#description' => t('The placeholder will be shown in the field until the user starts entering a value.'),
+    '#weight' => 1,
+    '#parents' => array('extra', 'placeholder'),
+  );
   $form['display']['field_prefix'] = array(
     '#type' => 'textfield',
     '#title' => t('Prefix text placed to the left of the textfield'),
@@ -74,7 +83,7 @@ function _webform_edit_textfield($component) {
     '#description' => t('Examples: $, #, -.'),
     '#size' => 20,
     '#maxlength' => 127,
-    '#weight' => 1.1,
+    '#weight' => 2.1,
     '#parents' => array('extra', 'field_prefix'),
   );
   $form['display']['field_suffix'] = array(
@@ -84,7 +93,7 @@ function _webform_edit_textfield($component) {
     '#description' => t('Examples: lb, kg, %.'),
     '#size' => 20,
     '#maxlength' => 127,
-    '#weight' => 1.2,
+    '#weight' => 2.2,
     '#parents' => array('extra', 'field_suffix'),
   );
   $form['display']['disabled'] = array(
@@ -139,6 +148,10 @@ function _webform_render_textfield($component, $value = NULL, $filter = TRUE) {
     '#translatable' => array('title', 'description', 'field_prefix', 'field_suffix'),
   );
 
+  if ($component['extra']['placeholder']) {
+    $element['#attributes']['placeholder'] = $component['extra']['placeholder'];
+  }
+
   if ($component['extra']['disabled']) {
     if ($filter) {
       $element['#attributes']['readonly'] = 'readonly';
