diff --git a/pom.xml b/pom.xml
index a19a81462b419ce003d916981334eb286d52be6c..921eecb960b21d6cd7a1f5f7018a398de20831f3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,5 +52,13 @@
 			<version>5.5.2</version>
 			<scope>test</scope>
 		</dependency>
+		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
+		<dependency>
+		    <groupId>org.projectlombok</groupId>
+		    <artifactId>lombok</artifactId>
+		    <version>1.18.18</version>
+		    <scope>provided</scope>
+		</dependency>
+				
 	</dependencies>
 </project>
diff --git a/src/main/java/koz01/java2/lab04/ColorPoint.java b/src/main/java/koz01/java2/lab04/ColorPoint.java
index d4990c7c5adf923380c0f4fe0b486e4fbd12a936..67cf183aacee2ebf39556012c5dddadc0bd09d55 100644
--- a/src/main/java/koz01/java2/lab04/ColorPoint.java
+++ b/src/main/java/koz01/java2/lab04/ColorPoint.java
@@ -11,4 +11,17 @@ public class ColorPoint extends Point {
 		this.color = color;
 	}
 
+	@Override
+	public boolean equals(Object obj) {
+		if (obj instanceof ColorPoint) {
+			ColorPoint cp = (ColorPoint) obj;
+			return super.equals(obj) && cp.color == color;
+		}
+		return false;
+	}
+	
+	@Override
+	protected boolean canEqual(Point point) {
+		return point instanceof ColorPoint;
+	}
 }
diff --git a/src/main/java/koz01/java2/lab04/ColorPoint2.java b/src/main/java/koz01/java2/lab04/ColorPoint2.java
new file mode 100644
index 0000000000000000000000000000000000000000..6b975bddd60b9f06e935d5cc7ddec129a8ed200c
--- /dev/null
+++ b/src/main/java/koz01/java2/lab04/ColorPoint2.java
@@ -0,0 +1,16 @@
+package koz01.java2.lab04;
+
+import javafx.scene.paint.Color;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+public class ColorPoint2 extends Point2 {
+
+	private Color color;
+	
+	public ColorPoint2(double x, double y, Color color) {
+		super(x, y);
+		this.color = color;
+	}
+
+}
diff --git a/src/main/java/koz01/java2/lab04/MainNutrition.java b/src/main/java/koz01/java2/lab04/MainNutrition.java
new file mode 100644
index 0000000000000000000000000000000000000000..2be160c241e8f60f2bfa1f39b7b64dcfc9246c26
--- /dev/null
+++ b/src/main/java/koz01/java2/lab04/MainNutrition.java
@@ -0,0 +1,17 @@
+package koz01.java2.lab04;
+
+import koz01.java2.lab04.NutritionFacts.Builder;
+
+public class MainNutrition {
+
+	public static void main(String[] args) {
+		NutritionFacts nf = new Builder(10, 20)
+							  .calories(25)
+							  .carbohydrate(15).build();
+		
+		
+		NutritionFacts2 nf2 = NutritionFacts2.builder(10, 20).calories(20).carbohydrate(20).build();
+		
+	}
+
+}
diff --git a/src/main/java/koz01/java2/lab04/NutritionFacts.java b/src/main/java/koz01/java2/lab04/NutritionFacts.java
index b15fd288bbc18a8ce1fa6e6eb9fad0de80d6cf28..1d5ade83f10049e8a4bc8c75d79fa77595cbdb02 100644
--- a/src/main/java/koz01/java2/lab04/NutritionFacts.java
+++ b/src/main/java/koz01/java2/lab04/NutritionFacts.java
@@ -1,30 +1,18 @@
 package koz01.java2.lab04;
 
 public class NutritionFacts {
+	//mandatory
 	private final int servingSize;// (mL)required
 	private final int servings;// (per container) required
+	
+	
 	private final int calories;// (per serving)optional
 	private final int fat;// (g/serving)optional
 	private final int sodium;// (mg/serving)optional
 	private final int carbohydrate; // (g/serving) optional
 
-	public NutritionFacts(int servingSize, int servings) {
-		this(servingSize, servings, 0);
-	}
-
-	public NutritionFacts(int servingSize, int servings, int calories) {
-		this(servingSize, servings, calories, 0);
-	}
-
-	public NutritionFacts(int servingSize, int servings, int calories, int fat) {
-		this(servingSize, servings, calories, fat, 0);
-	}
-
-	public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium) {
-		this(servingSize, servings, calories, fat, sodium, 0);
-	}
-
-	public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium, int carbohydrate) {
+	
+	private NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium, int carbohydrate) {
 		this.servingSize = servingSize;
 		this.servings = servings;
 		this.calories = calories;
@@ -32,4 +20,45 @@ public class NutritionFacts {
 		this.sodium = sodium;
 		this.carbohydrate = carbohydrate;
 	}
+	
+	public static class Builder {
+		//mandatory
+		private final int servingSize;// (mL)required
+		private final int servings;// (per container) required
+		
+		//optional
+		private int calories = 0;// (per serving)optional
+		private int fat = 0;// (g/serving)optional
+		private int sodium = 0;// (mg/serving)optional
+		private int carbohydrate = 0; // (g/serving) optional
+		
+		public Builder(int servingSize, int servings) {
+			this.servingSize = servingSize;
+			this.servings = servings;
+		}
+		
+		public Builder calories(int calories) {
+			this.calories = calories;
+			return this;
+		}
+		
+		public Builder fat(int fat) {
+			this.fat = fat;
+			return this;
+		}
+		
+		public Builder sodium(int sodium) {
+			this.sodium = sodium;
+			return this;
+		}
+		
+		public Builder carbohydrate(int carbohydrate) {
+			this.carbohydrate = carbohydrate;
+			return this;
+		}
+		
+		public NutritionFacts build() {
+			return new NutritionFacts(servingSize, servings, calories, fat, sodium, carbohydrate);
+		}
+	}
 }
