For example, I've got a tube prim that I'm using to make a sort of "Stasis Tube" object, so I'm changing the begin and end cut parameters to make it open and close. But the fact that I have to get all the individual parameters and extract them so that I can alter one and plug them back in seems very unoptimized. Here it is stripped down to the barest minimum, with one attempt that failed commented out. A fix for that alone might help with efficiency. { list params = llGetPrimitiveParams([PRIM_TYPE]); //This is the stuff I'm thinking is inefficient integer holeshape = llList2Integer(params, 1); vector cut = llList2Vector(params, 2); float hollow = llList2Float(params, 3); vector twist = llList2Vector(params, 4); vector holesize = llList2Vector(params, 5); vector topshear = llList2Vector(params, 6); vector profilecut = llList2Vector(params, 7); vector taper_a = llList2Vector(params, 8); float revolutions = llList2Float(params, 9); float radiusoffset = llList2Float(params, 10); float skew = llList2Float(params, 11); //normally this might be put into states, and I want to break it up incrementally with a timer to close slowly. if ((0.0 != cut.x)) { cut.x = 0.0; cut.y = 1.0; } else { cut.x = 0.25; cut.y = 0.75; } //This is the only way to set any of these parameters. It would be SO much better to have a way of accessing them individually as well as en masse. llSetPrimitiveParams([PRIM_TYPE, PRIM_TYPE_TUBE, holeshape, cut, hollow, twist, holesize, topshear, profilecut, taper_a, revolutions, radiusoffset, skew]); //This fails saying I can't put a list in a list. But I can't use llListReplaceList without the [ ] around cut //params = llListReplaceList(params, [cut], 2, 2); // llSetPrimitiveParams([PRIM_TYPE, params]); } This works, but it strikes me as horribly inelegant.