This allows adding architecture dependent implementations while still providing an general implementation