One of the most common and most dreaded household chores, cleaning, typically consists of applying a tool on a surface (e.g. wipe, vacuum, dust, sweep, mop, scrub). In this project we aim to form a general framework for representing and learning the use of different cleaning tools by robots and develop interfaces to allow users to command cleaning tasks (i.e. indicate a tool and a target surface) as well as teach the use of novel tools by demonstration.