diff --git a/src/Core/Crawl.qrc b/src/Core/Crawl.qrc
index 8b9c92c..73b83c6 100644
--- a/src/Core/Crawl.qrc
+++ b/src/Core/Crawl.qrc
@@ -23,5 +23,7 @@
         <file>CrawlCoreAssets/particles/sphere.png</file>
         <file>CrawlCoreAssets/particles/smokeSprite.png</file>
         <file>CrawlModule/particles/Fire.qml</file>
+        <file>CrawlModule/particles/Wint.qml</file>
+        <file>CrawlModule/particles/BaseAffector.qml</file>
     </qresource>
 </RCC>
diff --git a/src/Core/Crawl/affector.cpp b/src/Core/Crawl/affector.cpp
new file mode 100644
index 0000000..e8559dd
--- /dev/null
+++ b/src/Core/Crawl/affector.cpp
@@ -0,0 +1,32 @@
+//#
+//# Copyright (C) 2021-2021 QuasarApp.
+//# Distributed under the GPLv3 software license, see the accompanying
+//# Everyone is permitted to copy and distribute verbatim copies
+//# of this license document, but changing it is not allowed.
+//#
+
+
+#include "affector.h"
+
+namespace CRAWL {
+
+Affector::Affector(const QString &name,
+                   const QString &viewTempalte,
+                   QObject *ptr) :
+    IWorldItem(name, viewTempalte, ptr)
+{
+
+}
+
+bool Affector::enabled() const {
+    return _enabled;
+}
+
+void Affector::setEnabled(bool newEnabled) {
+    if (_enabled == newEnabled)
+        return;
+    _enabled = newEnabled;
+    emit enabledChanged();
+}
+
+}
diff --git a/src/Core/Crawl/affector.h b/src/Core/Crawl/affector.h
new file mode 100644
index 0000000..d8fefeb
--- /dev/null
+++ b/src/Core/Crawl/affector.h
@@ -0,0 +1,79 @@
+#ifndef AFFECTOR_H
+#define AFFECTOR_H
+
+#include "iworlditem.h"
+
+
+namespace CRAWL {
+
+/**
+ * @brief The Affector class is an abstract base class of affectors like Gravity3D, Wander3D, and PointRotator3D. By default affectors affect all particles in the system,
+ *  but this can be limited by defining the particles list.
+ *  If the system has multiple affectors, the order of affectors may result in different outcome, as affectors are applied one after another.
+ *
+ *  For custumisation your own Affectors you need to change the templateView qml file for your own class.
+ * @note For get more inforamtion about available qml affectors see the qt documentation [page](https://doc.qt.io/qt-6.1/qml-qtquick3d-particles3d-affector3d.html)
+
+   **Example of qml view file**
+
+   @code
+
+    Attractor3D {
+
+        property var model: null
+        property int guiId: (model) ? model.guiId : -1;
+
+        rotation: (model)? model.rotation: Qt.quaternion(0, 0, 0, 0)
+        scale: (model)? model.size: Qt.vector3d(0, 0, 0);
+        position: (model) ? model.position: Qt.vector3d(0,0,0);
+        visible: (model)? model.visible: false
+
+        enabled: (model)? model.enabled: false
+
+        positionVariation: Qt.vector3d(50, 50, 50)
+        duration: 3000
+        durationVariation: 1000
+    }
+
+   @endcode
+*/
+class CRAWL_EXPORT Affector : public IWorldItem
+{
+    Q_OBJECT
+
+    /**
+     * @brief enabled if enabled is set to false, this affector will not alter any particles. Usually this is used to conditionally turn an affector on or off.
+The default value is true.
+     */
+    Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged)
+
+public:
+    Affector(const QString& name,
+             const QString& viewTempalte = DEFAULT_VIEW_TEMPLATE,
+             QObject *ptr = nullptr);
+
+    /**
+     * @brief enabled if enabled is set to false, this affector will not alter any particles. Usually this is used to conditionally turn an affector on or off.
+The default value is true.
+     * @return true if the Affector is enabled else false.
+     */
+    bool enabled() const;
+
+    /**
+     * @brief setEnabled This method  enable or disable the affector object.
+     * @param newEnabled new value.
+     */
+    void setEnabled(bool newEnabled);
+
+signals:
+    /**
+     * @brief enabledChanged This signal emited when the object change own enabled status.
+     */
+    void enabledChanged();
+
+private:
+    bool _enabled = true;
+};
+}
+
+#endif // AFFECTOR_H
diff --git a/src/Core/Crawl/dynamicwint.cpp b/src/Core/Crawl/dynamicwint.cpp
new file mode 100644
index 0000000..c687279
--- /dev/null
+++ b/src/Core/Crawl/dynamicwint.cpp
@@ -0,0 +1,60 @@
+//#
+//# Copyright (C) 2021-2021 QuasarApp.
+//# Distributed under the GPLv3 software license, see the accompanying
+//# Everyone is permitted to copy and distribute verbatim copies
+//# of this license document, but changing it is not allowed.
+//#
+
+
+#include "dynamicwint.h"
+
+namespace CRAWL {
+
+DynamicWint::DynamicWint() {
+
+}
+
+void DynamicWint::render(unsigned int tbfMsec) {
+    _time += tbfMsec;
+
+    if (_time > _nextWintChange) {
+        setMagnitude(_baseMagnitude + (rand() % _magnitudeVariation) - _magnitudeVariation / 2 );
+        setDirection(QVector3D{static_cast<float>(rand()) - rand(), static_cast<float>(rand()) - rand(), static_cast<float>(rand()) - rand()} * _directionChangeMask);
+
+        _nextWintChange += ((rand() % 100) / 100.0f) *  dayLengthSec() * 1000;
+    }
+}
+
+int DynamicWint::dayLengthSec() const {
+    return _dayLengthSec;
+}
+
+void DynamicWint::setDayLengthSec(int newDayLengthSec) {
+    _dayLengthSec = newDayLengthSec;
+}
+
+unsigned int DynamicWint::magnitudeVariation() const {
+    return _magnitudeVariation;
+}
+
+void DynamicWint::setMagnitudeVariation(unsigned int newMagnitudeVariation) {
+    _magnitudeVariation = newMagnitudeVariation;
+}
+
+unsigned int DynamicWint::baseMagnitude() const {
+    return _baseMagnitude;
+}
+
+void DynamicWint::setBaseMagnitude(unsigned int newBaseMagnitude) {
+    _baseMagnitude = newBaseMagnitude;
+}
+
+const QVector3D &DynamicWint::directionChangeMask() const {
+    return _directionChangeMask;
+}
+
+void DynamicWint::setDirectionChangeMask(const QVector3D &newDirectionChangeMask) {
+    _directionChangeMask = newDirectionChangeMask;
+}
+
+}
diff --git a/src/Core/Crawl/dynamicwint.h b/src/Core/Crawl/dynamicwint.h
new file mode 100644
index 0000000..0da96ad
--- /dev/null
+++ b/src/Core/Crawl/dynamicwint.h
@@ -0,0 +1,90 @@
+//#
+//# Copyright (C) 2021-2021 QuasarApp.
+//# Distributed under the GPLv3 software license, see the accompanying
+//# Everyone is permitted to copy and distribute verbatim copies
+//# of this license document, but changing it is not allowed.
+//#
+
+
+#ifndef DYNAMICWINT_H
+#define DYNAMICWINT_H
+
+#include "wint.h"
+namespace CRAWL {
+
+/**
+ * @brief The DynamicWint class This implementation dynamicly change wint direction and magnituede per day.
+ */
+class CRAWL_EXPORT DynamicWint : public Wint
+{
+    Q_OBJECT
+public:
+    DynamicWint();
+
+    // IRender interface
+public:
+    void render(unsigned int tbfMsec) override;
+
+    /**
+     * @brief dayLengthSec This method return length of the game day in real secs.
+     * @note by default this value is 360 sec
+     * @return length of the game day in real secs.
+     */
+    int dayLengthSec() const;
+
+    /**
+     * @brief setDayLengthSec This method sets new value of the day length.
+     * @param newDayLongSec This is new value of the day length.
+     * @note For get more information see the dayLengthSec method.
+     */
+    void setDayLengthSec(int newDayLengthSec);
+
+    /**
+     * @brief magnitudeVariation This method return curerent value of the magnitude variation.
+     * @return curerent value of the magnitude variation.
+     */
+    unsigned int magnitudeVariation() const;
+
+    /**
+     * @brief setMagnitudeVariation This method sets magnitude variation; by default it is 10
+     * @param newMagnitudeVariation This is new value of the magitude
+     */
+    void setMagnitudeVariation(unsigned int newMagnitudeVariation);
+
+    /**
+     * @brief baseMagnitude This method return current base magnitude of the wint. The wint will be changed dynamicly one time per day length to the magnitudeVariation
+     * @return curretn value of the base magnitude
+     */
+    unsigned int baseMagnitude() const;
+
+    /**
+     * @brief setBaseMagnitude This method sets new value of the base magnitude of the wint.
+     * @param newBaseMagnitude  this is new value of the base magnitude of the wint.
+     */
+    void setBaseMagnitude(unsigned int newBaseMagnitude);
+
+    /**
+     * @brief directionChangeMask This method return current value of mask of the direction variation. By default the wint will be changed by x and y axis.
+     * @return curertn value of the directionChangeMask
+     */
+    const QVector3D &directionChangeMask() const;
+
+    /**
+     * @brief setDirectionChangeMask This method sets mask of the direction variation. By default the wint will be changed by x and y axis.
+     * @param newDirectionChangeMask This is new value of the directionChangeMask
+     */
+    void setDirectionChangeMask(const QVector3D &newDirectionChangeMask);
+
+private:
+    int _dayLengthSec = 360;
+    unsigned int _nextWintChange = 0;
+    unsigned int _time = 0;
+
+    unsigned int _magnitudeVariation = 50;
+    unsigned int _baseMagnitude = 50;
+
+    QVector3D _directionChangeMask = {1, 1, 0};
+};
+
+}
+#endif // DYNAMICWINT_H
diff --git a/src/Core/Crawl/fire.cpp b/src/Core/Crawl/fire.cpp
index 96df662..4c40764 100644
--- a/src/Core/Crawl/fire.cpp
+++ b/src/Core/Crawl/fire.cpp
@@ -12,18 +12,20 @@ namespace CRAWL {
 
 Fire::Fire(): ParticleEffect(AUTO_CLASS_NAME, "qrc:/CrawlModule/particles/Fire.qml") {
 
-    useDirectionVelosity({0, 0 ,0}, {10, 10, 0});
-    setParticleScale(4);
-    setParticleEndScale(12);
+    useDirectionVelosity({0, 0 , 10}, {10, 10, 0});
+    setParticleScale(1);
+    setParticleEndScale(3);
     setParticleScaleVariation(3);
+
     setLifeSpanVariation(500);
     setColor("#ffaf2c");
     setSize({1, 1, 1});
     setposition({0,0,10});
+    setEnabled(true);
 
     setParticleDelegate("qrc:/CrawlModule/particles/FireParticel.qml");
 
-    setFireStrength(10);
+    setFireStrength(100);
 }
 
 void CRAWL::Fire::onIntersects(const IWorldItem *) {
@@ -40,11 +42,11 @@ void Fire::setFireStrength(float newFireStrength) {
 
     _fireStrength = newFireStrength;
 
-    setEmitRate(2 * _fireStrength);
+    setEmitRate(10 + _fireStrength);
     setLifeSpan(1000 + _fireStrength);
 
     auto vel = static_cast<VectorDirection*>(velocity());
-    vel->setVelosityDirection({0, 0 ,  _fireStrength});
+    vel->setVelosityDirection({0, 0 , _fireStrength / 4});
     vel->setVelosityDirectionValatility({10, 10, 0});
 
     emit fireStrengthChanged();
diff --git a/src/Core/Crawl/fire.h b/src/Core/Crawl/fire.h
index 71fec18..97d1381 100644
--- a/src/Core/Crawl/fire.h
+++ b/src/Core/Crawl/fire.h
@@ -20,7 +20,7 @@ class Fire: public ParticleEffect
     Q_OBJECT
 
     /**
-     * @brief fireStrength This propertye chenge fire power. By Default it is 10.
+     * @brief fireStrength This propertye chenge fire power. By Default it is 100.
     */
     Q_PROPERTY(float fireStrength READ fireStrength WRITE setFireStrength NOTIFY fireStrengthChanged)
 public:
diff --git a/src/Core/Crawl/groupobject.cpp b/src/Core/Crawl/groupobject.cpp
index f263066..f4fa5c3 100644
--- a/src/Core/Crawl/groupobject.cpp
+++ b/src/Core/Crawl/groupobject.cpp
@@ -21,7 +21,7 @@ void GroupObject::render(unsigned int tbfMsec) {
 
     for (ClasterItem* object: objects()) {
 
-        if (LocalPropertyes *props = getLocalPropertyes(object->guiId())) {
+        if (Localpropertys *props = getLocalpropertys(object->guiId())) {
             if (!props->_rotation.isNull())
                 object->setRotation(_this->rotation() * props->_rotation);
 
@@ -41,32 +41,32 @@ void GroupObject::installObject(ClasterItem *object,
 }
 
 void GroupObject::updatePosition(int id, const QVector3D &position) {
-    _extraPropertyes[id]._position = position;
+    _extrapropertys[id]._position = position;
 }
 
 void GroupObject::updateRotation(int id, const QQuaternion &roatation) {
-    _extraPropertyes[id]._rotation = roatation;
+    _extrapropertys[id]._rotation = roatation;
 }
 
 QQuaternion *GroupObject::getLocalrotation(int id) {
-    if (_extraPropertyes.contains(id)) {
-        return &_extraPropertyes[id]._rotation;
+    if (_extrapropertys.contains(id)) {
+        return &_extrapropertys[id]._rotation;
     }
 
     return nullptr;
 }
 
 QVector3D *GroupObject::getLocalPosition(int id) {
-    if (_extraPropertyes.contains(id)) {
-        return &_extraPropertyes[id]._position;
+    if (_extrapropertys.contains(id)) {
+        return &_extrapropertys[id]._position;
     }
 
     return nullptr;
 }
 
-LocalPropertyes *GroupObject::getLocalPropertyes(int id) {
-    if (_extraPropertyes.contains(id)) {
-        return &_extraPropertyes[id];
+Localpropertys *GroupObject::getLocalpropertys(int id) {
+    if (_extrapropertys.contains(id)) {
+        return &_extrapropertys[id];
     }
 
     return nullptr;
diff --git a/src/Core/Crawl/groupobject.h b/src/Core/Crawl/groupobject.h
index 2857eeb..63b4a85 100644
--- a/src/Core/Crawl/groupobject.h
+++ b/src/Core/Crawl/groupobject.h
@@ -16,9 +16,9 @@
 namespace CRAWL {
 
 /**
- * @brief The LocalPropertyes struct This structure contains local propertyes of the all childs object of a GroupObject class object.
+ * @brief The Localpropertys struct This structure contains local propertys of the all childs object of a GroupObject class object.
  */
-struct LocalPropertyes {
+struct Localpropertys {
     QVector3D _position = {0,0,0};
     QQuaternion _rotation = {};
 };
@@ -72,7 +72,7 @@ public:
      * @param localPosition This is local position of the @a object. The default value is current object center.
      * @param localRotation This is local rotation of the @a object. The default value is invalid quaternion and will be ignored..
      * @note The @a object should be disable own render method of a render method
-     * or @a object should not be change position and rotation propertyes
+     * or @a object should not be change position and rotation propertys
      * @note if you want to ignore the local rotation functionality then set the @a localRotation argument to invalid or default value.
     */
     void installObject(ClasterItem* object,
@@ -112,16 +112,16 @@ protected:
     QVector3D* getLocalPosition(int id);
 
     /**
-     * @brief getLocalPropertyes This method return all local propertyes of an object with @a id
+     * @brief getLocalpropertys This method return all local propertys of an object with @a id
      * @param id This is id of the object for getting changes.
-     * @return pointer to structure with local propertyes of the object. IF the object with id not exists on this classter then return nullptr.
+     * @return pointer to structure with local propertys of the object. IF the object with id not exists on this classter then return nullptr.
      * @warning use this return not const pointer and you can change them value but this is not thread safe.
      */
-    LocalPropertyes* getLocalPropertyes(int id);
+    Localpropertys* getLocalpropertys(int id);
 
 
 private:
-    QHash<int, LocalPropertyes> _extraPropertyes;
+    QHash<int, Localpropertys> _extrapropertys;
 
 };
 }
diff --git a/src/Core/Crawl/iworld.h b/src/Core/Crawl/iworld.h
index f6559f8..54c2e5e 100644
--- a/src/Core/Crawl/iworld.h
+++ b/src/Core/Crawl/iworld.h
@@ -134,7 +134,7 @@ public:
 
     /**
      * @brief render this method recursive invoke all render functions of the all world items.
-     *  The render function is main function of the SnakeEngine This method recal all propertyes of all objects.
+     *  The render function is main function of the SnakeEngine This method recal all propertys of all objects.
      */
     virtual void render(unsigned int tbfMsec) override;
 
diff --git a/src/Core/Crawl/iworldlight.h b/src/Core/Crawl/iworldlight.h
index 50dac42..0ca1568 100644
--- a/src/Core/Crawl/iworldlight.h
+++ b/src/Core/Crawl/iworldlight.h
@@ -146,22 +146,22 @@ signals:
     void castsShadowChanged();
 
     /**
-     * @brief shadowFactorChanged This signal emits when the shadowFactor propertye has changed.
+     * @brief shadowFactorChanged This signal emits when the shadowFactor property has changed.
      */
     void shadowFactorChanged();
 
     /**
-     * @brief shadowFilterChanged This signal emits when the shadowFilter propertye has changed.
+     * @brief shadowFilterChanged This signal emits when the shadowFilter property has changed.
      */
     void shadowFilterChanged();
 
     /**
-     * @brief shadowMapFarChanged This signal emits when the shadowMapFar propertye has changed.
+     * @brief shadowMapFarChanged This signal emits when the shadowMapFar property has changed.
      */
     void shadowMapFarChanged();
 
     /**
-     * @brief shadowBiasChanged This signal emits when the shadowBias propertye has changed.
+     * @brief shadowBiasChanged This signal emits when the shadowBias property has changed.
      */
     void shadowBiasChanged();
 
diff --git a/src/Core/Crawl/particleeffect.h b/src/Core/Crawl/particleeffect.h
index 14f10fe..23d8d42 100644
--- a/src/Core/Crawl/particleeffect.h
+++ b/src/Core/Crawl/particleeffect.h
@@ -18,6 +18,31 @@ namespace CRAWL {
  * @brief The ParticleEffect class This element emits logical particles into the ParticleSystem, with the given starting attributes.
 At least one emitter is required to have particles in the ParticleSystem3D.
     Please see the [qt](https://doc.qt.io/qt-6/qtquick3d-index.html) documentation for get more inforamtion
+
+    @note if you want that this effect alway shows then set the enabled property to true or invoke the brust method for singel show.
+
+    ### Example:
+
+    @code{cpp}
+
+    Fire::Fire(): ParticleEffect(AUTO_CLASS_NAME, "qrc:/CrawlModule/particles/Fire.qml") {
+
+        useDirectionVelosity({0, 0 , 10}, {10, 10, 0});
+        setParticleScale(4);
+        setParticleEndScale(12);
+        setParticleScaleVariation(3);
+        setLifeSpanVariation(500);
+        setColor("#ffaf2c");
+        setSize({1, 1, 1});
+        setposition({0,0,10});
+        setEnabled(true);
+
+        setParticleDelegate("qrc:/CrawlModule/particles/FireParticel.qml");
+
+        setFireStrength(100);
+    }
+
+    @endcode
  */
 class CRAWL_EXPORT ParticleEffect : public IWorldItem
 {
@@ -25,7 +50,7 @@ class CRAWL_EXPORT ParticleEffect : public IWorldItem
     /**
      *  @brief enabled if enabled is set to false, this emitter will not emit any particles.
      *  Usually this is used to conditionally turn an emitter on or off. If you want to continue emitting burst,
-     *  keep emitRate at 0 instead of toggling this to false. The default value is true.
+     *  keep emitRate at 0 instead of toggling this to false. The default value is false.
     */
     Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged)
 
@@ -120,7 +145,7 @@ class CRAWL_EXPORT ParticleEffect : public IWorldItem
 
     /**
      * @brief velocity can be used to set a starting velocity for emitted particles. If velocity is not set, particles start motionless and velocity comes from affectors if they are used.
-     * @note For the initialisation of this propertye use ParticleEffect::useTargetVelosity and ParticleEffect::useDirectionVelosity methods
+     * @note For the initialisation of this property use ParticleEffect::useTargetVelosity and ParticleEffect::useDirectionVelosity methods
     */
     Q_PROPERTY(QObject *velocity READ velocity NOTIFY velocityChanged)
 
@@ -398,77 +423,77 @@ public:
 signals:
 
     /**
-     * @brief enabledChanged This signal emited when the enabled propertye changed.
+     * @brief enabledChanged This signal emited when the enabled property changed.
      */
     void enabledChanged();
 
     /**
-     * @brief emitRateChanged This signal emited when the emitRate propertye changed.
+     * @brief emitRateChanged This signal emited when the emitRate property changed.
      */
     void emitRateChanged();
 
     /**
-     * @brief depthBiasChanged This signal emited when the depthBias propertye changed.
+     * @brief depthBiasChanged This signal emited when the depthBias property changed.
      */
     void depthBiasChanged();
 
     /**
-     * @brief lifeSpanChanged This signal emited when the lifeSpan propertye changed.
+     * @brief lifeSpanChanged This signal emited when the lifeSpan property changed.
      */
     void lifeSpanChanged();
 
     /**
-     * @brief lifeSpanVariationChanged This signal emited when the ifeSpanVariation propertye changed.
+     * @brief lifeSpanVariationChanged This signal emited when the ifeSpanVariation property changed.
      */
     void lifeSpanVariationChanged();
 
     /**
-     * @brief particleEndScaleChanged This signal emited when the particleEndScale propertye changed.
+     * @brief particleEndScaleChanged This signal emited when the particleEndScale property changed.
      */
     void particleEndScaleChanged();
 
     /**
-     * @brief particleRotationVariationChanged This signal emited when the particleRotationVariation propertye changed.
+     * @brief particleRotationVariationChanged This signal emited when the particleRotationVariation property changed.
      */
     void particleRotationVariationChanged();
 
     /**
-     * @brief particleRotationVelocityChanged This signal emited when the particleRotationVelocity propertye changed.
+     * @brief particleRotationVelocityChanged This signal emited when the particleRotationVelocity property changed.
      */
     void particleRotationVelocityChanged();
 
     /**
-     * @brief particleRotationVelocityVariationChanged This signal emited when the particleRotationVelocityVariation propertye changed.
+     * @brief particleRotationVelocityVariationChanged This signal emited when the particleRotationVelocityVariation property changed.
      */
     void particleRotationVelocityVariationChanged();
 
     /**
-     * @brief particleScaleChanged This signal emited when the particleScale propertye changed.
+     * @brief particleScaleChanged This signal emited when the particleScale property changed.
      */
     void particleScaleChanged();
 
     /**
-     * @brief particleScaleVariationChanged This signal emited when the particleScaleVariation propertye changed.
+     * @brief particleScaleVariationChanged This signal emited when the particleScaleVariation property changed.
      */
     void particleScaleVariationChanged();
 
     /**
-     * @brief particleDelegateChanged This signal emited when the particleDelegate propertye changed.
+     * @brief particleDelegateChanged This signal emited when the particleDelegate property changed.
      */
     void particleDelegateChanged();
 
     /**
-     * @brief velocityChanged This signal emited when the velocity propertye changed.
+     * @brief velocityChanged This signal emited when the velocity property changed.
      */
     void velocityChanged();
 
     /**
-     * @brief particleShapeChanged This signal emited when the shape propertye changed.
+     * @brief particleShapeChanged This signal emited when the shape property changed.
      */
     void particleShapeChanged();
 
     /**
-     * @brief particleShapeChanged This signal emited when the particleRotation propertye changed.
+     * @brief particleShapeChanged This signal emited when the particleRotation property changed.
      */
     void particleRotationChanged();
 
diff --git a/src/Core/Crawl/targetdirection.h b/src/Core/Crawl/targetdirection.h
index 1e4af1d..7ad1217 100644
--- a/src/Core/Crawl/targetdirection.h
+++ b/src/Core/Crawl/targetdirection.h
@@ -89,7 +89,7 @@ public:
     /**
      * @brief setVelosityMagnitude This method sets new value of the ParticleEffect::velosityMagnitude property.
      * @param newVelosityMagnitude This is a new value of the ParticleEffect::velosityMagnitude property
-     * @note This propertye will be workd only after invoke the useTargetVelosity method.
+     * @note This property will be workd only after invoke the useTargetVelosity method.
      */
     void setVelosityMagnitude(float newVelosityMagnitude);
 
@@ -104,7 +104,7 @@ public:
     /**
      * @brief setVelosityMagnitudeVariation This method sets new value of the ParticleEffect::velosityMagnitudeVariation property.
      * @param newVelosityMagnitudeVariation This is a new value of the ParticleEffect::velosityMagnitudeVariation property
-     * @note This propertye will be workd only after invoke the useTargetVelosity method.
+     * @note This property will be workd only after invoke the useTargetVelosity method.
      */
     void setVelosityMagnitudeVariation(float newVelosityMagnitudeVariation);
 
@@ -120,7 +120,7 @@ public:
     /**
      * @brief setVelosityNormalized This method sets new value of the ParticleEffect::velosityNormalized property.
      * @param newVelosityNormalized This is a new value of the ParticleEffect::velosityNormalized property
-     * @note This propertye will be workd only after invoke the useTargetVelosity method.
+     * @note This property will be workd only after invoke the useTargetVelosity method.
      */
     void setVelosityNormalized(bool newVelosityNormalized);
 
@@ -134,7 +134,7 @@ public:
     /**
      * @brief setVelosityTargetPosition This method sets new value of the ParticleEffect::velosityTargetPosition property.
      * @param newVelosityTargetPosition This is a new value of the ParticleEffect::velosityTargetPosition property
-     * @note This propertye will be workd only after invoke the useTargetVelosity method.
+     * @note This property will be workd only after invoke the useTargetVelosity method.
      */
     void setVelosityTargetPosition(const QVector3D &newVelosityTargetPosition);
 
@@ -148,34 +148,34 @@ public:
     /**
      * @brief setVelosityTargetPositionVariation This method sets new value of the ParticleEffect::velosityTargetPositionVariation property.
      * @param newVelosityTargetPositionVariation This is a new value of the ParticleEffect::velosityTargetPositionVariation property
-     * @note This propertye will be workd only after invoke the useTargetVelosity method.
+     * @note This property will be workd only after invoke the useTargetVelosity method.
      */
     void setVelosityTargetPositionVariation(const QVector3D &newVelosityTargetPositionVariation);
 
 signals:
 
     /**
-     * @brief velosityMagnitudeChanged This signal emited when the velosityMagnitude propertye changed.
+     * @brief velosityMagnitudeChanged This signal emited when the velosityMagnitude property changed.
      */
     void velosityMagnitudeChanged();
 
     /**
-     * @brief velosityMagnitudeVariationChanged This signal emited when the velosityMagnitudeVariation propertye changed.
+     * @brief velosityMagnitudeVariationChanged This signal emited when the velosityMagnitudeVariation property changed.
      */
     void velosityMagnitudeVariationChanged();
 
     /**
-     * @brief velosityNormalizedChanged This signal emited when the velosityNormalized propertye changed.
+     * @brief velosityNormalizedChanged This signal emited when the velosityNormalized property changed.
      */
     void velosityNormalizedChanged();
 
     /**
-     * @brief velosityTargetPositionChanged This signal emited when the velosityTargetPosition propertye changed.
+     * @brief velosityTargetPositionChanged This signal emited when the velosityTargetPosition property changed.
      */
     void velosityTargetPositionChanged();
 
     /**
-     * @brief velosityTargetPositionVariationChanged This signal emited when the velosityTargetPositionVariation propertye changed.
+     * @brief velosityTargetPositionVariationChanged This signal emited when the velosityTargetPositionVariation property changed.
      */
     void velosityTargetPositionVariationChanged();
 
diff --git a/src/Core/Crawl/vectordirection.h b/src/Core/Crawl/vectordirection.h
index 653c3f9..4d4dff5 100644
--- a/src/Core/Crawl/vectordirection.h
+++ b/src/Core/Crawl/vectordirection.h
@@ -60,7 +60,7 @@ public:
     /**
      * @brief setVelosityDirection This method sets new value of the ParticleEffect::velosityDirection property.
      * @param newVelosityDirection This is a new value of the ParticleEffect::velosityDirection property
-     * @note This propertye will be workd only after invoke the useDirectionVelosity method.
+     * @note This property will be workd only after invoke the useDirectionVelosity method.
      */
     void setVelosityDirection(const QVector3D &newVelosityDirection);
 
@@ -74,19 +74,19 @@ public:
     /**
      * @brief setVelosityDirectionValatility This method sets new value of the ParticleEffect::velosityDirectionValatility property.
      * @param newVelosityDirectionValatility This is a new value of the ParticleEffect::velosityDirectionValatility property
-     * @note This propertye will be workd only after invoke the useDirectionVelosity method.
+     * @note This property will be workd only after invoke the useDirectionVelosity method.
      */
     void setVelosityDirectionValatility(const QVector3D &newVelosityDirectionValatility);
 
 signals:
 
     /**
-     * @brief velosityDirectionChanged This signal emited when the velosityDirection propertye changed.
+     * @brief velosityDirectionChanged This signal emited when the velosityDirection property changed.
      */
     void velosityDirectionChanged();
 
     /**
-     * @brief velosityDirectionValatilityChanged This signal emited when the velosityDirectionValatility propertye changed.
+     * @brief velosityDirectionValatilityChanged This signal emited when the velosityDirectionValatility property changed.
      */
     void velosityDirectionValatilityChanged();
 
diff --git a/src/Core/Crawl/viewtemaplatemodel.h b/src/Core/Crawl/viewtemaplatemodel.h
index 9053f96..d39a9c5 100644
--- a/src/Core/Crawl/viewtemaplatemodel.h
+++ b/src/Core/Crawl/viewtemaplatemodel.h
@@ -47,7 +47,7 @@ public:
 
     /**
      * @brief viewObject This is object of view companent.
-     * @note For working with the view propertyes use the QOBject::getPropertye and QObject::setPropertye methods. For invoke view method use the "QMetaObject::invokeMethod" method.
+     * @note For working with the view propertys use the QOBject::getproperty and QObject::setproperty methods. For invoke view method use the "QMetaObject::invokeMethod" method.
      * For get more inforamtion about qt method see the Qt documentation.
      * @return pointer to view object.
      * @note If the object not inited and the model propetye of the view is empty then this property will be equals nullptr
diff --git a/src/Core/Crawl/wint.cpp b/src/Core/Crawl/wint.cpp
new file mode 100644
index 0000000..8660c2c
--- /dev/null
+++ b/src/Core/Crawl/wint.cpp
@@ -0,0 +1,40 @@
+//#
+//# Copyright (C) 2021-2021 QuasarApp.
+//# Distributed under the GPLv3 software license, see the accompanying
+//# Everyone is permitted to copy and distribute verbatim copies
+//# of this license document, but changing it is not allowed.
+//#
+
+
+#include "wint.h"
+
+namespace CRAWL {
+
+Wint::Wint(): Affector(AUTO_CLASS_NAME, "qrc:/CrawlModule/particles/Wint.qml") {
+}
+
+void Wint::onIntersects(const IWorldItem *) {}
+
+float Wint::magnitude() const {
+    return _magnitude;
+}
+
+void Wint::setMagnitude(float newMagnitude) {
+    if (qFuzzyCompare(_magnitude, newMagnitude))
+        return;
+    _magnitude = newMagnitude;
+    emit magnitudeChanged();
+}
+
+const QVector3D &Wint::direction() const {
+    return _direction;
+}
+
+void Wint::setDirection(const QVector3D &newDirection) {
+    if (_direction == newDirection)
+        return;
+    _direction = newDirection;
+    emit directionChanged();
+}
+
+}
diff --git a/src/Core/Crawl/wint.h b/src/Core/Crawl/wint.h
new file mode 100644
index 0000000..5ec9051
--- /dev/null
+++ b/src/Core/Crawl/wint.h
@@ -0,0 +1,76 @@
+//#
+//# Copyright (C) 2021-2021 QuasarApp.
+//# Distributed under the GPLv3 software license, see the accompanying
+//# Everyone is permitted to copy and distribute verbatim copies
+//# of this license document, but changing it is not allowed.
+//#
+
+#ifndef WINT_H
+#define WINT_H
+
+#include "affector.h"
+#include "Extensions/rotationaroundaxis.h"
+
+namespace CRAWL {
+
+/**
+ * @brief The Wint class This is example of the using Affector class.
+ * implementation of the wint.
+ */
+class CRAWL_EXPORT Wint: public Affector
+{
+    Q_OBJECT
+
+
+    /**
+     * @brief direction This property defines the direction the gravity will affect toward. Values will be automatically normalized to a unit vector.
+    */
+    Q_PROPERTY(QVector3D direction READ direction WRITE setDirection NOTIFY directionChanged)
+
+    /**
+     * @brief magnitude This property defines the magnitude in position change per second. Negative magnitude accelerates the opposite way from the direction.
+The default value is 100.0.
+     */
+    Q_PROPERTY(float magnitude READ magnitude WRITE setMagnitude NOTIFY magnitudeChanged)
+
+public:
+    Wint();
+
+    // IWorldItem interface
+    /**
+     * @brief direction This method return current direction of the wint.
+     * @return  direction of the wint.
+     */
+    const QVector3D &direction() const;
+
+    /**
+     * @brief setDirection This method sets new direction of the wint.
+     * @param newDirection new value of the direction of the wint.
+     */
+    void setDirection(const QVector3D &newDirection);
+
+    /**
+     * @brief magnitude This property defines the magnitude in position change per second. Negative magnitude accelerates the opposite way from the direction.
+The default value is 10.0.
+     * @return current value of the magnitude.
+     */
+    float magnitude() const;
+
+    /**
+     * @brief setMagnitude This method sets new vlaue of the magnitucde of this object.
+     * @param newMagnitude Tis is new value of the magnitude property
+     */
+    void setMagnitude(float newMagnitude);
+
+signals:
+    void directionChanged();
+    void magnitudeChanged();
+
+protected:
+    void onIntersects(const IWorldItem *item) override;
+
+    QVector3D _direction = {1, 0, 0};
+    float _magnitude = 10;
+};
+}
+#endif // WINT_H
diff --git a/src/Core/CrawlModule/Scene.qml b/src/Core/CrawlModule/Scene.qml
index 7d9e2b4..45e472c 100644
--- a/src/Core/CrawlModule/Scene.qml
+++ b/src/Core/CrawlModule/Scene.qml
@@ -43,7 +43,6 @@ View3D {
 
     ParticleSystem3D {
         id: privateRoot
-
         property var arrayObjects: []
         property var world: (model)? model.world: null
 
diff --git a/src/Core/CrawlModule/particles/BaseAffector.qml b/src/Core/CrawlModule/particles/BaseAffector.qml
new file mode 100644
index 0000000..8ff99de
--- /dev/null
+++ b/src/Core/CrawlModule/particles/BaseAffector.qml
@@ -0,0 +1,22 @@
+//#
+//# Copyright (C) 2021-2021 QuasarApp.
+//# Distributed under the GPLv3 software license, see the accompanying
+//# Everyone is permitted to copy and distribute verbatim copies
+//# of this license document, but changing it is not allowed.
+//#
+
+import QtQuick
+import QtQuick3D
+import QtQuick3D.Particles3D
+
+Affector3D {
+    property var model: null
+    property int guiId: (model) ? model.guiId : -1;
+
+    rotation: (model)? model.rotation: Qt.quaternion(0, 0, 0, 0)
+    scale: (model)? model.size: Qt.vector3d(0, 0, 0);
+    position: (model) ? model.position: Qt.vector3d(0,0,0);
+    visible: (model)? model.visible: false
+
+    enabled: (model)? model.enabled: false
+}
diff --git a/src/Core/CrawlModule/particles/Fire.qml b/src/Core/CrawlModule/particles/Fire.qml
index 9fe2dd4..902d191 100644
--- a/src/Core/CrawlModule/particles/Fire.qml
+++ b/src/Core/CrawlModule/particles/Fire.qml
@@ -11,8 +11,7 @@ import QtQuick3D.Particles3D
 
 ParticleEffect {
     PointLight {
-        position: parent.position
-        brightness: 100 * (model)? model.fireStrength: 0;
+        brightness: (model)? Math.sqrt(model.fireStrength): 0;
         color: (model)? model.color: "#ffffff";
     }
 }
diff --git a/src/Core/CrawlModule/particles/ParticleEffect.qml b/src/Core/CrawlModule/particles/ParticleEffect.qml
index 01d0306..97e755f 100644
--- a/src/Core/CrawlModule/particles/ParticleEffect.qml
+++ b/src/Core/CrawlModule/particles/ParticleEffect.qml
@@ -24,7 +24,7 @@ ParticleEmitter3D {
     depthBias: (model)? model.depthBias: 0
     emitRate: (model)? model.emitRate: 0
 
-    enabled: (model)? model.enabled: false
+    enabled: (model)? model.enabled: true
     lifeSpan: (model)? model.lifeSpan: 0
     lifeSpanVariation: (model)? model.lifeSpanVariation: 0
     particleEndScale: (model)? model.particleEndScale: 0
@@ -80,10 +80,11 @@ ParticleEmitter3D {
 
                                        root.velocity = view = obj;
                                    } else {
-                                       console.log("wrong viewTemplate in model " + temp.errorString());
+                                       console.log("wrong path (viewTemplate property) ot thq velosity module " + temp.errorString());
                                    }
                                }
                            }
+
         onDelegateChanged: () => {
                                let temp = Qt.createComponent(privateRoot.delegate)
 
@@ -93,7 +94,7 @@ ParticleEmitter3D {
                                if (temp.status === Component.Ready) {
                                    root.particle =  temp.createObject(root.parent);
                                } else {
-                                   console.log("wrong viewTemplate in model " + temp.errorString());
+                                   console.log("wrong path to the in model " + temp.errorString());
                                }
                            }
 
diff --git a/src/Core/CrawlModule/particles/Wint.qml b/src/Core/CrawlModule/particles/Wint.qml
new file mode 100644
index 0000000..1a60c51
--- /dev/null
+++ b/src/Core/CrawlModule/particles/Wint.qml
@@ -0,0 +1,39 @@
+//#
+//# Copyright (C) 2021-2021 QuasarApp.
+//# Distributed under the GPLv3 software license, see the accompanying
+//# Everyone is permitted to copy and distribute verbatim copies
+//# of this license document, but changing it is not allowed.
+//#
+
+import QtQuick
+import QtQuick3D
+import QtQuick3D.Particles3D
+
+Gravity3D {
+
+    property var model: null
+    property int guiId: (model) ? model.guiId : -1;
+
+    enabled: (model)? model.enabled: false
+
+    magnitude: (model)? model.magnitude: 0
+
+    direction: (model)? model.direction: Qt.vector3d(0, 0, 0)
+
+    Behavior on magnitude {
+        NumberAnimation {
+            duration: 5000
+            easing.type: Easing.InQuad
+
+        }
+    }
+
+    Behavior on direction {
+        Vector3dAnimation {
+            duration: 5000
+            easing.type: Easing.InQuad
+        }
+    }
+
+}
+
diff --git a/src/Core/Extensions/movableobject.h b/src/Core/Extensions/movableobject.h
index bd23bd6..d47f18e 100644
--- a/src/Core/Extensions/movableobject.h
+++ b/src/Core/Extensions/movableobject.h
@@ -51,7 +51,7 @@ public:
     /**
      * @brief setMovableVector This method sets new value of the mvable vector.
      * @param newMovableVector this is a new value ofthe movable vector
-     * @note The movable vector will be changed in time if you set the MovableObject::breakingForce propertye to non 0 value.
+     * @note The movable vector will be changed in time if you set the MovableObject::breakingForce property to non 0 value.
      */
     void setMovableVector(const QVector3D &newMovableVector);
 
diff --git a/src/Core/Extensions/rotationaroundaxis.cpp b/src/Core/Extensions/rotationaroundaxis.cpp
new file mode 100644
index 0000000..f90b8a9
--- /dev/null
+++ b/src/Core/Extensions/rotationaroundaxis.cpp
@@ -0,0 +1,28 @@
+//#
+//# Copyright (C) 2021-2021 QuasarApp.
+//# Distributed under the GPLv3 software license, see the accompanying
+//# Everyone is permitted to copy and distribute verbatim copies
+//# of this license document, but changing it is not allowed.
+//#
+
+#include "rotationaroundaxis.h"
+
+#include <Crawl/guiobject.h>
+
+namespace CRAWL {
+
+RotationAroundAxis::RotationAroundAxis(): CircularMotion(nullptr) {
+
+}
+
+void RotationAroundAxis::renderRotation(GuiObject *object, unsigned int tbfMsec) {
+    setAnglePosition(anglePosition() + angularVelocity() * (tbfMsec / 1000.0f));
+
+    object->setRotation(QQuaternion::fromAxisAndAngle(axis(), angularVelocity()));
+}
+
+void RotationAroundAxis::renderPosition(GuiObject *, unsigned int ) {
+
+}
+
+}
diff --git a/src/Core/Extensions/rotationaroundaxis.h b/src/Core/Extensions/rotationaroundaxis.h
new file mode 100644
index 0000000..f82fcad
--- /dev/null
+++ b/src/Core/Extensions/rotationaroundaxis.h
@@ -0,0 +1,34 @@
+//#
+//# Copyright (C) 2021-2021 QuasarApp.
+//# Distributed under the GPLv3 software license, see the accompanying
+//# Everyone is permitted to copy and distribute verbatim copies
+//# of this license document, but changing it is not allowed.
+//#
+
+#ifndef ROTATIONAROUNDAXIS_H
+#define ROTATIONAROUNDAXIS_H
+
+#include "circularmotion.h"
+
+namespace CRAWL {
+
+/**
+ * @brief The RotationAroundAxis class This class provide the rotation of our axis
+ */
+class RotationAroundAxis: public CircularMotion
+{
+public:
+    RotationAroundAxis();
+
+    // BaseMotion interface
+protected:
+    void renderRotation(GuiObject *object, unsigned int tbfMsec) override;
+    void renderPosition(GuiObject *object, unsigned int tbfMsec) override;
+
+};
+
+}
+
+
+
+#endif // ROTATIONAROUNDAXIS_H
diff --git a/src/CrawlTestLvl/private/world.cpp b/src/CrawlTestLvl/private/world.cpp
index bb8e101..bdfa823 100644
--- a/src/CrawlTestLvl/private/world.cpp
+++ b/src/CrawlTestLvl/private/world.cpp
@@ -14,6 +14,7 @@
 #include "Crawl/iworlditem.h"
 #include <Crawl/day.h>
 #include <Crawl/defaultlight.h>
+#include <Crawl/dynamicwint.h>
 #include <Crawl/fire.h>
 #include <Crawl/moon.h>
 #include <Crawl/sun.h>
@@ -32,6 +33,8 @@ CRAWL::WorldRule *World::initWorldRules() {
     return new CRAWL::WorldRule {
         {0, {{registerObject<Box>(), 100},
              {registerObject<CRAWL::Fire>(), 10},
+             {registerObject<CRAWL::DynamicWint>(), 1},
+
              {registerObject<Background>(), 1},
              {registerObject<Day>(), 1}}}
     };