This code was always kludgy and this clean it up a bit. insertmatrixkey() has been properly renamed insertkey_float(). Matrix calculations have been excised from the interface code, and placed in insertmatrixkey(), so that you can call it from anywhere without preliminaries and the proper values are calced based on the passed adr code. By much request, several semi-bug reports and discussion with production animators, visual keying is now used automatic for objects and bones that have constraints that cause them to ignore their Ipos (CopyLoc, TrackTo, etc.). In those cases, visual keying is used instead of the normal Ipo insertion method. This "auto" functionality is toggled from the "Use Visual Keying" button found along with "Needed" and "Available" in the Edit Methods prefs. Logic as to which constraints trigger visual keying on which adrcodes can be tweaked in match_adr_constraint() src/editipo.c This has been tested by a couple of people, myself included, but I may not have hit every constraint case, so evolutionary feedback is welcome.