abstract environment