API feels still weird, it may change.