diff --git a/pom.xml b/pom.xml
index 7364e8090da61d0a9f4ed8057229c6ddf7e5153b..7d9e06ac99d00013d484b6c69abbf4328bf3be5b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -69,5 +69,13 @@
             <artifactId>jakarta.xml.bind-api</artifactId>
             <version>3.0.1</version>
         </dependency>
+        
+        <!-- https://mvnrepository.com/artifact/org.eclipse.persistence/org.eclipse.persistence.moxy -->
+		<dependency>
+		    <groupId>org.eclipse.persistence</groupId>
+		    <artifactId>org.eclipse.persistence.moxy</artifactId>
+		    <version>3.0.2</version>
+		</dependency>
+		        
 	</dependencies>
 </project>
diff --git a/src/main/java/cz/jezek/lab11/Match.java b/src/main/java/cz/jezek/lab11/Match.java
index 5b16674d4baa46f5de28ec230e4f651b230d91f2..5d373ee812888f7f4d9d550031c08ec26c25d8a5 100644
--- a/src/main/java/cz/jezek/lab11/Match.java
+++ b/src/main/java/cz/jezek/lab11/Match.java
@@ -3,18 +3,27 @@ package cz.jezek.lab11;
 import java.io.Serializable;
 import java.util.Objects;
 
+import jakarta.xml.bind.annotation.XmlAttribute;
+import jakarta.xml.bind.annotation.XmlElement;
+
 
 public class Match implements Serializable{
 
 	
 	private static final long serialVersionUID = 1L;
 	
+	@XmlElement
 	private Oponents oponents;
 	
+	@XmlAttribute
 	private int player1Scorel;
 	
+	@XmlAttribute
 	private int player2Scorel;
 
+	public Match() {
+	}
+	
 	public Match(Player player1, int player1Scorel, Player player2, int player2Scorel) {
 		this.oponents = new Oponents(player1, player2);
 		this.player1Scorel = player1Scorel;
diff --git a/src/main/java/cz/jezek/lab11/Oponents.java b/src/main/java/cz/jezek/lab11/Oponents.java
index afc5a8012dcec5f6ac9078f50cb53c8faa5b8074..428893e975f4a6ecef5febba3a5f0253f2b584ab 100644
--- a/src/main/java/cz/jezek/lab11/Oponents.java
+++ b/src/main/java/cz/jezek/lab11/Oponents.java
@@ -3,6 +3,8 @@ package cz.jezek.lab11;
 import java.io.Serializable;
 import java.util.Objects;
 
+import jakarta.xml.bind.annotation.XmlElement;
+
 public class Oponents implements Serializable{
 
 	/**
@@ -10,9 +12,15 @@ public class Oponents implements Serializable{
 	 */
 	private static final long serialVersionUID = 1L;
 	
+	@XmlElement
 	private Player player1;
+	
+	@XmlElement
 	private Player player2;
 
+	public Oponents() {
+	}
+	
 	public Oponents(Player player1, Player player2) {
 		super();
 		this.player1 = player1;
diff --git a/src/main/java/cz/jezek/lab11/Player.java b/src/main/java/cz/jezek/lab11/Player.java
index f7081622ac3a967f4813d7d7037a4fff5a348424..ab7d0e63f6cd717e21282e999abd67e082cd17c2 100644
--- a/src/main/java/cz/jezek/lab11/Player.java
+++ b/src/main/java/cz/jezek/lab11/Player.java
@@ -13,6 +13,9 @@ public class Player implements Serializable{
 				RandomGenarator.selectRandom(RandomGenarator.SURNAMES));
 	}
 
+	public Player() {
+	}
+	
 	public Player(String firstName, String lastName) {
 		super();
 		this.firstName = firstName;
diff --git a/src/main/java/cz/jezek/lab11/StreamMain.java b/src/main/java/cz/jezek/lab11/StreamMain.java
index 494a809bf62e7ed3b20f1a156842e75ca7f7c4b2..7bde04522991733bc5b0085c54c92b115ee2c697 100644
--- a/src/main/java/cz/jezek/lab11/StreamMain.java
+++ b/src/main/java/cz/jezek/lab11/StreamMain.java
@@ -4,23 +4,27 @@ 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.Arrays;
 import java.util.Optional;
 
+import org.eclipse.persistence.jaxb.MarshallerProperties;
+
 import jakarta.xml.bind.JAXBContext;
 import jakarta.xml.bind.JAXBException;
 import jakarta.xml.bind.Marshaller;
+import jakarta.xml.bind.Unmarshaller;
 
 
 
 public class StreamMain {
 
   public static void main(String[] args) {
-    Tournament tournament = loadTournament();
+	System.setProperty("jakarta.xml.bind.JAXBContextFactory", "org.eclipse.persistence.jaxb.JAXBContextFactory");
+    /*Tournament tournament = loadTournament();
     if (tournament == null) {
     	tournament = Tournament.generate();
     }
@@ -29,6 +33,28 @@ public class StreamMain {
 
     saveTournament(tournament);
     printTournamentAsXML(tournament);
+    printTournamentAsJSON(tournament);
+    
+    Tournament tournament2 = loadTournamentFromXML();
+    
+    */
+	Player p1 = new Player("Jonh", "Doe");
+	Player p2 = new Player("Marry", "Jane");
+	
+	Match m = new Match(p1, 0, p2, 0);
+	
+	Tournament t = new Tournament(Arrays.asList(p1,p2), Arrays.asList(m));
+	saveTournament(t);
+	Tournament t2 = loadTournament();
+	
+	System.out.print("p1 == m.oponents.player1  " + 
+			(t2.getPlayers().get(0) == t2.getMatches().get(0).getOponents().getPlayer1()));
+	
+	printTournamentAsXML(t);
+	t2 = loadTournamentFromXML();
+	System.out.print("p1 == m.oponents.player1  " + 
+			(t2.getPlayers().get(0) == t2.getMatches().get(0).getOponents().getPlayer1()));
+	
   }
   
   
@@ -102,10 +128,37 @@ public static Tournament loadTournament() {
 		Marshaller marshaller = context.createMarshaller();
 		marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
 		marshaller.marshal(tournament, System.out);
+		marshaller.marshal(tournament, new File("tournament.xml"));
 	} catch (JAXBException e) {
 		e.printStackTrace();
 	}
   }
   
+  private static void printTournamentAsJSON(Tournament tournament) {
+		try {
+			JAXBContext context = JAXBContext.newInstance(Tournament.class);
+			Marshaller marshaller = context.createMarshaller();
+			marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+			marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
+			marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, true);
+			marshaller.marshal(tournament, System.out);
+		} catch (JAXBException e) {
+			e.printStackTrace();
+		}
+	  }
+
+
+
+private static Tournament loadTournamentFromXML() {
+	try {
+		JAXBContext context = JAXBContext.newInstance(Tournament.class);
+		Unmarshaller unmarshaller= context.createUnmarshaller();
+		return (Tournament) unmarshaller.unmarshal(new File("tournament.xml"));
+	} catch (JAXBException e) {
+		e.printStackTrace();
+	}
+	return null;
+}
+  
   
  }
diff --git a/src/main/java/cz/jezek/lab11/Tournament.java b/src/main/java/cz/jezek/lab11/Tournament.java
index 66d914832234d8381106ccd0e89bd9bcb29a97d0..d213684719a5407f23587608d26f06e69eda4f9d 100644
--- a/src/main/java/cz/jezek/lab11/Tournament.java
+++ b/src/main/java/cz/jezek/lab11/Tournament.java
@@ -8,6 +8,9 @@ import java.util.Random;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import jakarta.xml.bind.annotation.XmlAttribute;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlElementWrapper;
 import jakarta.xml.bind.annotation.XmlRootElement;
 
 
@@ -17,12 +20,15 @@ public class Tournament implements Serializable{
 
 
   private static final long serialVersionUID = 0L;
- 
+  
+  @XmlElement(name = "player")
+  @XmlElementWrapper(name = "players")
   private List<Player> players;
+ 
+  @XmlElement(name = "match")
+  @XmlElementWrapper(name = "matches")
   private List<Match> matches;
-
  
-  
   private String name = "turnaj";
   
   private static Random rnd = new Random();
@@ -43,7 +49,7 @@ public class Tournament implements Serializable{
     List<Match> matches = 
     		Stream.generate(() -> generateRandomMatch(players))
     			.filter(m -> m.getOponents().getPlayer1() != m.getOponents().getPlayer2())
-    			.limit(250)
+    			.limit(30)
     			.collect(Collectors.toList());
     
 
@@ -59,14 +65,6 @@ public class Tournament implements Serializable{
   }
   
  
-  public void setName(String name) {
-	this.name = name;
-  }
-  
-  public String getName() {
-	return name;
-  }
-
   public List<Player> getPlayers() {
     return players;
   }
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index 59a012f92744677dff3b9b6d973989626809dfe1..6e380307557e144ba6b7a90f124a5afbbe2f0c7b 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -2,6 +2,8 @@ module cz.jezek.lab10 {
     requires transitive javafx.controls;
     requires javafx.fxml;
     requires jakarta.xml.bind;
+    requires java.sql;
+    requires org.eclipse.persistence.moxy;
     opens cz.jezek.lab11;
     exports cz.jezek.lab11;
 }
\ No newline at end of file
diff --git a/tournament.obj b/tournament.obj
new file mode 100644
index 0000000000000000000000000000000000000000..d71f9ba749edf52cb9f33e56af3abb2a87930339
Binary files /dev/null and b/tournament.obj differ
diff --git a/tournament.xml b/tournament.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3bda513b2e8cc951ffca044183dda80df5b1df57
--- /dev/null
+++ b/tournament.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tournament>
+   <players>
+      <player>
+         <firstName>Jonh</firstName>
+         <lastName>Doe</lastName>
+      </player>
+      <player>
+         <firstName>Marry</firstName>
+         <lastName>Jane</lastName>
+      </player>
+   </players>
+   <matches>
+      <match player1Scorel="0" player2Scorel="0">
+         <oponents>
+            <player1>
+               <firstName>Jonh</firstName>
+               <lastName>Doe</lastName>
+            </player1>
+            <player2>
+               <firstName>Marry</firstName>
+               <lastName>Jane</lastName>
+            </player2>
+         </oponents>
+      </match>
+   </matches>
+</tournament>