just need to implement a* now