diff --git a/Ohj2HT/src/Luokat/Reissut.java b/Ohj2HT/src/Luokat/Reissut.java
index 1d005ad1a96906e312be7f5ae028ae5ed25ef21a..6ae9f98b7482d4d008c831540bf269cbf9a0c55d 100644
--- a/Ohj2HT/src/Luokat/Reissut.java
+++ b/Ohj2HT/src/Luokat/Reissut.java
@@ -1,5 +1,7 @@
 package Luokat;
 
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.Iterator;
@@ -66,20 +68,45 @@ public class Reissut {
 	}
 
 	/**
-	 * etsii reissun päivämäärän perusteella
+	 * etsii reissun päivämäärän perusteella, jokerina toimii * merkki
 	 * @param paivamaara mikä päivä
-	 * @return em. päivän reissun
+	 * @return listan reissuista joilla on haluttu päivämäärä
 	 */
 	
-	public static Reissu etsi(String paivamaara, Reissut reissut) {
-		
-		for (Reissu t : reissut.getReissut()) {
-			if (t.getPaivamaara().equals(paivamaara)) {
-				return t;
-			}
-		}
-		return null;
-	}
+	public static List<Reissu> etsi(String paivamaara, Reissut reissut) {
+        List<Reissu> re = new ArrayList<>();
+          
+        paivamaara = paivamaara.replace('.', '-').replace('/', '-').replace(',', '-').replace(' ', '-').trim();
+        String[] osat = paivamaara.split("-");
+        
+        String paiva = "*", kuukausi = "*", vuosi = "*";
+
+        if (osat.length > 0) paiva = osat[0];
+        if (osat.length > 1) kuukausi = osat[1];
+        if (osat.length > 2) vuosi = osat[2];
+
+        if (!paiva.equals("*") && paiva.length() == 1) paiva = "0" + paiva;
+        if (!kuukausi.equals("*") && kuukausi.length() == 1) kuukausi = "0" + kuukausi;
+
+        
+        for (Reissu t : reissut.getReissut()) {
+            LocalDate date = t.getPaivamaara(); 
+
+            String reissuPaiva = String.format("%02d", date.getDayOfMonth());
+            String reissuKuukausi = String.format("%02d", date.getMonthValue());
+            String reissuVuosi = String.valueOf(date.getYear());
+
+            
+            if (!paiva.equals("*") && !paiva.equals(reissuPaiva)) continue;
+            if (!kuukausi.equals("*") && !kuukausi.equals(reissuKuukausi)) continue;
+            if (!vuosi.equals("*") && !vuosi.equals(reissuVuosi)) continue;
+
+            re.add(t); 
+        }
+
+        return re;
+    }
+	
 	
 	public void sort() {
 		reissut.sort(Comparator.comparing(Reissu::getPaivamaara).reversed());
@@ -136,32 +163,38 @@ public class Reissut {
 	*    
 	*    test.removeReissu();
 	*     test.getReissut().size() === 3;
+	*     
 	* </pre>
 	*/
-	    // Testi
 
+	public static void main(String[] args) {
+		 	Saaliit saaliita = new Saaliit(8);	
+		    Reissut test = new Reissut(saaliita); 
+		    test.getReissut().clear();
+		    
+		    Reissu t0 = new Reissu(Reissu.sToDate("1.12.2323"), "ka", "pilvi", new ArrayList<>(), false); 
+		    Reissu t1 = new Reissu(Reissu.sToDate("12.12.2023"), "jk", "sade", new ArrayList<>(), false); 
+		    Reissu t2 = new Reissu(Reissu.sToDate("12.12.1223"), "sk", "aurinko", new ArrayList<>(), false); 
+		    Reissu t3 = new Reissu(Reissu.sToDate("15.11.2024"), "ka", "pilvi", new ArrayList<>(), false); 
+		    test.lisaaListaan(t1); 
+		    test.lisaaListaan(t2); 
+		    test.lisaaListaan(t3); 
+		    test.lisaaListaan(t0);
+		    test.getReissut().size();
+		    t1.poistetaan();
+		   
+		    test.removeReissu();
+		     test.getReissut().size();
+		    
+				List<Reissu> a = new ArrayList<>();
+				a = etsi("*,*,1223", test);
+				a.size();
+				System.out.println(a);
+	}
+	
 	//todo:
 	//tallenna()
-	    
 
-	    // kesken...
-	public int[] paivamaaraToInt(String pm) {
-		String[] osat = pm.split(".");
-		if (osat.length < 3) {
-		return null;
-		}
-		int[] pv = new int[3];
-		
-		pv[0] = Integer.parseInt(osat[0]);
-		pv[1] = Integer.parseInt(osat[1]);
-		pv[2] = Integer.parseInt(osat[2]);
-		return pv;
-	
-	}
-//todo:
-// tallenna()
-	
-	
 }
 
 
diff --git a/Ohj2HT/src/Luokat/test/ReissutTest.java b/Ohj2HT/src/Luokat/test/ReissutTest.java
index a2b7ed780f2abc3007cbd847d149fd958688ca09..d1beb35aaa93882468304d3e5c588357cc111595 100644
--- a/Ohj2HT/src/Luokat/test/ReissutTest.java
+++ b/Ohj2HT/src/Luokat/test/ReissutTest.java
@@ -11,12 +11,12 @@ import Luokat.Tulkki;
 import Luokat.Saaliit;
 import static org.junit.Assert.*;
 import org.junit.*;
-import Luokat.*;
+import static Luokat.Reissut.*;
 // Generated by ComTest END
 
 /**
  * Test class made by ComTest
- * @version 2025.03.28 08:58:48 // Generated by ComTest
+ * @version 2025.03.31 16:23:35 // Generated by ComTest
  *
  */
 @SuppressWarnings({ "all" })
@@ -25,9 +25,9 @@ public class ReissutTest {
 
 
   // Generated by ComTest BEGIN
-  /** testPaivamaaraToInt108 */
+  /** testMain131 */
   @Test
-  public void testPaivamaaraToInt108() {    // Reissut: 108
+  public void testMain131() {    // Reissut: 131
     Saaliit saaliita = new Saaliit(8); 
     Reissut test = new Reissut(saaliita); 
     test.getReissut().clear(); 
@@ -39,9 +39,12 @@ public class ReissutTest {
     test.lisaaListaan(t2); 
     test.lisaaListaan(t3); 
     test.lisaaListaan(t0); 
-    assertEquals("From: Reissut line: 134", 4, test.getReissut().size()); 
+    assertEquals("From: Reissut line: 157", 4, test.getReissut().size()); 
     t1.poistetaan(); 
     test.removeReissu(); 
-    assertEquals("From: Reissut line: 138", 3, test.getReissut().size()); 
+    assertEquals("From: Reissut line: 161", 3, test.getReissut().size()); 
+    List<Reissu> a = new ArrayList<>(); 
+    a = etsi("*,*,1223", test); 
+    assertEquals("From: Reissut line: 165", 1, a.size()); 
   } // Generated by ComTest END
 }
\ No newline at end of file
diff --git a/Ohj2HT/src/fxKalenteri/KalenteriGUIController.java b/Ohj2HT/src/fxKalenteri/KalenteriGUIController.java
index 857c9bef3f63db99f1363e245723505e69d97038..bab86739766334a77b7dfb4570d4d06e94465e6f 100644
--- a/Ohj2HT/src/fxKalenteri/KalenteriGUIController.java
+++ b/Ohj2HT/src/fxKalenteri/KalenteriGUIController.java
@@ -1,5 +1,4 @@
 package fxKalenteri;
-import java.awt.*;
 
 import fi.jyu.mit.fxgui.*;
 import javafx.application.Platform;
@@ -7,10 +6,14 @@ import javafx.beans.property.SimpleIntegerProperty;
 import javafx.beans.property.SimpleStringProperty;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
+import javafx.event.ActionEvent;
 import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
 import javafx.scene.control.Label;
+import javafx.scene.control.TextField;
+import javafx.scene.input.KeyEvent;
 
+import java.awt.Desktop;
 import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -39,6 +42,9 @@ public class KalenteriGUIController implements Initializable {
     private int aluksi;
     private boolean onkoPoistettu = false;
     private ObservableList<StringAndObject<String>> lista;
+    
+    @FXML
+    private TextField PvmHaku;
 
     @FXML private void handleTallenna() {
         tallenna();
@@ -55,11 +61,42 @@ public class KalenteriGUIController implements Initializable {
     }
 
     @FXML private void handleNollaa(){nollaaKartta();}
+    
+
+    @FXML
+    private void handleEtsi(ActionEvent event) {
+    	haku();
+    }
 
 
     /*
       * <------------------------------ TÄSTÄ ETEENPÄIN EI ENÄÄN HANDLEREITA ------------------------------>
      */
+    
+    /**
+     * hakee ja kirjoittaa reissuja 
+     * todo: paikan mukaan kanssa.
+     */
+    
+    public void haku() {
+    	String haluttuPvm = PvmHaku.getText();
+    	if (haluttuPvm.isEmpty()) {
+    		kirjoitaReissut();
+    		return;
+    	}
+    	
+    	List<Reissu> halutut = Reissut.etsi(haluttuPvm, kalenteri.getReissut());
+    	
+    	 if (halutut != null) {
+             reissutLista.getItems().clear();
+             for (Reissu reissu : halutut) {
+                 reissutLista.add(reissu.getPvmString() + " " + reissu.getSijainti(),reissu);
+             }
+         }
+    	
+    }
+    
+    
 
     /**
      * Nollaa kartan
diff --git a/Ohj2HT/src/fxKalenteri/KalenteriGUIView.fxml b/Ohj2HT/src/fxKalenteri/KalenteriGUIView.fxml
index e2c99b7ccbad2d862a41de383779e8bd99ef66ca..cdd9107d523229eeddb3908b133f8304f134beb1 100644
--- a/Ohj2HT/src/fxKalenteri/KalenteriGUIView.fxml
+++ b/Ohj2HT/src/fxKalenteri/KalenteriGUIView.fxml
@@ -51,15 +51,34 @@
    </top>
    <left>
       <BorderPane prefHeight="320.0" prefWidth="190.0" BorderPane.alignment="CENTER">
-         <top>
-            <Label prefHeight="24.0" prefWidth="38.0" text="Reissut" BorderPane.alignment="CENTER" />
-         </top>
          <center>
             <ListChooser fx:id="reissutLista" onMouseClicked="#handleReissu" prefHeight="302.0" prefWidth="199.0" rivit="" BorderPane.alignment="CENTER" />
          </center>
          <bottom>
             <Button mnemonicParsing="false" onAction="#handleLisaaReissu" text="Lisää Reissu" BorderPane.alignment="CENTER" />
          </bottom>
+         <top>
+            <GridPane prefHeight="30.0" prefWidth="168.0" BorderPane.alignment="CENTER">
+              <columnConstraints>
+                <ColumnConstraints hgrow="SOMETIMES" maxWidth="91.0" minWidth="10.0" prefWidth="79.0" />
+                <ColumnConstraints hgrow="SOMETIMES" maxWidth="123.0" minWidth="10.0" prefWidth="111.0" />
+              </columnConstraints>
+              <rowConstraints>
+                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
+              </rowConstraints>
+               <children>
+                  <Label text="Hae reissu: ">
+                     <GridPane.margin>
+                        <Insets />
+                     </GridPane.margin>
+                     <padding>
+                        <Insets left="10.0" />
+                     </padding>
+                  </Label>
+                  <TextField fx:id="PvmHaku" onAction="#handleEtsi" promptText="PVM" GridPane.columnIndex="1" />
+               </children>
+            </GridPane>
+         </top>
       </BorderPane>
    </left>
    <center>