Hi I played a bit with my problem of sporking a member function and found that the attached example (static_member.ck) actually *do* work. However (as the comment in the code suggest) if the function sporkee() is *not* declared as a static function, I get: [chuck](VM): NullPointerException: shred[id=2:spork~exp], PC=[3] Could soneone provide a meaningfull explanation, why that is? And is the exception (when "static" is removed) to be considered a bug in chuck? Finally, what *exactly* does "static" mean? The documentation states that static data and functions "are shared by all instances of that class". Ok, I understand that. But apparently "static" doesn't mean "cannot be changed" (which is what the word implies), mostly applicable to data, as the other example (static.ck) shows. So, why was the word "static" chosen, shouldn't it have been "global" or "shared" or something like that? Or is there a historical/traditional reason behind the word "static" that I'm not aware of? Whatever the reason, I think this (that "static" doesn't mean "unchangeable" and when + why it's neccessary to declare things, esp. functions "static", like in the case of "spork_member.ck") needs mention in the manual, since I might not be the only one thrown off by this... Thanks in advance for any response. -- peace, love & harmony Atte http://www.atte.dk | quartet: http://www.anagrammer.dk http://www.atte.dk/gps | compositions: http://www.atte.dk/compositions class Test { fun static void sporkee() { // must be static, otherwise gives: // [chuck](VM): NullPointerException: shred[id=2:spork~exp], PC=[3] while(true) { <<<"i'm sporkee">>>; 1::second => now; } } fun void sporker() { spork ~ sporkee(); } } Test test; test.sporker(); // keep alive while(true) { 1::second => now; } class Test { 0 => static int x; 0 => int y; fun void tell_x() { <<<x>>>; } fun void tell_y() { <<<y>>>; } } Test test; test.tell_x(); test.tell_y(); 1 => test.x; 2 => test.y; test.tell_x(); test.tell_y();