First commit (base interfaces + some classes)