diff --git a/src/main/java/koz01/java2/lab04/NutritionFacts2.java b/src/main/java/koz01/java2/lab04/NutritionFacts2.java
new file mode 100644
index 0000000000000000000000000000000000000000..33c264b6566cb73af96c7f37a10bdd44f6495eef
--- /dev/null
+++ b/src/main/java/koz01/java2/lab04/NutritionFacts2.java
@@ -0,0 +1,23 @@
+package koz01.java2.lab04;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+
+@Builder()
+@AllArgsConstructor(access =  AccessLevel.PRIVATE)
+public class NutritionFacts2 {
+	//mandatory
+	private final int servingSize;// (mL)required
+	private final int servings;// (per container) required
+	
+	
+	private final int calories;// (per serving)optional
+	private final int fat;// (g/serving)optional
+	private final int sodium;// (mg/serving)optional
+	private final int carbohydrate; // (g/serving) optional
+
+	public static NutritionFacts2Builder builder(int servingSize, int servings) {
+		return new NutritionFacts2Builder().servingSize(servingSize).servings(servings);
+	}
+}
diff --git a/src/main/java/koz01/java2/lab04/Point.java b/src/main/java/koz01/java2/lab04/Point.java
index 233f40320e3a1e2c42199c33a2c40085637b346b..840ed8c0e03924e2b5a69db60bcfba0e3a50316f 100644
--- a/src/main/java/koz01/java2/lab04/Point.java
+++ b/src/main/java/koz01/java2/lab04/Point.java
@@ -3,7 +3,7 @@ package koz01.java2.lab04;
 public class Point {
 
 	private double x;
-	
+
 	private double y;
 
 	public Point(double x, double y) {
@@ -11,5 +11,17 @@ public class Point {
 		this.y = y;
 	}
 
+	@Override
+	public boolean equals(Object obj) {
+		if (obj instanceof Point) {
+			Point point = (Point) obj;
+			return point.canEqual(this) && x == point.x && y == point.y;
+		}
+		return false;
+	}
+
+	protected boolean canEqual(Point point) {
+		return true;
+	}
 	
 }
diff --git a/src/main/java/koz01/java2/lab04/Point2.java b/src/main/java/koz01/java2/lab04/Point2.java
new file mode 100644
index 0000000000000000000000000000000000000000..a6a0735c30ad768c986879312158f0d14bc650f6
--- /dev/null
+++ b/src/main/java/koz01/java2/lab04/Point2.java
@@ -0,0 +1,18 @@
+package koz01.java2.lab04;
+
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode
+public class Point2 {
+
+	private double x;
+
+	private double y;
+
+	public Point2(double x, double y) {
+		this.x = x;
+		this.y = y;
+	}
+
+	
+}
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index f15491da35b42ca1b0e2cc2aa4efe058da458e6d..d7bedbc9743044ba581850f517618123e99edfe3 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -3,4 +3,5 @@ module koz01.java2.lab04 {
     requires javafx.fxml;
     opens koz01.java2.lab04 to javafx.fxml;
     exports koz01.java2.lab04;
+    requires lombok;
 }
\ No newline at end of file