diff --git a/src/main/java/shape/AbstractShape.java b/src/main/java/shape/AbstractShape.java
index 8cd7b1d187193eb5193a24441b1bd57ab5734b41..4a711681ca81eb1f9f07ef1eec33c65763b7f055 100644
--- a/src/main/java/shape/AbstractShape.java
+++ b/src/main/java/shape/AbstractShape.java
@@ -3,23 +3,28 @@ package shape;
 import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
 
+import java.util.ArrayList;
 import java.util.List;
 
 public abstract class AbstractShape implements Shape {
     private List<Point2D> points;
+
+    public AbstractShape(){
+        this.points = new ArrayList<>();
+    }
     @Override
     public int pointsCount() {
-        return points.size();
+        return this.points.size();
     }
 
     @Override
     public Point2D point(int index) {
-        return points.get(index);
+        return this.points.get(index);
     }
 
     @Override
     abstract public void draw(GraphicsContext context) ;
     public void addPoints(List<Point2D> points) {
-         points.addAll(points);
+         this.points.addAll(points);
     }
 }
diff --git a/src/main/java/shape/App.java b/src/main/java/shape/App.java
index 1a519e1401fe032f06aeee35967a27e48ca362fe..e019cb7d3fae1e5f06830975a686bb4110969818 100644
--- a/src/main/java/shape/App.java
+++ b/src/main/java/shape/App.java
@@ -10,6 +10,8 @@ import javafx.scene.paint.Color;
 import javafx.scene.paint.Paint;
 import javafx.stage.Stage;
 
+import java.util.ArrayList;
+import java.util.List;
 
 
 public class App extends Application {
@@ -26,7 +28,13 @@ public class App extends Application {
         ShapeContainer shapeContainer = new ShapeContainer();
         graphicsContext.setFill(Color.AQUAMARINE);
         graphicsContext.fillOval(10,10,10,10);
-        shapeContainer.addShape(new Rectangle(Color.BLUE,new Point2D(10,10), new Point2D(40,40)));
+        shapeContainer.addShape(new Rectangle(Color.BLUE,new Point2D(50,50), new Point2D(100,100)));
+        List<Point2D> points = new ArrayList<>();
+        points.add(new Point2D(20,20));
+        points.add(new Point2D(30,30));
+        //points.add(new Point2D(80,80));
+
+        shapeContainer.addShape(new Polygon(Color.BLACK,points));
         shapeContainer.draw(graphicsContext);
         root.getChildren().add(canvas);
         primaryStage.setScene(new Scene(root));
diff --git a/src/main/java/shape/BorderDecorator.java b/src/main/java/shape/BorderDecorator.java
index 27a54e21d5a3e99fb83ffe9cfd89f993e52dc1d7..e96987dd829a51081d6bff3c7739a84146d58386 100644
--- a/src/main/java/shape/BorderDecorator.java
+++ b/src/main/java/shape/BorderDecorator.java
@@ -19,5 +19,11 @@ public class BorderDecorator extends Decorator{
     @Override
     protected void drawDecoration(GraphicsContext graphicsContext) {
         List<Point2D> list = new ArrayList<>();
+        for(int index = 0 ; index<pointsCount() ; index++){
+            list.add(point(index));
+        }
+        for(Point2D point : list){
+            graphicsContext.strokeOval(point.getX(),point.getY(),radius,radius);
+        }
     }
 }
diff --git a/src/main/java/shape/CenterDecorator.java b/src/main/java/shape/CenterDecorator.java
new file mode 100644
index 0000000000000000000000000000000000000000..dbd3ecf9d1f01ee788940dd7a729f93a5ff0f2bc
--- /dev/null
+++ b/src/main/java/shape/CenterDecorator.java
@@ -0,0 +1,18 @@
+package shape;
+
+import javafx.scene.canvas.GraphicsContext;
+
+public class CenterDecorator extends Decorator {
+
+    double radius;
+
+    public CenterDecorator(Shape decoratedShape, double radius) {
+        super(decoratedShape);
+        this.radius = radius;
+    }
+
+    @Override
+    protected void drawDecoration(GraphicsContext graphicsContext) {
+
+    }
+}
diff --git a/src/main/java/shape/Circle.java b/src/main/java/shape/Circle.java
index 81d9175dc3977c5c95dec3693569c12ad12d8315..3bda54d9e45db1c1629ccd1e56ef7efa8fb4d252 100644
--- a/src/main/java/shape/Circle.java
+++ b/src/main/java/shape/Circle.java
@@ -3,19 +3,10 @@ package shape;
 import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
 
-public class Circle implements Shape {
+public class Circle extends AbstractShape implements Shape {
 
     public Circle(double x, double y, double sqrt) {
-    }
 
-    @Override
-    public int pointsCount() {
-        return 0;
-    }
-
-    @Override
-    public Point2D point(int index) {
-        return null;
     }
 
     @Override
diff --git a/src/main/java/shape/Polygon.java b/src/main/java/shape/Polygon.java
index e142846338c4934a66ddb2d2ca9c6cd742788d08..967ad06a64e3600da1c41d38407d8ec2a97134de 100644
--- a/src/main/java/shape/Polygon.java
+++ b/src/main/java/shape/Polygon.java
@@ -23,6 +23,7 @@ public class Polygon extends AbstractShape {
             coordinateX[index]=point(index).getX();
             coordinateY[index]=point(index).getY();
         }
-        context.strokePolygon(coordinateX,coordinateY,pointsCount());
+        context.setFill(color);
+        context.fillPolygon(coordinateX,coordinateY,pointsCount());
     }
 }
diff --git a/src/main/java/shape/Rectangle.java b/src/main/java/shape/Rectangle.java
index 4192ff4bad6c5d72327863a9ffc6927b03fe22d2..6bcb4332f2fcfeb9576cea01e7a4527c5f172056 100644
--- a/src/main/java/shape/Rectangle.java
+++ b/src/main/java/shape/Rectangle.java
@@ -19,7 +19,9 @@ public class Rectangle extends AbstractShape implements Shape{
 
     @Override
     public void draw(GraphicsContext context) {
-          context.strokeRect(point(0).getX(),point(0).getY(),point(1).getX()-point(0).getX(),
-                  point(1).getY()-point(0).getY());
+        context.setFill(color);
+        context.fillRect(point(0).getX(),point(0).getY(),(point(1).getX())-(point(0).getX()),
+                (point(1).getY())-(point(0).getY()));
+
     }
 }
\ No newline at end of file