seems functional. needs more rspec.