 			framerate = 1 / (frameDuration.seconds)
 		}
 		
-		let numberOfFrames = self.seconds / frameDuration.seconds
+		// This block below provides correct timing readout for 23.98 NDF, 29.97 NDF and 59.98 NDF
+		var numberOfFrames: Double
+		switch frameDuration {
+		case CMTime(value: 1001, timescale: 24000) where dropFrame == false:	// 23.98 NDF
+			numberOfFrames = self.seconds / CMTime(value: 100, timescale: 2400).seconds
+		case CMTime(value: 1001, timescale: 30000) where dropFrame == false:	// 29.97 NDF
+			numberOfFrames = self.seconds / CMTime(value: 100, timescale: 3000).seconds
+		case CMTime(value: 1001, timescale: 60000) where dropFrame == false:	// 59.98 NDF
+			numberOfFrames = self.seconds / CMTime(value: 100, timescale: 6000).seconds
+		default:
+			numberOfFrames = self.seconds / frameDuration.seconds
+		}
 		
+		// Round the number of frames so it's at a frame boundary
+		numberOfFrames = round(numberOfFrames)
+		
+		// Calculate time values
 		let hours = floor(numberOfFrames / (3600 * framerate))
 		let minutes = floor((numberOfFrames / (60 * framerate)).truncatingRemainder(dividingBy: 60))
 		let seconds = floor((numberOfFrames / framerate).truncatingRemainder(dividingBy: 60))
 		let frames = numberOfFrames.truncatingRemainder(dividingBy: framerate)
 		
+		// Format strings
 		let formatter = NumberFormatter()
 		formatter.paddingCharacter = "0"
 		formatter.minimumIntegerDigits = 2

	///
	/// - Parameter frameDuration: The duration of a single frame as a CMTime value.
	/// - Returns: A tuple with hours, minutes, seconds, and frames as Int and String values.
	public func timeAsTimecode(usingFrameDuration frameDuration: CMTime) -> (hours: Int, minutes: Int, seconds: Int, frames: Int, hoursString: String, minutesString: String, secondsString: String, framesString: String, timecodeString: String) {
		
		let framerate: Double
		if frameDuration == CMTime(value: 1001, timescale: 24000) { // If the framerate is 23.976, make the framerate 24 per SMPTE

		let secondsString = formatter.string(from: NSNumber(value: seconds))!
		let framesString = formatter.string(from: NSNumber(value: frames))!
		
		let counter: String
		if dropFrame == true {
			counter = hoursString + ":" + minutesString + ":" + secondsString + ";" + framesString
		} else {
			counter = hoursString + ":" + minutesString + ":" + secondsString + ":" + framesString
		}
		
		return (Int(hours), Int(minutes), Int(seconds), Int(frames), hoursString, minutesString, secondsString, framesString, counter)
	}
