add completeListener