major updates to add new functionality