diff --git a/include/class.dynamic_forms.php b/include/class.dynamic_forms.php
index bcf0503dd61ed463f5abfb2ea7f97833ad9d4440..b99ce62eb1608137cab54d1b73d2f8d79a264469 100644
--- a/include/class.dynamic_forms.php
+++ b/include/class.dynamic_forms.php
@@ -970,12 +970,20 @@ class DynamicFormEntry extends VerySimpleModel {
         }
     }
 
+    /**
+     * Save the form entry and all associated answers.
+     *
+     * Returns:
+     * (mixed) FALSE if updated failed, otherwise the number of dirty answers
+     * which were save is returned (which may be ZERO).
+     */
     function save($refetch=false) {
         if (count($this->dirty))
             $this->set('updated', new SqlFunction('NOW'));
         if (!parent::save($refetch || count($this->dirty)))
             return false;
 
+        $dirty = 0;
         foreach ($this->getAnswers() as $a) {
             $field = $a->getField();
 
@@ -998,10 +1006,14 @@ class DynamicFormEntry extends VerySimpleModel {
             else
                 $a->set('value', $val);
             // Don't save answers for presentation-only fields
-            if ($field->hasData() && !$field->isPresentationOnly())
+            if ($field->hasData() && !$field->isPresentationOnly()) {
+                if ($a->dirty)
+                    $dirty++;
                 $a->save();
+            }
         }
         $this->_values = null;
+        return $dirty;
     }
 
     function delete() {
diff --git a/include/class.user.php b/include/class.user.php
index 4933d8f122af39a51c89f253f07f5cbd3086282c..a7eb096d2af0a95fed8df32adab3472a385bfcef 100644
--- a/include/class.user.php
+++ b/include/class.user.php
@@ -197,18 +197,8 @@ class User extends UserModel {
             }
         }
         elseif ($update) {
-            foreach ($user->getDynamicData() as $entry) {
-                // FIXME: Convert this to ->form for `develop-next`
-                if ($entry->getForm()->type == 'U') {
-                    $entry->setSource($vars);
-                    $entry->save();
-                }
-            }
-            // Update name
-            if (isset($vars['name'])) {
-                $user->name = $vars['name'];
-                $user->save();
-            }
+            $errors = array();
+            $user->updateInfo($vars, $errors, true);
         }
 
         return $user;
@@ -540,7 +530,6 @@ class User extends UserModel {
             if (($f=$cd->getForm()) && $f->get('type') == 'U') {
                 if (($name = $f->getField('name'))) {
                     $this->name = $name->getClean();
-                    $this->save();
                 }
 
                 if (($email = $f->getField('email'))) {
@@ -548,10 +537,12 @@ class User extends UserModel {
                     $this->default_email->save();
                 }
             }
-            $cd->save();
+            // DynamicFormEntry::save returns the number of answers updated
+            if ($cd->save()) {
+                $this->updated = SqlFunction::NOW();
+            }
         }
-
-        return true;
+        return $this->save();
     }
 
     function save($refetch=false) {