redesign logic for contrib III