Index: app/core/gimptemplate.c
===================================================================
--- app/core/gimptemplate.c	(revision 26610)
+++ app/core/gimptemplate.c	(working copy)
@@ -59,21 +59,26 @@ enum
 };
 
 
-static void      gimp_template_finalize     (GObject      *object);
-static void      gimp_template_set_property (GObject      *object,
-                                             guint         property_id,
-                                             const GValue *value,
-                                             GParamSpec   *pspec);
-static void      gimp_template_get_property (GObject      *object,
-                                             guint         property_id,
-                                             GValue       *value,
-                                             GParamSpec   *pspec);
-static void      gimp_template_notify       (GObject      *object,
-                                             GParamSpec   *pspec);
+static void      gimp_template_config_iface_init (GimpConfigInterface *iface);
+static void      gimp_template_finalize          (GObject             *object);
+static void      gimp_template_set_property      (GObject             *object,
+                                                  guint                property_id,
+                                                  const GValue        *value,
+                                                  GParamSpec          *pspec);
+static void      gimp_template_get_property      (GObject             *object,
+                                                  guint                property_id,
+                                                  GValue              *value,
+                                                  GParamSpec          *pspec);
+static void      gimp_template_notify            (GObject             *object,
+                                                  GParamSpec          *pspec);
+static gboolean  gimp_template_copy              (GimpConfig          *src,
+                                                  GimpConfig          *dest,
+                                                  GParamFlags          flags);
 
 
 G_DEFINE_TYPE_WITH_CODE (GimpTemplate, gimp_template, GIMP_TYPE_VIEWABLE,
-                         G_IMPLEMENT_INTERFACE (GIMP_TYPE_CONFIG, NULL))
+                         G_IMPLEMENT_INTERFACE (GIMP_TYPE_CONFIG,
+                                                gimp_template_config_iface_init))
 
 #define parent_class gimp_template_parent_class
 
@@ -149,6 +154,12 @@ gimp_template_class_init (GimpTemplateCl
 }
 
 static void
+gimp_template_config_iface_init (GimpConfigInterface *iface)
+{
+  iface->copy = gimp_template_copy;
+}
+
+static void
 gimp_template_init (GimpTemplate *template)
 {
 }
@@ -295,6 +306,22 @@ gimp_template_notify (GObject    *object
     gimp_viewable_invalidate_preview (GIMP_VIEWABLE (object));
 }
 
+static gboolean
+gimp_template_copy (GimpConfig  *src,
+                    GimpConfig  *dest,
+                    GParamFlags  flags)
+{
+  GimpTemplate *template_src  = GIMP_TEMPLATE (src);
+
+  /* For the template editor it is important to copy resolution first */
+  g_object_set (dest, "xresolution", template_src->xresolution, NULL);
+  g_object_set (dest, "yresolution", template_src->yresolution, NULL);
+
+  /* Use gimp_config_sync() for the rest */
+  gimp_config_sync (G_OBJECT (src), G_OBJECT (dest), flags);
+
+  return TRUE;
+}
 
 /*  public functions  */
 
