diff --git a/src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java b/src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java
new file mode 100644
index 0000000000000000000000000000000000000000..c3ec76d33b3bf331405cb4723bbbb9a4468fe5e8
--- /dev/null
+++ b/src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java
@@ -0,0 +1,46 @@
+package fi.utu.tech.ooj.exercise0;
+
+public class Kirja
+{
+    private String kirjanNimi;
+    private String kirjailijanNimi;
+    private int julkaisuVuosi;
+
+    public Kirja(String kirjanNimi, String kirjailijanNimi, int julkaisuVuosi)
+    {
+        this.kirjanNimi = kirjanNimi;
+        this.kirjailijanNimi = kirjailijanNimi;
+        this.julkaisuVuosi = julkaisuVuosi;
+    }
+
+    public String getKirjanNimi() {
+        return kirjanNimi;
+    }
+
+    public void setKirjanNimi(String kirjanNimi) {
+        this.kirjanNimi = kirjanNimi;
+    }
+
+    public String getKirjailijanNimi() {
+        return kirjailijanNimi;
+    }
+
+    public void setKirjailijanNimi(String kirjailijanNimi) {
+        this.kirjailijanNimi = kirjailijanNimi;
+    }
+
+    public int getJulkaisuVuosi() {
+        return julkaisuVuosi;
+    }
+
+    public void setJulkaisuVuosi(int julkaisuVuosi) {
+        this.julkaisuVuosi = julkaisuVuosi;
+    }
+
+    @Override
+    public String toString() {
+        return "Kirja: " + kirjanNimi + "\n" +
+                "Kirjailija: " + kirjailijanNimi + "\n" +
+                "Julkaisuvuosi: " + julkaisuVuosi;
+    }
+}
diff --git a/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java b/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba5db5cb3018d1ee3848a11372cfc81ec9b1536b
--- /dev/null
+++ b/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java
@@ -0,0 +1,78 @@
+package fi.utu.tech.ooj.exercise0;
+
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.List;
+
+public class KirjaKokoelma
+{
+    private String kokoelmanOmistaja;
+    private ArrayList<Kirja> kirjaListaus;
+
+    public KirjaKokoelma(String kokoelmanOmistaja)
+    {
+        this.kokoelmanOmistaja = kokoelmanOmistaja;
+        kirjaListaus = new ArrayList<>();
+    }
+
+    public String getKokoelmanOmistaja() {
+        return kokoelmanOmistaja;
+    }
+
+    public void setKokoelmanOmistaja(String kokoelmanOmistaja) {
+        this.kokoelmanOmistaja = kokoelmanOmistaja;
+    }
+
+    public ArrayList<Kirja> getKirjaListaus() {
+        return kirjaListaus;
+    }
+
+    public void lisaaKirja(Kirja kirja)
+    {
+        kirjaListaus.add(kirja);
+    }
+
+    public void tulostaKokoelma(PrintStream out)
+    {
+        if (kirjaListaus.isEmpty())
+        {
+            out.println("Kokoelma tyhjä.");
+            return;
+        }
+        for (Kirja kirja : kirjaListaus)
+        {
+            out.println(kirja.toString());
+        }
+    }
+
+    public List<Kirja> etsiKirjat(String hakusana, KirjanTiedot kentta) throws IllegalArgumentException
+    {
+        if (hakusana == null || hakusana.isBlank() || kentta == null)
+        {
+            throw new IllegalArgumentException();
+        }
+        List<Kirja> tulokset = new ArrayList<>();
+        for (Kirja kirja : kirjaListaus)
+        {
+            if (kentta == KirjanTiedot.NIMI) {
+                if (kirja.getKirjanNimi().contains(hakusana))
+                {
+                    tulokset.add(kirja);
+                }
+            }
+            if (kentta == KirjanTiedot.KIRJAILIJA) {
+                if (kirja.getKirjailijanNimi().contains(hakusana))
+                {
+                    tulokset.add(kirja);
+                }
+            }
+            if (kentta == KirjanTiedot.JULKAISUVUOSI) {
+                if (("" + kirja.getJulkaisuVuosi()).contains(hakusana))
+                {
+                    tulokset.add(kirja);
+                }
+            }
+        }
+        return tulokset;
+    }
+}
diff --git a/src/main/java/fi/utu/tech/ooj/exercise0/Main.java b/src/main/java/fi/utu/tech/ooj/exercise0/Main.java
index 783d3d0cf21955651017c6638f3eb43bf992a6b9..c9467bc0ea4761eccbb92b1b6401f48de3456734 100644
--- a/src/main/java/fi/utu/tech/ooj/exercise0/Main.java
+++ b/src/main/java/fi/utu/tech/ooj/exercise0/Main.java
@@ -1,9 +1,6 @@
 package fi.utu.tech.ooj.exercise0;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Scanner;
