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 635a6079dbd876386e493a4fc6de50e40bd14dac..c563f24b11899758abdd6f256ffc9fa3ed0cb865 100644
--- a/include/class.user.php
+++ b/include/class.user.php
@@ -163,7 +163,7 @@ class User extends UserModel {
     var $_entries;
     var $_forms;
 
-    static function fromVars($vars) {
+    static function fromVars($vars, $update=false) {
         // Try and lookup by email address
         $user = static::lookupByEmail($vars['email']);
         if (!$user) {
@@ -196,6 +196,10 @@ class User extends UserModel {
                 return null;
             }
         }
+        elseif ($update) {
+            $errors = array();
+            $user->updateInfo($vars, $errors, true);
+        }
 
         return $user;
     }
@@ -472,7 +476,7 @@ class User extends UserModel {
 
         foreach ($users as $u) {
             $vars = array_combine($keys, $u);
-            if (!static::fromVars($vars))
+            if (!static::fromVars($vars, true))
                 return sprintf(__('Unable to import user: %s'),
                     print_r($vars, true));
         }
@@ -526,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'))) {
@@ -534,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) {