in progress
major rewrite - alpha