abstract as much as possible out since init is almost identicalc and protocol COULD be device independent.