};
 \f
 
+static void var_set_print_format_quiet (struct variable *v, const struct fmt_spec *print);
+static void var_set_write_format_quiet (struct variable *v, const struct fmt_spec *write);
 static bool var_set_label_quiet (struct variable *v, const char *label, bool issue_warning);
 static void var_set_name_quiet (struct variable *v, const char *name);
 
   return v->width;
 }
 
-/* Changes the width of V to NEW_WIDTH.
-   This function should be used cautiously. */
 void
-var_set_width (struct variable *v, int new_width)
+var_set_width_and_formats (struct variable *v, int new_width,
+                          const struct fmt_spec *print, const struct fmt_spec *write)
 {
   struct variable *ov;
-  const int old_width = v->width;
   unsigned int traits = 0;
 
-  if (old_width == new_width)
-    return;
-
   ov = var_clone (v);
 
   if (var_has_missing_values (v))
 
   v->width = new_width;
   traits |= VAR_TRAIT_WIDTH;
+
+  if (print)
+    {
+      var_set_print_format_quiet (v, print);
+      traits |= VAR_TRAIT_PRINT_FORMAT;
+    }
+
+  if (write)
+    {
+      var_set_write_format_quiet (v, write);
+      traits |= VAR_TRAIT_WRITE_FORMAT;
+    }
+
   dict_var_changed (v, traits, ov);
 }
 
+/* Changes the width of V to NEW_WIDTH.
+   This function should be used cautiously. */
+void
+var_set_width (struct variable *v, int new_width)
+{
+  const int old_width = v->width;
+
+  if (old_width == new_width)
+    return;
+
+  var_set_width_and_formats (v, new_width, NULL, NULL);
+}
+
+
+
+
 /* Returns true if variable V is numeric, false otherwise. */
 bool
 var_is_numeric (const struct variable *v)
 
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
 int compare_var_ptrs_by_dict_index (const void *, const void *, const void *);
 
+struct fmt_spec;
+
 /* Types and widths of values associated with a variable. */
 enum val_type var_get_type (const struct variable *);
 int var_get_width (const struct variable *);
 void var_set_width (struct variable *, int width);
+void var_set_width_and_formats (struct variable *v, int new_width,
+                               const struct fmt_spec *print, const struct fmt_spec *write);
 
 bool var_is_numeric (const struct variable *);
 bool var_is_alpha (const struct variable *);
 
 
   format = *var_get_print_format (var);
   psppire_var_type_dialog_run (GTK_WINDOW (toplevel), &format);
-  var_set_width (var, fmt_var_width (&format));
-  var_set_both_formats (var, &format);
+
+  var_set_width_and_formats (var, fmt_var_width (&format), &format, &format);
 }
 
 static void