Looks extremely expensive allocation-wise, can it be simplified/cheaper?