We need somewhere to store the product objects that the product editor dialog creates. The best way to do this is to encapsulate the storage into a separate class. If we do this properly then we will be able to easily change the storage mechanism at a later date (such as switching from collections to a database) without affecting the GUIs. We will create a data access class for managing the storage of the product objects. The industry refers to instances of these classes as Data Access Objects (DAO). You can read more about the DAO concept at: [http://en.wikipedia.org/wiki/Data_access_object](http://en.wikipedia.org/wiki/Data_access_object) One of the problems that object-oriented languages have is that you often find that the place that a piece of data is stored is five times removed from the location that needs it. DAO classes help us with this problem because they give us a centralised location that all objects can use to access the data. 1. Add an issue to GitBucket that describes that you need to create a data access class for handling the storage of the products. 1. Create a class in the `dao` package. Name the class `ProductCollectionsDAO` since it is a DAO class that will store products using collections. 1. We need a place to store the product objects. The quickest way to do this is to use a `private`, `static`, `ArrayList` field. The field will hold the products, so name it appropriately (use a plural to indicate that the field holds many products). Don't forget to initialise the field (unless you enjoy debugging null-pointer exceptions). Take a second to think about why the field needs to be `static`. 1. The class will need the following methods: * A method for saving a product. It will take a single product as a parameter and add it to the `ArrayList`. This method does not need to return anything. Name this method `saveProduct`. * A method for getting all of the products. It will take no parameters and will return the entire `ArrayList`. Name this method `getProducts`. * A method for removing a product. It will take a single product as a parameter and remove it from the `ArrayList`. This method does not need to return anything. Name this method `removeProduct`. 1. Did you remember to 'program to an interface'? You should be using `Collection` on the left hand side of the field/method declarations instead of `ArrayList`. If not, fix it now. It should look like: ```java private static Collection<Product> products = new ArrayList<>(); ``` The `getProducts` method should also be using `Collection<Product>` as the return type. 1. Did you remember to specify the 'type' of the collections? You should be using the angle bracket notation (as shown in the examples in the previous step) to specify what type of objects your collections are expecting to hold. If not, fix it now. 1. Commit. This class is now complete, so you can use the `Closes #4` command in your commit message to close the issue (assuming the relevant issue is #4 --- adapt to suit).