public static function getProperty($propName)
    {

        // some properties are detemined on each access
        // some are cached, see below

        // default is the cached value:
        $val = isset(self::$properties[$propName]) ? self::$properties[$propName] : null;

        // special exceptions
        switch ($propName) {
            case 'user.dir':
                $val = getcwd();
                break;
        }

        return $val;
    }