massive refactor
add delete