flesh out copying all existing functionality