     private func changeStatus(
         statusType:MVitaLinkStrategyRequestItemTreatProtocol.Type)
     {
+        restart()
+        
         let status:MVitaLinkStrategyRequestItemTreatProtocol = statusType.init()
         self.status = status
+    }
+    
+    private func requestItem(
+        rawElement:UInt32)
+    {
+        guard
+        
+            let parentTreat:MVitaItemTreat = currentItem?.treat
+        
+        else
+        {
+            return
+        }
+        
+        let itemTreat:MVitaItemTreat = MVitaItemTreat.factoryTreat(
+            parentTreat:parentTreat,
+            treatId:rawElement)
+        
+        createNewItem(itemTreat:itemTreat)
+        requestItemFormat(itemTreat:itemTreat)
+    }
+    
+    private func createNewItem(
+        itemTreat:MVitaItemTreat)
+    {
+        let newItem:MVitaItemIn = MVitaItemIn(
+            treat:itemTreat,
+            parent:currentItem)
+        currentItem?.addElement(element:newItem)
+        currentItem = newItem
+        
+        if rootItemIn == nil
+        {
+            rootItemIn = currentItem
+        }
+    }
+    
+    private func nextElement()
+    {
+        guard
+        
+            let rawElement:UInt32 = currentItem?.rawElements?.popLast()
+        
+        else
+        {
+            currentItemFinished()
+            
+            return
+        }
+        
+        requestItem(rawElement:rawElement)
+    }
+    
+    private func currentItemFinished()
+    {
+        guard
+        
+            let parent:MVitaItemIn = currentItem?.parent
+        
+        else
+        {
+            allItemsFinished()
+            
+            return
+        }
+        
+        currentItem = parent
+        nextElement()
+    }
+    
+    private func allItemsFinished()
+    {
+        print("finished all items")
     }
     
     //MARK: internal


final class MVitaLinkStrategyRequestItemTreat:MVitaLinkStrategyRequestDataEvent
{
    private(set) var itemTreat:MVitaItemTreat?
    private(set) var itemFormat:MVitaItemFormat?
    private(set) var itemDateModified:Date?
    private(set) var itemFileName:String?
    private var status:MVitaLinkStrategyRequestItemTreatProtocol?
    
    required init(model:MVitaLink)

    {
        guard
            
            let itemTreat:MVitaItemTreat = currentItem?.treat
        
        else
        {
