Hi, So says the PHP manual about unset "If a static variable is unset() inside of a function, unset() destroys the variable only in the context of the rest of a function. Following calls will restore the previous value of a variable." This will lead to really weirdo stuff if you have: function foo($refresh = FALSE) { static $storage; if ($refresh) { echo "refreshing\n"; unset($storage); } if (!isset($storage)) { $storage = microtime(); } return $storage; } echo foo() ."\n"; echo foo(TRUE) ."\n"; echo foo() ."\n"; Observe how the third and the first results are the same as if the refresh did not happen. As Drupal often uses such constructs. Use $storage = NULL instead of unset, for example -- or some other appropriate initial value like '' or array(). list_themes() in core for example has been biten by this, thanks goes to dww for reporting it. The patch is at http://drupal.org/node/134161 btw. I think it's better known that if you have global $x; unset $x; then $x will be unset only in local scope, as global $x is same as saying $x = &GLOBALS['x']; The above issue is actually the same because -- according to my knowledge -- static is a global which has a special flag 'you are only visible to function foo', so basically you have $storage = &$GLOBALS['_static']['foo']['storage']; and then you destroy this reference (of course GLOBALS['_static'] does not exist, I just used it for illustration). Regards, NK