extend functional