Initial implementation
Adding tests