encapsulated components to keep logic details private