refactor and add button drop