I wrote a transaction simple provider a month ago and I so it can be improved by making it safely available at a thread level using ThreadStatic attribute. Here is a nice article, showing just that.
ThreadStatic attribute is usefull especially when you would like to keep a singleton at a thread level that is under your control.