Current design (minus error handling, which depends on #11) 