diff --git a/includes/entity.wrapper.inc b/includes/entity.wrapper.inc
index 2d1df6d..319108c 100644
--- a/includes/entity.wrapper.inc
+++ b/includes/entity.wrapper.inc
@@ -133,6 +133,10 @@ abstract class EntityMetadataWrapper {
     if (isset($value) && !entity_property_verify_data_type($value, $this->type)) {
       return FALSE;
     }
+    elseif (!isset($value) && !empty($this->info['required'])) {
+      // Do not allow NULL values if the property is required.
+      return FALSE;
+    }
     return !isset($this->info['validation callback']) || call_user_func($this->info['validation callback'], $value, $this->info);
   }
 
@@ -976,6 +980,10 @@ class EntityListWrapper extends EntityMetadataWrapper implements IteratorAggrega
    * list items.
    */
   public function validate($value) {
+    // Required lists may not be empty or unset.
+    if (!empty($this->info['required']) && empty($value)) {
+      return FALSE;
+    }
     return !isset($value) || entity_property_verify_data_type($value, $this->type);
   }
 
diff --git a/modules/callbacks.inc b/modules/callbacks.inc
index aac7c2e..22edd57 100644
--- a/modules/callbacks.inc
+++ b/modules/callbacks.inc
@@ -390,7 +390,7 @@ function entity_metadata_field_property_set($entity, $name, $value, $langcode, $
   $field = field_info_field($name);
   $columns = array_keys($field['columns']);
   $langcode = isset($langcode) ? $langcode : LANGUAGE_NONE;
-  $values = $field['cardinality'] == 1 ? array($value) : $value;
+  $values = $field['cardinality'] == 1 ? array($value) : (array) $value;
 
   $items = array();
   foreach ($values as $delta => $value) {
@@ -441,7 +441,7 @@ function entity_metadata_field_verbatim_get($entity, array $options, $name, $ent
 function entity_metadata_field_verbatim_set($entity, $name, $items, $langcode) {
   $field = field_info_field($name);
   $langcode = isset($langcode) ? $langcode : LANGUAGE_NONE;
-  $value = $field['cardinality'] == 1 ? array($items) : $items;
+  $value = $field['cardinality'] == 1 ? array($items) : (array) $items;
   // Filter out any items set to NULL.
   $entity->{$name}[$langcode] = array_filter($value);
 
