Better abstractions. Factory fn calls everything else