     }
     
     func positionsOfItemsInView(with size: CGSize, at touchPoint: CGPoint) -> [CGPoint] {
-        // Get sin of angle (which is half of button angle
         var points = [CGPoint]()
         
         let fromAndToAngles = self.fromAngleAndToAngleInView(withSize: size, atPoint: touchPoint)
-        let fromAngle = fromAndToAngles[0];
-        let toAngle = fromAndToAngles[1];
-        let maximumArcAngle = toAngle - fromAngle
+        let fromAngle = fromAndToAngles[0]
+        let toAngle = fromAndToAngles[1]
+        
         var startingAngle = 0.0
         
-        if maximumArcAngle > buttonsArc {
-            startingAngle = (maximumArcAngle - buttonsArc) / 2
-        }
-        
-        let step = (toAngle - fromAngle) / Double(numberOfItems - 1)
+        let difference = toAngle - fromAngle
+        
+        if fabs(difference) > buttonsArc {
+            
+            startingAngle = difference > 0 ? (difference - buttonsArc) / 2 : (difference +  buttonsArc) / 2
+        }
+        
+        let step = (toAngle - fromAngle > 0 ? buttonsArc : -buttonsArc ) / Double(numberOfItems - 1)
         
         
         for i in 0 ..< numberOfItems {
-            let angle = step * Double(i) + fromAngle
+            let angle = step * Double(i) + fromAngle + startingAngle;
             let x = touchPoint.x + (distance + buttonRadius) * CGFloat(cos(angle))
             let y = touchPoint.y + (distance + buttonRadius) * CGFloat(sin(angle))
             let point = CGPoint(x: x, y: y)

            }
        }
        
        let outerRadius: CGFloat = distance +  buttonRadius * 2;
        let touchPointInset = self.distanceOfTouchPointToEdges(touchPoint: point, inViewWithSize: size)
        
        // This version prioritises to display the buttons to the TOP therefore it does not check touchPointInset.bottom > outerRadius
        if (touchPointInset.top > outerRadius && touchPointInset.right > outerRadius && touchPointInset.top > outerRadius) {
            return [fromAngle, toAngle];
        }
        
        let thresholdPoints = self.thresholdPointsOfButtonsArcInView(withSize: size, atTouchPoint: point);
        let firstPoint = thresholdPoints[0];
        let secondPoint = thresholdPoints[1];
        
        let firstAngle: Double = (Double)(self.angleBetweenHorizontalLineAndLineHasCenterPointAndAnotherPoint(centerPoint: point, anotherPoint: firstPoint))
        let secondAngle: Double = (Double)(self.angleBetweenHorizontalLineAndLineHasCenterPointAndAnotherPoint(centerPoint: point, anotherPoint: secondPoint))
        
        return [firstAngle, secondAngle];
    }

        
        return touchPosition
    }

    private func thresholdPointsOfButtonsArcInView(withSize size: CGSize, atTouchPoint point: CGPoint) -> [CGPoint]  {
        
        let marginX: CGFloat = margin;
        let marginY: CGFloat = margin;
        let arcRadius: CGFloat = distance + buttonRadius * 2 + margin;
        
        let touchPointInset = self.distanceOfTouchPointToEdges(touchPoint: point, inViewWithSize: size)
        let touchPointPosition = self.touchPointPositionInView(withSize: size, touchPoint: point)
