         computeGravity(nodes)
         
         nodes.forEach{
-            let acceleration = $0.force / $0.mass
-            $0.force = CGPointZero
-            $0.velocity = $0.velocity + acceleration * CGFloat(timeStep)
-            if $0.velocity.magnitude > maxVelocity {
-                $0.velocity = $0.velocity.normalized * maxVelocity
+            if !$0.fixed {
+                let acceleration = $0.force / $0.mass
+                $0.force = CGPointZero
+                $0.velocity = $0.velocity + acceleration * CGFloat(timeStep)
+                if $0.velocity.magnitude > maxVelocity {
+                    $0.velocity = $0.velocity.normalized * maxVelocity
+                }
+                
+                $0.position = $0.position + $0.velocity * CGFloat(timeStep)
             }
-            
-            $0.position = $0.position + $0.velocity * CGFloat(timeStep)
         }
     }
     

        forces[name] = force
        return self
    }
}

extension Graph {
    public func update(closure: ([Node] -> ())) {
        if totalEnergy() > 0.001 {
            step()
            closure(nodes)
        }

        return self
    }
    
    private(set) public var energyThreshold: CGFloat = 0.01
    public func energyThreshold(value: CGFloat) -> Graph {
        energyThreshold = value
        return self
    }
    
    private(set) public var maxVelocity: CGFloat = 1
    public func maxVelocity(value: CGFloat) -> Graph {
        maxVelocity = value
