diff --git a/course.module b/course.module
index 94b8b1d..f823203 100644
--- a/course.module
+++ b/course.module
@@ -834,11 +834,21 @@ function course_node_load($nodes, $types) {
     $nodes[$row['nid']]->course['objects'] = array();
   }
 
-  $result = db_query("SELECT * FROM {course_outline}
-    WHERE nid IN (:nids)
-    ORDER BY weight ASC", array(':nids' => array_keys($nodes)));
-  while ($row = $result->fetch()) {
-    $nodes[$row->nid]->course['objects'][$row->coid] = $row;
+  // Taken from Course::getObjects().
+  $efq = new EntityFieldQuery;
+  $result = $efq->entityCondition('entity_type', 'course_object')
+    ->propertyCondition('nid', array_keys($nodes))
+    ->propertyOrderBy('weight')
+    ->execute();
+  if (!empty($result['course_object'])) {
+    $courseObjects = entity_load('course_object', array_keys($result['course_object']));
+
+    // Zero index the array.
+    $courseObjects = array_values($courseObjects);
+
+    foreach ($courseObjects as $courseObject) {
+      $nodes[$courseObject->nid]->course['objects'][$courseObject->coid] = $courseObject;
+    }
   }
 }
 
@@ -875,7 +885,7 @@ function course_node_delete($node) {
 /**
  * Saves course objects.
  *
- * @param array $objects
+ * @param CourseObject[] $objects
  *   An array of course object definitions.
  * @param Course $course
  *   (optional) An instantiated Course, from course_get_course().
@@ -888,7 +898,7 @@ function course_save_objects(array $objects, Course $course = NULL) {
       if ($object->nid != $course->getNode()->nid) {
         // We are importing or cloning. Ensure the necessary keys are empty,
         // in order to prepare a new object using this object's definitions.
-        $unset = array('coid', 'nid', 'uuid');
+        $unset = array('coid', 'nid', 'uuid', 'uniqid');
         foreach ($unset as $key) {
           if (isset($object->{$key})) {
             unset($object->{$key});
@@ -898,36 +908,10 @@ function course_save_objects(array $objects, Course $course = NULL) {
         // Replace the nid key, to properly associate the current course node
         // with this course object.
         $object->nid = $course->getNode()->nid;
-
-        // Clean out serialized data field.
-        $unset_data_keys = array('uniqid', 'uuid');
-        if (isset($object->data) && $data = unserialize($object->data)) {
-          foreach ($unset_data_keys as $key) {
-            if (isset($data[$key])) {
-              unset($data[$key]);
-            }
-          }
-          $object->data = serialize($data);
-        }
       }
     }
 
-    // Set options for this object.
-    if ($prepareObject = course_get_course_object($object, NULL, NULL, NULL, $course)) {
-      $available_options = $prepareObject->getOptions();
-      $options = array();
-      foreach ($object as $key => $value) {
-        // Check if this key is a valid option.
-        if (isset($available_options[$key])) {
-          $options[$key] = $value;
-        }
-      }
-      // Set the options.
-      $prepareObject->setOptions($options);
-
-      // Save the object, creating new instances, if applicable.
-      $prepareObject->save();
-    }
+    $object->save();
   }
 }
 
diff --git a/includes/CourseObjectController.inc b/includes/CourseObjectController.inc
index 4e9eb12..6a9193e 100644
--- a/includes/CourseObjectController.inc
+++ b/includes/CourseObjectController.inc
@@ -68,6 +68,7 @@ class CourseObjectController extends EntityAPIController {
             $courseObject->setOption($field, $value);
           }
         }
+        unset($courseObject->$serialized_field);
       }
     }
     return $entities;
