basic draft, but need much better notation