direct constructor