still prototyping. cleanup to follow