make things OO for easier extending