     public var useMinutesAndSecondsRepresentation = false
 
     private var timer: Timer?
+    private var beginingValue: Int = 1
     private var totalTime: TimeInterval = 1
     private var elapsedTime: TimeInterval = 0
+    private var interval: TimeInterval = 1 // Interval which is set by a user
     private let fireInterval: TimeInterval = 0.01 // ~60 FPS
 
     private lazy var counterLabel: UILabel = {

     *   - interval: Interval between reducing the counter(1 second by default)
     */
    public func start(beginingValue: Int, interval: TimeInterval = 1) {
        totalTime = TimeInterval(beginingValue) * interval
        elapsedTime = 0
        currentCounterValue = beginingValue

        timer?.invalidate()
        timer = Timer(timeInterval: fireInterval, repeats: true) { timer in
            self.elapsedTime += self.fireInterval

            if self.elapsedTime < self.totalTime {
                self.setNeedsDisplay()

                let computedCounterValue = beginingValue - Int(self.elapsedTime / interval)
                if computedCounterValue != self.currentCounterValue {
                    self.currentCounterValue = computedCounterValue
                }
            } else {
                self.end()
            }
        }
        RunLoop.main.add(timer!, forMode: .commonModes)

        delegate?.timerDidStart?()

        let secondString = seconds < 10 ? "0" + seconds.description : seconds.description
        return minutes.description + ":" + secondString
    }

    // MARK: Private methods
    @objc private func timerFired(_ timer: Timer) {
        elapsedTime += fireInterval

        if elapsedTime < totalTime {
            setNeedsDisplay()

            let computedCounterValue = beginingValue - Int(elapsedTime / interval)
            if computedCounterValue != currentCounterValue {
                currentCounterValue = computedCounterValue
            }
        } else {
            end()
        }
    }
}
