                 if (videoStart > 0) {
                     MyLog("SWElem seekTo \(videoStart)", level:0)
                 }
-                videoPlayer.seek(to: CMTime(seconds:Double(videoStart), preferredTimescale: 600), toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)
+                let timescale = videoPlayer.currentItem?.asset.duration.timescale ?? 600
+                videoPlayer.seek(to: CMTime(seconds:Double(videoStart), preferredTimescale: timescale), toleranceBefore: tolerance, toleranceAfter: tolerance)
 
                 notificationManager.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: playerItem, queue: OperationQueue.main) {
                     [unowned self] (_:Notification!) -> Void in

            }
            let timeSec = videoStart + offset * (videoDuration ?? 1.0)
            let time = CMTimeMakeWithSeconds(Float64(timeSec), 600)
            let tolerance = CMTimeMake(10, 600) // 1/60sec
            if player.status == AVPlayerStatus.readyToPlay {
                self.fSeeking = true
                SwipeElement.objectCount -= 1 // to avoid false memory leak detection

*/
    func handleVideoEnd(videoPlayer:AVPlayer) {
        if self.delegate != nil && self.delegate!.shouldRepeat(self) {
            let timescale = videoPlayer.currentItem?.asset.duration.timescale ?? 600
            videoPlayer.seek(to: CMTime(seconds:Double(videoStart), preferredTimescale: timescale), toleranceBefore: tolerance, toleranceAfter: tolerance)
            videoPlayer.play()
        } else {
            self.fNeedRewind = true
