Rejigged the API
Use metatable for defaults