{
 
 }
+
+Vector2 Effect::positionDelta(const PhysicsEntity*, float) const
+{
+    return Vector2(0,0);
+}
+Vector2 Effect::velocityDelta(const PhysicsEntity*, float) const
+{
+    return Vector2(0,0);
+}
+Vector2 Effect::forceDelta(const PhysicsEntity*, float) const
+{
+    return Vector2(0,0);
+}
 
   public:
     virtual ~Effect();
 
-    virtual Vector2 positionDelta(const PhysicsEntity*, float) const = 0;
-    virtual Vector2 velocityDelta(const PhysicsEntity*, float) const = 0;
-    virtual Vector2 forceDelta(const PhysicsEntity*, float) const = 0;
+    virtual Vector2 positionDelta(const PhysicsEntity*, float) const;
+    virtual Vector2 velocityDelta(const PhysicsEntity*, float) const;
+    virtual Vector2 forceDelta(const PhysicsEntity*, float) const;
 };
 
 #endif // EFFECT_H
 
 
 }
 
-Vector2 Gravity::positionDelta(const PhysicsEntity*, float) const
-{
-    return Vector2(0, 0);
-}
-
-Vector2 Gravity::velocityDelta(const PhysicsEntity*, float) const
-{
-    return Vector2(0, 0);
-}
-
 Vector2 Gravity::forceDelta(const PhysicsEntity*, float) const
 {
     return Vector2(0, 0.001);
 
     Gravity();
     ~Gravity();
 
-    Vector2 positionDelta(const PhysicsEntity*, float) const;
-    Vector2 velocityDelta(const PhysicsEntity*, float) const;
     Vector2 forceDelta(const PhysicsEntity*, float) const;
 };
 
 
 #include "../debug.h"
 
 #include "../Entities/PhysicsEntity.h"
+#include "../Entities/Ball.h"
 
 Screen::Screen()
 {
 
 }
 
-Vector2 Screen::positionDelta(const PhysicsEntity*, float) const
-{
-    return Vector2(0,0);
-}
-
 Vector2 Screen::velocityDelta(const PhysicsEntity* e, float time_step) const
 {
     const Vector2& pos = e->positionRaw();
 
     Vector2 acc(0,0);
 
-    if(pos.y > 600 && velo.y > 0)
-    {
+    float radius = 0;
+    const Ball* b = dynamic_cast<const Ball*>(e);
+    if( b != NULL )
+        radius = b->getRadius();
+
+
+    if(pos.y > 600-radius && velo.y > 0)
         acc.y += velo.y * -2;
-    }
 
-    if(pos.y < 0 && velo.y < 0)
-    {
+    if(pos.y < 0+radius && velo.y < 0)
         acc.y += velo.y * -2;
-    }
 
-    if(pos.x > 800 && velo.x > 0)
-    {
+    if(pos.x > 800-radius && velo.x > 0)
         acc.x += velo.x * -2;
-    }
 
-    if(pos.x < 0 && velo.x < 0)
-    {
+    if(pos.x < 0+radius && velo.x < 0)
         acc.x += velo.x * -2;
-    }
 
     return acc;
 }
-
-Vector2 Screen::forceDelta(const PhysicsEntity*, float) const
-{
-    return Vector2(0,0);
-}
 
     Screen();
     ~Screen();
 
-    Vector2 positionDelta(const PhysicsEntity*, float) const;
     Vector2 velocityDelta(const PhysicsEntity*, float) const;
-    Vector2 forceDelta(const PhysicsEntity*, float) const;
 };
 
 #endif // SCREEN_H
 
 {
     glDrawCircle(radius, position, color);
 }
+
+float Ball::getRadius() const
+{
+    return radius;
+}
 
 
     virtual void draw() const;
 
+    float getRadius() const;
+
   protected:
     float radius;
     const float* color;
 
 
     ball = new Ball(Vector2(100, 100), 20, cGreen);
 
-    ball->applyImpulse(Vector2(-0.15,0.05)),
+    ball->applyImpulse(Vector2(-0.15,0.55)),
     Balls.push(ball);
     manager::add(ball);