Reduce complexity by splitting-up ipm_new()