+  # Copy custom variables.
+  foreach my $var (@{ $source->cvars_by_config }) {
+    $self->cvar_by_name($var->config->name)->value($var->value);
+  }
+
+  my %paste_template_result;
+
+  # Clone text blocks and pictures.
+  my $clone_and_reset_position = sub {
+    my ($src_obj) = @_;
+    my $cloned    = $src_obj->clone_and_reset;
+    $cloned->position(undef);
+    return $cloned;
+  };
+
+  my $clone_text_block = sub {
+    my ($text_block) = @_;
+    my $cloned       = $text_block->clone_and_reset;
+    $cloned->position(undef);
+    $cloned->pictures([ map { $clone_and_reset_position->($_) } @{ $text_block->pictures_sorted } ]);
+    return $cloned;
+  };
+
+  $paste_template_result{text_blocks} = [ map { $clone_text_block->($_) } @{ $source->text_blocks_sorted } ];
+
+  if (!$params->{paste_template}) {
+    $self->text_blocks($paste_template_result{text_blocks});
+  } else {
+    $self->add_text_blocks($paste_template_result{text_blocks});
+  }
+
+  # Clone additional parts.
+  $paste_template_result{parts} = [ map { $clone_and_reset_position->($_) } @{ $source->parts } ];
+  my $accessor                  = $params->{paste_template} ? "add_parts" : "parts";
+  $self->$accessor($paste_template_result{parts});