     init(value: Int, unit: Unit) {
         self.init(value: Double(value), unit: unit)
     }
+
+    /// Creates a new instance with given `baseValue` in specified
+    /// `unit`. `value` is calculaed based on `baseValue` and `unit`.
+    ///
+    /// - Parameter:
+    ///     - baseValue: Calculated baseValue.
+    ///     - unit:      Unit in which `Timestamp` is represented.
+    init(baseValue: Double, unit: Unit) {
+        self.baseValue = baseValue
+        self.unit = unit
+        self.value = baseValue / unit.baseValueMultiplier
+    }
+
+    /// Creates a new instance with given `baseValue` in specified
+    /// `unit`. `value` is calculaed based on `baseValue` and `unit`.
+    ///
+    /// - Parameters:
+    ///     - baseValue: Calculated baseValue.
+    ///     - unit:      Unit in which `Timestamp` is represented.
+    init(baseValue: Int, unit: Unit) {
+        self.init(baseValue: Double(baseValue), unit: unit)
+    }
+}
+
+// MARK: - Unit Calculations
+
+extension Timestamp {
 
     /// Returns a number of units calculated based on current
     /// `baseValue` rounded down.

    let value: Double

    /// Represnts a unit in which `Timestamp` calculates `baseValue`.
    var unit: Unit {
        didSet {
            baseValue = value * unit.baseValueMultiplier
        }
    }

    /// Represents a value which doesn't depend on any unit
    /// or unit's value. It can be treated as a base unit
    /// which all `Unit`s can be calculated from or stored in.
    /// Its value depends on a multiplier specified for each `Unit`.
    private(set) var baseValue: Double

    /// Creates a new instance with given `value` in specified
    /// `unit`. `baseValue` is calculaed based on `value` and `unit`.

                return 1000 * 60
            case .hours:
                return 1000 * 60 * 60
            case let .frames(frameRate: rate):
                return 1000 / rate
            }
        }
