add all required functionality