functional update
Using C++0X for better compatibility