diff --git a/src/main/java/fi/utu/tech/ooj/exercise3/asiakasrekisteriohjelma/Asiakasrekisteri.java b/src/main/java/fi/utu/tech/ooj/exercise3/asiakasrekisteriohjelma/Asiakasrekisteri.java
index 4edef13c8705f6b3ec90b212dc31758ddeb9ab82..5af73e9361270f26058bfb15e13bc3ceef9f70d5 100644
--- a/src/main/java/fi/utu/tech/ooj/exercise3/asiakasrekisteriohjelma/Asiakasrekisteri.java
+++ b/src/main/java/fi/utu/tech/ooj/exercise3/asiakasrekisteriohjelma/Asiakasrekisteri.java
@@ -11,12 +11,9 @@ public class Asiakasrekisteri {
 
     public void lisaaAsiakas(Asiakas asiakas) {
         int asiakasnumero;
-        while (true) {
+        do {
             asiakasnumero = ThreadLocalRandom.current().nextInt(1000, 10000);
-            if (!asiakaslista.containsKey(asiakasnumero)) {
-                break;
-            }
-        }
+        } while (asiakaslista.containsKey(asiakasnumero));
         asiakaslista.put(asiakasnumero, asiakas);
     }
 
diff --git a/src/main/java/fi/utu/tech/ooj/exercise3/asiakasrekisteriohjelma/Palvelu.java b/src/main/java/fi/utu/tech/ooj/exercise3/asiakasrekisteriohjelma/Palvelu.java
new file mode 100644
index 0000000000000000000000000000000000000000..e648662c4c62cf2ab408c58eb88203526aa095cf
--- /dev/null
+++ b/src/main/java/fi/utu/tech/ooj/exercise3/asiakasrekisteriohjelma/Palvelu.java
@@ -0,0 +1,11 @@
+package fi.utu.tech.ooj.exercise3.asiakasrekisteriohjelma;
+
+public class Palvelu extends Tuote {
+
+    public Palvelu(String nimi, Double hinta, Double alv) {
+        super(nimi, hinta, alv);
+    }
+
+    public void tilaaPalvelu() {}
+
+}
diff --git a/src/main/java/fi/utu/tech/ooj/exercise3/asiakasrekisteriohjelma/Pilailuvaline.java b/src/main/java/fi/utu/tech/ooj/exercise3/asiakasrekisteriohjelma/Pilailuvaline.java
new file mode 100644
index 0000000000000000000000000000000000000000..aad5148cd4030de46b0c0fb823722b8887e04973
--- /dev/null
+++ b/src/main/java/fi/utu/tech/ooj/exercise3/asiakasrekisteriohjelma/Pilailuvaline.java
@@ -0,0 +1,8 @@
+package fi.utu.tech.ooj.exercise3.asiakasrekisteriohjelma;
+
+public class Pilailuvaline extends Tuote{
+
+    public Pilailuvaline(String nimi, Double hinta, Double alv) {
+        super(nimi, hinta, alv);
+    }
+}
diff --git a/src/main/java/fi/utu/tech/ooj/exercise3/asiakasrekisteriohjelma/Tuote.java b/src/main/java/fi/utu/tech/ooj/exercise3/asiakasrekisteriohjelma/Tuote.java
new file mode 100644
index 0000000000000000000000000000000000000000..59e443f8eda6917bb5f2ca7c2e18fb45ae385501
--- /dev/null
+++ b/src/main/java/fi/utu/tech/ooj/exercise3/asiakasrekisteriohjelma/Tuote.java
@@ -0,0 +1,18 @@
+package fi.utu.tech.ooj.exercise3.asiakasrekisteriohjelma;
+
+public abstract class Tuote {
+    protected String nimi;
+    protected Double hinta;
+    protected Double alv;
+
+    public Tuote(String nimi, Double hinta, Double alv) {
+        this.nimi = nimi;
+        this.hinta = hinta;
+        this.alv = alv;
+    }
+
+    @Override
+    public String toString() {
+        return nimi+", "+hinta+", "+alv;
+    }
+}
diff --git a/src/main/java/fi/utu/tech/ooj/exercise3/asiakasrekisteriohjelma/Tuoterekisteri.java b/src/main/java/fi/utu/tech/ooj/exercise3/asiakasrekisteriohjelma/Tuoterekisteri.java
new file mode 100644
index 0000000000000000000000000000000000000000..40240063db8a577a44b3ede5522f98df878cba47
--- /dev/null
+++ b/src/main/java/fi/utu/tech/ooj/exercise3/asiakasrekisteriohjelma/Tuoterekisteri.java
@@ -0,0 +1,23 @@
+package fi.utu.tech.ooj.exercise3.asiakasrekisteriohjelma;
+
+import java.util.HashMap;
+import java.util.concurrent.ThreadLocalRandom;
+
+public class Tuoterekisteri {
+
+    private HashMap<Integer, Tuote> tuotelista;
+
+    public Tuoterekisteri() {
+        this.tuotelista = new HashMap<>();
+    }
+
+    public void lisaaTuote(Tuote tuote) {
+        int tuotenumero;
+        do {
+            tuotenumero = ThreadLocalRandom.current().nextInt(1000, 10000);
+        } while (tuotelista.containsKey(tuotenumero));
+        tuotelista.put(tuotenumero, tuote);
+    }
+
+
+}