redesign supporting multiple same type operations