Sorry Maddogg6, I do not know where my brain was. I did not even think about zero-crossings, etc. In any case, I hacked something together that might work a little better. I threw it togther quickly, so it is not optimized (at all) or anything, but I think it might work ok. It may not be the best implemention (it is 4:30 am), but maybe you can make use of it. Here is the code (hopefully it isn't t bad... I am starting to go cross-eyed): Code: input FXBInL, FXBInR, PLInL; input PLInR; output OutL, OutR; control FXB=1, PL=1; static abs=0, av=0, v1=0; static v2=0; temp t1, t2 ; code interp v1, v1, 0.00001, 1; macs t1, 0, FXBInL, v1; macs t2, 0, FXBInR, v1; macs t1, 0, t1, FXB; macs t2, 0, t2, FXB; tstneg abs, t1, t1, 0; interp av, av, 0.0007, abs; skip ccr, ccr, 0x100, 7; interp v2, v2, 0.00001, 1; macs t1, 0, PLInL, v2; macs t2, 0, PLInR, v2; macs t1, 0, t1, PL; macs t2, 0, t2, PL; macs v1, 0, 0, 0; skip ccr, ccr, 0x7fffffff, 1 macs v2, 0, 0, 0; macs OutL, 0, t1, 1; macs OutR, 0, t2, 1; It currently only uses FXBInL for testing. In any case, it is still all Dane code, and what Lex is talking about most likley could be done all in Dane as well, without using too many resources.