PayPal Express FIRSTNAME and LASTNAME instead of SHIPTONAME

In Model/Express/Checkout.php the returnFromPaypal($token) function includes this:

$shippingAddress->setLastname(null);

If I remove this, I can change the _exportAddressses function in Model/Api/Nvp.php to include

'firstname'  => $data['FIRSTNAME'],
'lastname'  => $data['LASTNAME'],

instead of

'firstname'  => $data['SHIPTONAME'],

This will properly assign first- and lastname to their respective fields. I am still trying to figure out, why Magento is assigning the full name to the firstname field in the first place - and why nobody is bothered by this...

Edit 26.09.2017

As some have pointed out, this will force customers to use the billing address stored within PayPal without being able to select a differing shipping address. So I have chosen a different approach:

Model/Api/Nvp.php

$shiptofirstname = substr($data['SHIPTONAME'], 0, strrpos($data['SHIPTONAME'], ' '));
$shiptolastname = array_pop(explode(' ', $data['SHIPTONAME']));
$shippingAddress->addData(array(
    'firstname'  => $shiptofirstname,
    'lastname'  => $shiptolastname,
));

This will split SHIPTONAME after the last space. For my country this will most likely work 99% of the time as surnames usually don't include spaces. And even if the surname includes a space, at least I am not getting empty surname fields or double surnames (see a differenet solution further down) which will force me to edit orders manually but only incorrectly splitted surnames.