all methods implemented, todo: splicing