Building robust, reusable testbenches means the testbench elements must be configurable. At its essence, configuring a testbench is a matter of populating a database with name/value pairs and providing a means for testbench objects to access that database. Simply storing and retrieving name/value pairs does not tell the whole story. There are a number of architectural issues concerning the design of the database and how to effectively populate and use the items in the database to build highly configurable, reusable testbenches. UVM provides a facility called resources that provides the configuration infrastructure and API. We will discuss approaches to common configuration problems in term of resources. We will show how to use resources to implement sophisticated configuration use models.