add abstract provider