+import java.util.*;
 
 public class Main {
 
@@ -12,9 +9,23 @@ public class Main {
      * Kirjoita tähän tehtävän 4 ratkaisu. Rutiinin signatuuria ei saa muuttaa. Aloita tehtävä poistamalla
      * kommenttimerkit alla olevan rutiinin rungon ympäriltä.
      */
-    /*public static ArrayList<String> kysyTietoja(String[] kysyttavat, String lopetusmerkki) {
-
-    }*/
+    public static ArrayList<String> kysyTietoja(String[] kysyttavat, String lopetusmerkki)
+    {
+        Scanner lukija = new Scanner(System.in);
+        ArrayList<String> vastaukset = new ArrayList<>();
+        for (String kysyttava : kysyttavat)
+        {
+            System.out.println(kysyttava);
+            String vastaus = lukija.nextLine();
+            if (vastaus.equals(lopetusmerkki))
+            {
+                return vastaukset;
+            }
+            vastaukset.add(vastaus);
+            System.out.println();
+        }
+        return vastaukset;
+    }
 
 
     /*
@@ -22,9 +33,30 @@ public class Main {
      * kommenttimerkit alla olevan rutiinin rungon ympäriltä.
      */
 
-    /*public static KirjaKokoelma luoKokoelma(String lopetusmerkki) {
-
-    }*/
+    public static KirjaKokoelma luoKokoelma(String lopetusmerkki)
+    {
+        Scanner lukija = new Scanner(System.in);
+        System.out.print("Kokoelman omistaja: ");
+        String vastaus = lukija.nextLine();
+        KirjaKokoelma kokoelma = new KirjaKokoelma(vastaus);
+
+        while (true)
+        {
+            String[] kysymykset = {"Kirjan nimi: ", "Kirjailijan nimi: ", "Julkaisu vuosi: "};
+            ArrayList<String> tiedot = kysyTietoja(kysymykset, lopetusmerkki);
+            if(tiedot.size() != 3)
+            {
+                break;
+            }
+            String kirjanNimi = tiedot.get(0);
+            String kirjailijanNimi = tiedot.get(1);
+            int julkaisuVuosi = Integer.valueOf(tiedot.get(2));
+
+            kokoelma.lisaaKirja(new Kirja(kirjanNimi, kirjailijanNimi, julkaisuVuosi));
+            System.out.println("Kirja lisätty.");
+        }
+        return kokoelma;
+    }
 
     /**
      * Main class.
@@ -35,16 +67,32 @@ public class Main {
         /*
          * Testin jälkeen alla olevan rivin voi joko kommentoida tai poistaa.
          */
-        System.out.println("*** Harjoitustyöpohja käynnistyy ***");
+        //System.out.println("*** Harjoitustyöpohja käynnistyy ***");
 
         //Luo ensin uusi KirjaKokoelma olio, Käytä tehtävän 5 rutiinia
-
+        KirjaKokoelma kokoelma = luoKokoelma("lopeta");
 
         //Sen jälkeen tulosta kokoelma näyttöön käyttämällä tehtävän 6 rutiinia
-
+        kokoelma.tulostaKokoelma(System.out);
 
         //Lopuksi hae jokin kirja kokoelmasta käyttäen tehtävän 7 rutiinia
         //Tulosta hakutulos. Sen voit tehdä suoraan main-metodissa.
 
+        Scanner lukija = new Scanner(System.in);
+        KirjanTiedot kentta;
+        //Valitaan mihin tietokenttään haku kohdistetaan, oletuksena nimi.
+        System.out.print("Etsi nimen(1), kirjailijan(2) tai julkaisuvuoden(3) perusteella: ");
+        String vastaus = lukija.nextLine();
+        kentta = switch (vastaus) {
+            case "1" -> KirjanTiedot.NIMI;
+            case "2" -> KirjanTiedot.KIRJAILIJA;
+            case "3" -> KirjanTiedot.JULKAISUVUOSI;
+            default -> KirjanTiedot.NIMI;
+        };
+
+        System.out.print("Hakusana: ");
+        String hakusana = lukija.nextLine();
+        System.out.println(kokoelma.etsiKirjat(hakusana, kentta));
+
     }
 }