diff --git a/src/main/java/cz/jezek/lab11/Match.java b/src/main/java/cz/jezek/lab11/Match.java
index 00f2851654a1d6d954cc57bb12c10c81111d72bd..5b16674d4baa46f5de28ec230e4f651b230d91f2 100644
--- a/src/main/java/cz/jezek/lab11/Match.java
+++ b/src/main/java/cz/jezek/lab11/Match.java
@@ -1,11 +1,18 @@
 package cz.jezek.lab11;
 
+import java.io.Serializable;
 import java.util.Objects;
 
-public class Match {
 
+public class Match implements Serializable{
+
+	
+	private static final long serialVersionUID = 1L;
+	
 	private Oponents oponents;
+	
 	private int player1Scorel;
+	
 	private int player2Scorel;
 
 	public Match(Player player1, int player1Scorel, Player player2, int player2Scorel) {
@@ -22,7 +29,7 @@ public class Match {
 		}
 		throw new IllegalArgumentException("Player is not participant of this match.");
 	}
-
+	
 	public Oponents getOponents() {
 		return oponents;
 	}
@@ -34,6 +41,10 @@ public class Match {
 	public int getPlayer2Scorel() {
 		return player2Scorel;
 	}
+	
+	public int getTotalScore() {
+		return getPlayer1Scorel() + getPlayer2Scorel();
+	}
 
 	@Override
 	public String toString() {
diff --git a/src/main/java/cz/jezek/lab11/Oponents.java b/src/main/java/cz/jezek/lab11/Oponents.java
index 1de0f68f0823e939f4bde09bcc3b2f4ee84697cc..afc5a8012dcec5f6ac9078f50cb53c8faa5b8074 100644
--- a/src/main/java/cz/jezek/lab11/Oponents.java
+++ b/src/main/java/cz/jezek/lab11/Oponents.java
@@ -1,9 +1,15 @@
 package cz.jezek.lab11;
 
+import java.io.Serializable;
 import java.util.Objects;
 
-public class Oponents {
+public class Oponents implements Serializable{
 
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
 	private Player player1;
 	private Player player2;
 
diff --git a/src/main/java/cz/jezek/lab11/Player.java b/src/main/java/cz/jezek/lab11/Player.java
index e31b539bfc6ff9556d2fee831c4d21d0cfcc2ee9..f7081622ac3a967f4813d7d7037a4fff5a348424 100644
--- a/src/main/java/cz/jezek/lab11/Player.java
+++ b/src/main/java/cz/jezek/lab11/Player.java
@@ -1,7 +1,10 @@
 package cz.jezek.lab11;
 
-public class Player {
+import java.io.Serializable;
 
+public class Player implements Serializable{
+
+	private static final long serialVersionUID = 1L;
 	private String firstName;
 	private String lastName;
 
diff --git a/src/main/java/cz/jezek/lab11/StreamMain.java b/src/main/java/cz/jezek/lab11/StreamMain.java
index ea4babca284042d2a29e402e622abee1e01f3158..621ce3af19cc555892e975ddade5db2fa2dae470 100644
--- a/src/main/java/cz/jezek/lab11/StreamMain.java
+++ b/src/main/java/cz/jezek/lab11/StreamMain.java
@@ -1,15 +1,36 @@
 package cz.jezek.lab11;
 
+import static java.util.Comparator.comparingInt;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Optional;
+
+import jakarta.xml.bind.JAXBContext;
+import jakarta.xml.bind.JAXBException;
+import jakarta.xml.bind.Marshaller;
+
+
+
 public class StreamMain {
 
   public static void main(String[] args) {
-    Tournament tournament = Tournament.generate();
+    Tournament tournament = loadTournament();
+    if (tournament == null) {
+    	tournament = Tournament.generate();
+    }
 
     printStatAboutTournament(tournament);
 
     saveTournament(tournament);
-    loadTournament();
-  }
+ }
+  
+  
 
   public static void printStatAboutTournament(Tournament tournament) {
     System.out.println(tournament);
@@ -18,9 +39,15 @@ public class StreamMain {
     System.out.println(player);
     System.out.print("Number of matches: ");
     //TODO 3.a Show the number of matches played by a given player (using Streams)
+    System.out.println(tournament.getMatches().stream().filter(m -> m.getOponents().contains(player)).count());
     
     System.out.print("Goals scored: ");
     //TODO 3.b Show the number of goals scored by a given player (help Streams)
+    System.out.println(tournament.getMatches().stream()
+    										  .filter(m -> m.getOponents().contains(player))
+    										  .mapToInt( m -> m.getScoreForPlayer(player))
+    										  .sum());
+    
 
     Oponents oponents = new Oponents(tournament.getRandomPlayer(),
         tournament.getRandomPlayer());
@@ -28,17 +55,42 @@ public class StreamMain {
     
     System.out.print("Matches: ");
     //TODO 4.a List the matches played between the given players (using the stream)
+    tournament.getMatches().stream().filter(m -> m.getOponents().equals(oponents)).forEach(System.out::println);
+    
     System.out.print("Number of mathes: ");
     //TODO 4.b Print the number of matches played between the given players (using the stream)
+    
+    
     System.out.print("Match with the largest total number:");
     //TODO 4.c Show match with the largest total number (sum of both players) scored goals between relevant players (help Streams)
+    Optional<Match> maxMatch =
+    tournament.getMatches()
+    		  .stream()
+    		  .filter(m -> m.getOponents().equals(oponents))
+    		  //.reduce((a,b) -> a.getPlayer1Scorel() + a.getPlayer2Scorel() < b.getPlayer1Scorel() + b.getPlayer2Scorel() ? b : a);
+    		  .max(comparingInt(Match::getTotalScore));
+    System.out.println(maxMatch.map(Object::toString).orElse("N/A"));
   }
 
-  public static void loadTournament() {
-    //TODO 5.b Load a serialized tournament from a file
+  
+
+public static Tournament loadTournament() {
+    try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("tournament.obj"))) {
+    	return (Tournament) ois.readObject();
+    } catch (IOException | ClassNotFoundException e) {
+		e.printStackTrace();
+	}
+    return null;
+    
   }
 
   public static void saveTournament(Tournament tournament) {
     //TODO 5.a Save the tournament to a file using object serialization.
+	try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("tournament.obj"))) {
+		oos.writeObject(tournament);
+	} catch ( IOException e) {
+		e.printStackTrace();
+	}
   }
-}
+  
+ }
diff --git a/src/main/java/cz/jezek/lab11/Tournament.java b/src/main/java/cz/jezek/lab11/Tournament.java
index 3f22efc1ae9cdb5c4bf0d16abb112baf619cdc72..20042b1cde429a13e09c570f74a61c4145614ba5 100644
--- a/src/main/java/cz/jezek/lab11/Tournament.java
+++ b/src/main/java/cz/jezek/lab11/Tournament.java
@@ -1,28 +1,67 @@
 package cz.jezek.lab11;
 
-import java.util.Collections;
+import static cz.jezek.lab11.RandomGenarator.selectRandom;
+
+import java.io.Serializable;
 import java.util.List;
+import java.util.Random;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
 
-public class Tournament {
+public class Tournament implements Serializable{
 
+
+  private static final long serialVersionUID = 0L;
+ 
   private List<Player> players;
   private List<Match> matches;
 
+ 
+  
+  private String name = "turnaj";
+  
+  private static Random rnd = new Random();
+  
+  public static Match generateRandomMatch(List<Player> player) {
+	   return new Match(selectRandom(player), rnd.nextInt(11), selectRandom(player), rnd.nextInt(11));
+  }
+  
   public static Tournament generate() {
 	// TODO 1.a Generate a list of 10 random players using the stream and then filter so that it does not contain players with the same name
-	List<Player> players = Collections.emptyList();
+	List<Player> players = 
+			Stream.generate(Player::generateRandom)
+				  .distinct()
+				  .limit(10)
+				  .collect(Collectors.toList());
 
     // TODO 1.b Use the stream to generate a list of 50 matches between random players (from the list of players) with a random result. Make sure the player does not play with himself.
-    List<Match> matches = Collections.emptyList();
-
+    List<Match> matches = 
+    		Stream.generate(() -> generateRandomMatch(players))
+    			.filter(m -> m.getOponents().getPlayer1() != m.getOponents().getPlayer2())
+    			.limit(250)
+    			.collect(Collectors.toList());
+    
 
     return new Tournament(players, matches);
   }
 
+  public Tournament() {
+  }
+  
   public Tournament(List<Player> players, List<Match> matches) {
     this.players = players;
     this.matches = matches;
   }
+  
+ 
+  public void setName(String name) {
+	this.name = name;
+  }
+  
+  public String getName() {
+	return name;
+  }
 
   public List<Player> getPlayers() {
     return players;
@@ -45,11 +84,11 @@ public class Tournament {
 
     builder.append("\n\nPlayers:\n");
     // TODO 2.a Use the stream to add a listing of all players to the builder. Individual players are separated by a "\ n" character
-    builder.append(/* list of all players */"");
+    builder.append(players.stream().map(Object::toString).collect(Collectors.joining("\n")));
 
     builder.append("\n\nMatches:\n");
     // TODO 2.b Use the stream to add a listing of all entries to the builder. Individual matches are separated by a "\ n" character
-    builder.append(/* list of all matches */"");
+    builder.append(matches.stream().map(Object::toString).collect(Collectors.joining("\n")));
 
     return builder.toString();
   }
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index edc025f5dc65bfa61c4deb40bcd470bf1e29c538..59a012f92744677dff3b9b6d973989626809dfe1 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -1,6 +1,7 @@
 module cz.jezek.lab10 {
     requires transitive javafx.controls;
     requires javafx.fxml;
-    opens cz.jezek.lab11 to javafx.fxml;
+    requires jakarta.xml.bind;
+    opens cz.jezek.lab11;
     exports cz.jezek.lab11;
 }
\ No newline at end of file