         }
 
         return self
+    }
+
+    /// Synchronously imports all records and provides the end result only.
+    ///
+    /// Use the `startImportingRecords` method for an asynchronous import with progress, fail and finish callbacks.
+    ///
+    /// - Parameters:
+    ///   - mapper: A closure to map the data received in a line to your data structure.
+    /// - Returns: The imported records array.
+    public func importRecords(mapper closure: @escaping (_ recordValues: [String]) -> T) -> [T] {
+        var importedRecords = [T]()
+
+        _ = self.importLines { valuesInLine in
+            let newRecord = closure(valuesInLine)
+            importedRecords.append(newRecord)
+        }
+
+        return importedRecords
+    }
+
+    /// Synchronously imports all records and provides the end result only.
+    ///
+    /// Use the `startImportingRecords` method for an asynchronous import with progress, fail and finish callbacks.
+    ///
+    ///   - structure: A closure for doing something with the found structure within the first line of the CSV file.
+    ///   - recordMapper: A closure to map the dictionary data interpreted from a line to your data structure.
+    /// - Returns: The imported records array.
+    public func importRecords(structure structureClosure: @escaping (_ headerValues: [String]) -> Void,
+                                      recordMapper closure: @escaping (_ recordValues: [String: String]) -> T) -> [T] {
+
+        var recordStructure: [String]?
+        var importedRecords = [T]()
+
+        _ = self.importLines { valuesInLine in
+
+            if recordStructure == nil {
+                recordStructure = valuesInLine
+                structureClosure(valuesInLine)
+            } else {
+                if let structuredValuesInLine = [String: String](keys: recordStructure!, values: valuesInLine) {
+                    let newRecord = closure(structuredValuesInLine)
+                    importedRecords.append(newRecord)
+                } else {
+                    print("CSVImporter – Warning: Couldn't structurize line.")
+                }
+            }
+        }
+
+        return importedRecords
     }
 
     /// Imports all lines one by one and

    /// - Returns: `self` to enable consecutive method calls (e.g. `importer.startImportingRecords {...}.onProgress {...}`).
    public func startImportingRecords(mapper closure: @escaping (_ recordValues: [String]) -> T) -> Self {
        workDispatchQueue.async {
            var importedRecords: [T] = []

            let importedLinesWithSuccess = self.importLines { valuesInLine in
                let newRecord = closure(valuesInLine)

                                      recordMapper closure: @escaping (_ recordValues: [String: String]) -> T) -> Self {
        workDispatchQueue.async {
            var recordStructure: [String]?
            var importedRecords = [T]()

            let importedLinesWithSuccess = self.importLines { valuesInLine in

