             "change"
             (target)=>
               root = @root()
-              @destroy()
-              root.parse_labels_recursive_func target.get("name"), target
+              if target.get("name") != target.previous("name")
+                prev_name = target.previous("name")
+                removed_label = root.query(prev_name)
+                removed_label.destroy()
+                root.parse_labels_recursive_func target.get("name"), target
           )
           label.on(
             "remove"

          children.on(
            "destroy"
            =>
              delete childrens[category_name]
              unless _(childrens).keys().length || @get("label")
                @destroy()
          )
          childrens[category_name] = children
          @set "childrens", childrens


        # rec
        childrens[category_name].parse_labels_recursive_func.call childrens[category_name], next_label_name, label

      query: (label_name)->
        # label_name example: "category/..."
        category_name = if /\//.test(label_name) then label_name.match(/([^\/]*)\//)[1] else label_name
        next_label_name = label_name.substring category_name.length + 1
        unless /\//.test label_name
          return @children(category_name)
        else
          return @children(category_name).query(next_label_name)

      set_label: (label)->
        @set "label", label
