why make it be extern?