In Component Oriented Programming, optimizing interaction is a fundamental problem in constructing efficient programs. This talk lays out a foundation for reformulating the interaction between components with a goal to optimize the assembled system. We suggest using information dynamically gathered in one run to automatically reformat data structures and communication mechanisms that components use during their interactions. One variant of our theme is to choose between a variety of implementations. In a more sophisticated variant, we show how to transform a number of problems in component interaction into a graph problem and give efficient algorithm to solve it. To substantiate our claims, we implemented the algorithm for this aspect of component interaction and we present preliminary experiments resulting from our implementation. (Joint work with Karin Högstedt, Doug Kimelman, VT Rajan, Tova Roth, and Nan Wang.)