functional but missing a few things