existing task should be overwritten. To define task attributes, the classes ProtocolAttribute, SNMPAttribute and TelnetAttribute are used depending on the protocol used for device configuration. Creating a task involves: getting the ConfigClient instance defining the attribute-level information specifying the task-level information handling the result of configuration. An "attribute" is an entity comprising the command to be executed and the values passed to execute the command. The attributes for the task can be set using the methods in the classes ProtocolAttribute. If a task is defined by a derivation from a task template, then device attribute values can be set using a "data source". In that case, the data source would form the main data repository/source from which the task receives its input. A data source is an entity which holds a set of values for the place holders configured in a template. The place holders, in turn, are configured when setting up the task template. More than one data source can be associated with any given task template. The use of a data source can be prohibited via the task's Input Type parameter. More information is given on data sources below, when we discuss task execution in the context of task templates. Detailed task-level information including task name, protocol to be used for exe- cuting the tasks, rollback type and rollback document are specified. The task is then created using the methods provided in the TaskGenerator class. When a task is executed over roughly 10 devices, the result of the configuration is only available after all the devices are configured. An option is available to ensure that the result of device configuration is sent as soon as the device is configured. Recall that a task is an entity that contains the configuration attributes along with the data used to configure a device to achieve a desired functionality. To configure SNMP-enabled devices, an SNMP task must be created. As discussed earlier, the methods in the TaskGenerator and SNMPAttribute class a