This paper describes a middleware that enables its target application to dynamically incorporate heterogeneous nodes of a cluster. It distributes the objects of the application across the nodes with the objective to evenly distribute system load. As such, it eliminates the need for a system administrator to control the placement of data. We describe the architecture of the middleware that facilitates object migration and its decision making components. One aspect of this architecture is a negotiation protocol to facilitate migration of objects from one node to another. Finally, we describe an implementation of this middleware using Java and Sun's Jini framework.