add all functionality