This method is too long (complex), can we split?