ABSTRACT: Compilers often lose optimization opportunities because they are unable to leverage programmer abstractions. For example, expressions involving "Vector" objects might be simplified if the compiler was aware of the semantics of a Vector. In this talk, we present work done to extend the Mono virtual machine to support self-optimizing libraries. The Mono JIT is modified to export an optimization API to user code. Libraries can then be built by users that not only provide a user abstraction, but also provide optimizations that are dynamically detected and added to the extensible JIT compiler at runtime. These optimizations can then make use of the semantics of the abstraction. The extended framework will be presented and an example of a self-optimizing library will be evaluated.