   
   public final func printSubtree(params: [TreeInfoOptions] = []) {
     print("\n")
-    printTreeLevel(0, params: params)
+    printTree(withPrefix: nil, isLastElement: true)
     print("\n")
   }
   

    session.printSubtree(params)
  }
  
  private func printTreeLevel(level: Int, params: [TreeInfoOptions] = []) {
    var output = "|"
    let indent = "  |"
    
    for _ in 0..<level {
      output += indent
    }
    
    output += "\(String(self).componentsSeparatedByString(".").last!)"
    
    if params.contains(.Representation) && representationDeinitDisposable != nil {
      output += "  | (R)"

        codes.forEach { output += "\($0) " }
      }
    }
    print(output)
    
    let models = childModels.sort { return $0.timeStamp.compare($1.timeStamp) == .OrderedAscending }
    models.forEach { $0.printTree(withPrefix: currentPrefix, isLastElement: models.last == $0) }
  }
  
}
