diff --git a/checklistapi.module b/checklistapi.module
index c528156..6dcd0d3 100644
--- a/checklistapi.module
+++ b/checklistapi.module
@@ -53,9 +53,30 @@ function checklistapi_checklist_access($id, $operation = 'any') {
  */
 function checklistapi_checklist_load($id) {
   $definition = checklistapi_get_checklist_info($id);
+  $definition = checklistapi_add_checklist_items($definition);
+
   return ($definition) ? new ChecklistapiChecklist($definition) : FALSE;
 }
 
+/**
+ * Adds the groups items to the definition.
+ *
+ * @param array $definition
+ *   Checklist definition array.
+ *
+ * @return array
+ *   Checklist definition array with items declaration.
+ */
+function checklistapi_add_checklist_items(array $definition) {
+  if (!empty($definition['#callback']) && is_callable($definition['#callback'])) {
+    foreach (Element::children($definition) as $child) {
+      unset($definition[$child]);
+    }
+    $definition += call_user_func($definition['#callback']);
+  }
+  return $definition;
+}
+
 /**
  * Determines whether the current user is in compact mode.
  *
diff --git a/src/ChecklistapiChecklist.php b/src/ChecklistapiChecklist.php
index 7d96716..fb7148a 100644
--- a/src/ChecklistapiChecklist.php
+++ b/src/ChecklistapiChecklist.php
@@ -248,6 +248,7 @@ class ChecklistapiChecklist {
       // Loop through items.
       foreach ($group as $item_key => $item) {
         $definition = checklistapi_get_checklist_info($this->id);
+        $definition = checklistapi_add_checklist_items($definition);
         if (!in_array($item_key, array_keys($definition[$group_key]))) {
           // This item wasn't in the checklist definition. Don't include it with
           // saved progress.
