refactored to use basis_id() rather than bsym()