#1. add key functionality and general principles