diff --git a/includes/form.inc b/includes/form.inc
index f1691ad..47db246 100644
--- a/includes/form.inc
+++ b/includes/form.inc
@@ -2211,7 +2211,11 @@ function _form_button_was_clicked($element, &$form_state) {
   // and the specific return value is used to determine which was
   // clicked. This ONLY works as long as $form['#name'] puts the
   // value at the top level of the tree of $_POST data.
-  if (isset($form_state['input'][$element['#name']]) && $form_state['input'][$element['#name']] == $element['#value']) {
+  // The input value attribute is treated as CDATA by browsers. This means
+  // that they replace character entities with characters. Therefore, we need
+  // to decode the value in $element['#value']. For more details see
+  // http://www.w3.org/TR/html401/types.html#type-cdata.
+  if (isset($form_state['input'][$element['#name']]) && $form_state['input'][$element['#name']] ==  html_entity_decode($element['#value'], ENT_QUOTES, 'UTF-8')) {
     return TRUE;
   }
   // When image buttons are clicked, browsers do NOT pass the form element
