diff --git a/cck_select_other.module b/cck_select_other.module
index 74803da..e09dc7c 100644
--- a/cck_select_other.module
+++ b/cck_select_other.module
@@ -124,10 +124,27 @@ function cck_select_other_field_widget_form(&$form, &$form_state, $field, $insta
     ),
   );
 
+  if ($instance['required']) {
+    $element['select_other_text_input']['#element_validate'] = array('cck_select_other_widget_validate');
+  }
+
   return $element;
 }
 
 /**
+ * Validate empty text input for other selection.
+ */
+function cck_select_other_widget_validate($element, &$form_state) {
+  $field_name = $element['#parents'][0];
+  $langcode = $element['#parents'][1];
+  $delta = $element['#parents'][2];
+
+  if ($form_state['values'][$field_name][$langcode][$delta]['select_other_list'] == 'other' && empty($form_state['values'][$field_name][$langcode]['select_other_text_input'])) {
+    form_set_error($field_name . '[' . $langcode . '][' . $delta . '][select_other_text_input]', t('A non-empty value is required for this option.'));
+  }
+}
+
+/**
  * Retrieve options for the select list
  * @param $field the field instance we're working with
  * @return an array of options to pass into the Form API.
diff --git a/tests/cck_select_other.test b/tests/cck_select_other.test
index c19e1bb..a809ec3 100644
--- a/tests/cck_select_other.test
+++ b/tests/cck_select_other.test
@@ -196,6 +196,31 @@ class CCKSelectOtherBasicTest extends CCKSelectOtherTest {
 
     $this->drupalLogout();
   }
+
+  /**
+   * Fail validation of node edit form for required field.
+   */
+  function testFailValidationRequiredField() {
+    // Make field instance required and update
+    $this->test_instance['required'] = 1;
+    field_update_instance($this->test_instance);
+
+    // Fairly straightforward, see above tests.
+    $this->drupalLogin($this->web_user);
+
+    $select_field = $this->test_field['field_name'] . '[und][0][select_other_list]';
+    $text_field = $this->test_field['field_name'] . '[und][0][select_other_text_input]';
+    $edit = array(
+      $select_field => 'other',
+      $text_field => '',
+    );
+
+    $field_str = str_replace('_', '-', $this->test_field['field_name']);
+    $this->drupalPost('node/' . $this->test_node->nid . '/edit', $edit, t('Save'));
+    $this->assertRaw(t('A non-empty value is required for this option.'), t('Failed validation for required field.'));
+
+    $this->drupalLogout();
+  }
 }
 
 /**
