basic functionality working, though there are some poor implementations around
documenting