source     => $params{source},
                                                      taxkey     => 0,
                                                      tax_id     => SL::DB::Manager::Tax->find_by(taxkey => 0)->id);
+
+        # the acc_trans entries are saved individually, not added to $self and then saved all at once
         $new_acc_trans->save;
 
         $reference_amount -= abs($amount);
     $self->datepaid($transdate_obj);
     $self->save;
 
+    # make sure transactions will be reloaded the next time $self->transactions
+    # is called, as pay_invoice saves the acc_trans objects individually rather
+    # than adding them to the transaction relation array.
+    $self->forget_related('transactions');
+
   my $datev_check = 0;
   if ( $is_sales )  {
     if ( (  $self->invoice && $::instance_conf->get_datev_check_on_sales_invoice  ) ||
 
   my $skonto_configured = 1; # default is assume skonto works
 
-  my $transactions = $self->transactions;
-  foreach my $transaction (@{ $transactions }) {
+  # my $transactions = $self->transactions;
+  foreach my $transaction (@{ $self->transactions }) {
     # find all transactions with an AR_amount or AP_amount link
     my $tax = SL::DB::Manager::Tax->get_first( where => [taxkey => $transaction->{taxkey}]);
     croak "no tax for taxkey " . $transaction->{taxkey} unless ref $tax;
 
   my $reference_ARAP_amount = 0;
 
-  my $transactions = $self->transactions;
-  foreach my $transaction (@{ $transactions }) {
+  # my $transactions = $self->transactions;
+  foreach my $transaction (@{ $self->transactions }) {
     # find all transactions with an AR_amount or AP_amount link
     $transaction->{chartlinks} = { map { $_ => 1 } split(m/:/, $transaction->{chart_link}) };
     # second condition is that we can determine an automatic Skonto account for each AR_amount entry
   $ap->pay_invoice(chart_id      => $bank->chart_id,
                    amount        => $ap->open_amount,
                    transdate     => DateTime->now->to_kivitendo,
-                   memo          => 'foobar;
-                   source        => 'barfoo;
+                   memo          => 'foobar',
+                   source        => 'barfoo',
                    payment_type  => 'without_skonto',  # default if not specified
                   );
 
   $ap->pay_invoice(chart_id      => $bank->chart_id,
                    amount        => $ap->amount,       # doesn't need to be specified
                    transdate     => DateTime->now->to_kivitendo,
-                   memo          => 'foobar;
-                   source        => 'barfoo;
+                   memo          => 'foobar',
+                   source        => 'barfoo',
                    payment_type  => 'with_skonto',
                   );
 
 might always want to pay quickly making use of skonto, while another company
 might always want to pay as late as possible.
 
-=item C<transactions>
-
-Returns all acc_trans Objects of an ar/ap object.
-
-Example in console to print account numbers and booked amounts of an invoice:
-  my $invoice = invoice(invnumber => '144');
-  foreach my $acc_trans ( @{ $invoice->transactions } ) {
-    print $acc_trans->chart->accno . " : " . $acc_trans->amount_as_number . "\n"
-  };
-  # 1200 : 226,00000
-  # 1800 : -226,00000
-  # 4300 : 100,00000
-  # 3801 : 7,00000
-  # 3806 : 19,00000
-  # 4400 : 100,00000
-  # 1200 : -226,00000
-
 =item C<get_payment_select_options_for_bank_transaction $banktransaction_id %params>
 
 Make suggestion for a skonto payment type by returning an HTML blob of the options
 
 }
 
 sub number_of_payments {
-  my $transactions = shift;
+  my $invoice = shift;
 
   my $number_of_payments;
   my $paid_amount;
-  foreach my $transaction ( @$transactions ) {
+  foreach my $transaction ( @{ $invoice->transactions } ) {
     if ( $transaction->chart_link =~ /(AR_paid|AP_paid)/ ) {
       $paid_amount += $transaction->amount ;
       $number_of_payments++;
 };
 
 sub total_amount {
-  my $transactions = shift;
+  my $invoice = shift;
 
-  my $total = sum map { $_->amount } @$transactions;
+  my $total = sum map { $_->amount } @{ $invoice->transactions };
 
   return $::form->round_amount($total, 5);
 
 
   $invoice->pay_invoice( %params );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
-  my $total = total_amount($invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+  my $total = total_amount($invoice);
 
   my $title = 'default invoice, one item, 19% tax, without_skonto';
 
   $params{amount} = '-10.00';
   $invoice->pay_invoice( %params );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
-  my $total = total_amount($invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+  my $total = total_amount($invoice);
 
   my $title = 'default invoice, one item, 19% tax, without_skonto';
 
 
   $invoice->pay_invoice( %params );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
-  my $total = total_amount($invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+  my $total = total_amount($invoice);
 
   my $title = 'default invoice, two items, 19/7% tax with_skonto_pt';
 
 
   $invoice->pay_invoice( %params );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
-  my $total = total_amount($invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+  my $total = total_amount($invoice);
 
   my $title = 'default invoice, two items, 19/7% tax with_skonto_pt';
 
 
   $invoice->pay_invoice( %params );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
-  my $total = total_amount($invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+  my $total = total_amount($invoice);
 
   my $title = 'default invoice, two items, 19/7% tax without skonto';
 
                          transdate    => DateTime->today_local->to_kivitendo,
                        );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
-  my $total = total_amount($invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+  my $total = total_amount($invoice);
 
   my $title = 'default invoice, two items, 19/7% tax without skonto incomplete payment';
 
                          transdate    => DateTime->today_local->to_kivitendo
                        );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
-  my $total = total_amount($invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+  my $total = total_amount($invoice);
 
   my $title = 'default invoice, two items, 19/7% tax not included';
 
                          transdate    => DateTime->today_local->to_kivitendo
                        );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
-  my $total = total_amount($invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+  my $total = total_amount($invoice);
 
   my $title = 'default invoice, two items, 19/7% tax not included';
 
                          transdate    => DateTime->today_local->to_kivitendo
                        );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
-  my $total = total_amount($invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+  my $total = total_amount($invoice);
 
   my $title = 'default invoice, two items, 19/7% tax not included';
 
                          transdate    => DateTime->today_local->to_kivitendo
                        );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
-  my $total = total_amount($invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+  my $total = total_amount($invoice);
 
   my $title = 'default invoice, two items, 19/7% tax not included';
 
   $params{payment_type} = 'difference_as_skonto';
   $invoice->pay_invoice( %params );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
-  my $total = total_amount($invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+  my $total = total_amount($invoice);
 
   my $title = 'default invoice, one item, 19% tax, without_skonto';
 
   $params{payment_type} = 'difference_as_skonto';
   $invoice->pay_invoice( %params );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
-  my $total = total_amount($invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+  my $total = total_amount($invoice);
 
   my $title = 'default invoice, one item, 19% tax, without_skonto';
 
 
   $purchase_invoice->pay_invoice( %params );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice->transactions);
-  my $total = total_amount($purchase_invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice);
+  my $total = total_amount($purchase_invoice);
 
   my $title = 'default invoice, two items, 19/7% tax without skonto';
 
 
   $purchase_invoice->pay_invoice( %params );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice->transactions);
-  my $total = total_amount($purchase_invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice);
+  my $total = total_amount($purchase_invoice);
 
   my $title = 'default invoice, two items, 19/7% tax without skonto';
 
                           chart_id     => $bank_account->chart_id,
                           transdate    => DateTime->today_local->to_kivitendo
                          );
-  my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice->transactions);
-  my $total = total_amount($purchase_invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice);
+  my $total = total_amount($purchase_invoice);
 
   my $title = 'default purchase_invoice, two charts, 19/7% tax multiple payments with final difference as skonto';
 
                           transdate    => DateTime->today_local->to_kivitendo
                          );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice->transactions);
-  my $total = total_amount($purchase_invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice);
+  my $total = total_amount($purchase_invoice);
 
   my $title = 'default purchase_invoice, two charts, 19/7% tax multiple payments with final difference as skonto';
 
 
   $invoice->pay_invoice( %params );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
-  my $total = total_amount($invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+  my $total = total_amount($invoice);
 
   my $title = 'default invoice, two items, 19/7% tax with_skonto_pt 50/50';
 
 
   $invoice->pay_invoice( %params );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
-  my $total = total_amount($invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+  my $total = total_amount($invoice);
 
   my $title = 'default invoice, four items, 19/7% tax with_skonto_pt 4x25';
 
 
   $invoice->pay_invoice( %params );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
-  my $total = total_amount($invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+  my $total = total_amount($invoice);
 
   my $title = 'default invoice, four items, 19/7% tax with_skonto_pt 4x25';
 
                          transdate    => DateTime->today_local->to_kivitendo
                        );
 
-  my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
-  my $total = total_amount($invoice->transactions);
+  my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+  my $total = total_amount($invoice);
 
   my $title = 'default invoice, four items, 19/7% tax with_skonto_pt 4x25';