Index: app/dialogs/image-new-dialog.c
===================================================================
--- app/dialogs/image-new-dialog.c	(revision 26610)
+++ app/dialogs/image-new-dialog.c	(working copy)
@@ -245,7 +245,7 @@ image_new_template_changed (GimpContext 
   if (!template->comment || !strlen (template->comment))
     comment = g_strdup (dialog->template->comment);
 
-  gimp_config_sync (G_OBJECT (template), G_OBJECT (dialog->template), 0);
+  gimp_config_copy (GIMP_CONFIG (template), GIMP_CONFIG (dialog->template), 0);
 
   if (comment)
     {
Index: app/gegl/gimpcurvesconfig.c
===================================================================
--- app/gegl/gimpcurvesconfig.c	(revision 26610)
+++ app/gegl/gimpcurvesconfig.c	(working copy)
@@ -335,9 +335,9 @@ gimp_curves_config_copy (GimpConfig  *sr
        channel <= GIMP_HISTOGRAM_ALPHA;
        channel++)
     {
-      gimp_config_copy (GIMP_CONFIG (src_config->curve[channel]),
-                        GIMP_CONFIG (dest_config->curve[channel]),
-                        flags);
+      gimp_config_copy_freeze_notify (GIMP_CONFIG (src_config->curve[channel]),
+                                      GIMP_CONFIG (dest_config->curve[channel]),
+                                      flags);
     }
 
   g_object_notify (G_OBJECT (dest), "curve");
Index: app/tools/gimpimagemaptool.c
===================================================================
--- app/tools/gimpimagemaptool.c	(revision 26610)
+++ app/tools/gimpimagemaptool.c	(working copy)
@@ -674,9 +674,9 @@ gimp_image_map_tool_edit_as (GimpImageMa
 
   new_tool = tool_manager_get_active (display->gimp);
 
-  gimp_config_copy (config,
-                    GIMP_CONFIG (GIMP_IMAGE_MAP_TOOL (new_tool)->config),
-                    0);
+  gimp_config_copy_freeze_notify (config,
+                                  GIMP_CONFIG (GIMP_IMAGE_MAP_TOOL (new_tool)->config),
+                                  0);
 }
 
 GtkWidget *
Index: app/widgets/gimpsettingsbox.c
===================================================================
--- app/widgets/gimpsettingsbox.c	(revision 26610)
+++ app/widgets/gimpsettingsbox.c	(working copy)
@@ -532,8 +532,8 @@ gimp_settings_box_setting_selected (Gimp
 {
   if (object)
     {
-      gimp_config_copy (GIMP_CONFIG (object),
-                        GIMP_CONFIG (box->config), 0);
+      gimp_config_copy_freeze_notify (GIMP_CONFIG (object),
+                                      GIMP_CONFIG (box->config), 0);
 
       gimp_container_view_select_item (view, NULL);
     }
Index: libgimpconfig/gimpconfig-iface.c
===================================================================
--- libgimpconfig/gimpconfig-iface.c	(revision 26610)
+++ libgimpconfig/gimpconfig-iface.c	(working copy)
@@ -590,9 +590,34 @@ gimp_config_copy (GimpConfig  *src,
   g_return_val_if_fail (G_TYPE_FROM_INSTANCE (src) == G_TYPE_FROM_INSTANCE (dest),
                         FALSE);
 
+  changed = GIMP_CONFIG_GET_INTERFACE (src)->copy (src, dest, flags);
+
+  return changed;
+}
+
+/**
+ * gimp_config_copy_freeze_notify:
+ * @src: a #GObject that implements the #GimpConfigInterface.
+ * @dest: another #GObject of the same type as @a.
+ * @flags: a mask of GParamFlags
+ *
+ * Calls gimp_config_copy() but surrounds it with calls to
+ * g_object_freeze/thaw_notify() for @dest.
+ *
+ * Return value: %TRUE if @dest was modified, %FALSE otherwise
+ *
+ * Since: GIMP 2.6
+ **/
+gboolean
+gimp_config_copy_freeze_notify (GimpConfig  *src,
+                                GimpConfig  *dest,
+                                GParamFlags  flags)
+{
+  gboolean changed;
+
   g_object_freeze_notify (G_OBJECT (dest));
 
-  changed = GIMP_CONFIG_GET_INTERFACE (src)->copy (src, dest, flags);
+  changed = gimp_config_copy (src, dest, flags);
 
   g_object_thaw_notify (G_OBJECT (dest));
 
Index: libgimpconfig/gimpconfig-iface.h
===================================================================
--- libgimpconfig/gimpconfig-iface.h	(revision 26610)
+++ libgimpconfig/gimpconfig-iface.h	(working copy)
@@ -101,6 +101,9 @@ void          gimp_config_reset         
 gboolean      gimp_config_copy                  (GimpConfig   *src,
                                                  GimpConfig   *dest,
                                                  GParamFlags   flags);
+gboolean      gimp_config_copy_freeze_notify    (GimpConfig   *src,
+                                                 GimpConfig   *dest,
+                                                 GParamFlags   flags);
 
 
 G_END_DECLS
Index: libgimpconfig/gimpconfig-utils.c
===================================================================
--- libgimpconfig/gimpconfig-utils.c	(revision 26610)
+++ libgimpconfig/gimpconfig-utils.c	(working copy)
@@ -206,7 +206,6 @@ gimp_config_sync (GObject     *src,
   /* we use the internal versions here for a number of reasons:
    *  - it saves a g_list_reverse()
    *  - it avoids duplicated parameter checks
-   *  - it makes GimpTemplateEditor work (resolution is set before size)
    */
   if (G_TYPE_FROM_INSTANCE (src) == G_TYPE_FROM_INSTANCE (dest))
     diff = gimp_config_diff_same (src, dest, (flags | G_PARAM_READWRITE));
