needs further clean up