         switch typeName {
         case "h3w":
             let dict = NSDictionary.init()
-            dict.setValue(playlists, forKey: UserSettings.Playlists.default)
+            for (name,playitem) in playlists {
+                let item = (playitem as! PlayItem).dictionary()
+                dict.setValue(item, forKey: name)
+            }
             dict.write(to: url, atomically: true)
             break
             
         default:
             //  "DocumentType" writter to user defaults play items dictionary
-            var playitems = UserDefaults.standard.dictionary(forKey: UserSettings.Playitems.default)
-
-            for key in playlists.keys {
-                for playitem in playlists[key] as! [PlayItem] {
-                    let rect = settings.rect.value as NSRect
-                    let item : [String:AnyObject] = [k.name  : playitem.name as String as AnyObject,
-                                                     k.link  : playitem.link.absoluteString as AnyObject,
-                                                     k.time  : playitem.time as AnyObject,
-                                                     k.rank  : playitem.rank as AnyObject,
-                                                     k.rect  : rect as AnyObject,
-                                                     k.label : playitem.label as AnyObject,
-                                                     k.hover : playitem.hover as AnyObject,
-                                                     k.alpha : playitem.alpha as AnyObject,
-                                                     k.trans : playitem.trans as AnyObject]
-                    playitems?[playitem.name] = item
-                }
+            var lists = UserDefaults.standard.dictionary(forKey: UserSettings.Playitems.default) ?? NSDictionary.init() as! [String : Any]
+            for (name,list) in playlists {
+                var items = [Dictionary<String,Any>]()
+                for item in list as! [PlayItem] {
+                    items.append(item.dictionary())
+                }
+                lists[name] = items
             }
             
             //  Cache ourselves too
-            let rect = settings.rect.value as NSRect
-            let item : [String:AnyObject] = [k.name  : self.displayName as AnyObject,
-                                             k.link  : self.fileURL!.absoluteString as AnyObject,
-                                             k.time  : settings.time.value as AnyObject,
-                                             k.rank  : settings.rank.value as AnyObject,
-                                             k.rect  : NSStringFromRect(rect) as AnyObject,
-                                             k.label : settings.autoHideTitle.value as AnyObject,
-                                             k.hover : settings.disabledFullScreenFloat.value as AnyObject,
-                                             k.alpha : settings.opacityPercentage.value as AnyObject,
-                                             k.trans : settings.translucencyPreference.value.rawValue as AnyObject]
-            playitems?[self.displayName] = item
+            let item = self.dictionary()
+            lists[self.displayName] = item
             
-            UserDefaults.standard.set(playitems, forKey: UserSettings.Playitems.default)
+            UserDefaults.standard.set(lists, forKey: UserSettings.Playlists.default)
             UserDefaults.standard.synchronize()
         }
         self.updateChangeCount(.changeCleared)

                    }
                }
                
                if let fileURL = dict.value(forKey: "fileURL") {
                    self.fileURL = URL(string: (fileURL as! String).addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)!)!
                    self.fileType = self.fileURL?.pathExtension
                    break;
                }
            }

                        let items = play[k.list] as! [Dictionary <String,AnyObject>]
                        var list : [PlayItem] = [PlayItem]()
                        for playitem in items {
                            let item = PlayItem.init(with: playitem)
                            list.append(item)
                        }
                        let name = play[k.name] as? String
                        if let items = playlists[name!] {
