note that the constructor is badly designed and in need of love