         }
         let position = Int(objectOffset + propertyOffset)
         do {
-            return try fromByteArray(position: position) as T
+            return try getScalar(at: position) as T
         } catch {
             return nil
         }

        self.buffer = UnsafeRawPointer(pointer)
    }
    
    public func fromByteArray<T : Scalar>(position : Int) throws -> T {
        if position + MemoryLayout<T>.stride > count || position < 0 {
            throw FBReaderError.outOfBufferBounds
        }
        
        return buffer.load(fromByteOffset: position, as: T.self)
    }
    
    public func buffer(position : Int, length : Int) throws -> UnsafeBufferPointer<UInt8> {
        if Int(position + length) > count {
            throw FBReaderError.outOfBufferBounds
        }
        let pointer = buffer.advanced(by:position).bindMemory(to: UInt8.self, capacity: length)
        return UnsafeBufferPointer<UInt8>.init(start: pointer, count: Int(length))
    }
    

    
    public var rootObjectOffset : Offset? {
        do {
            return try getScalar(at: 0) as Offset
        } catch {
            return nil
        }
