initial splitting impl