added @safe and nothrow