Implement the full features