 // MARK: - NSDraggingDestination
 extension WorkspaceBar {
 
-  fileprivate func isTool(_ tool: WorkspaceTool, beingDragged info: NSDraggingInfo) -> Bool {
+  fileprivate func isTool(atIndex idx: Int, beingDragged info: NSDraggingInfo) -> Bool {
     let pasteboard = info.draggingPasteboard()
 
     guard let uuid = pasteboard.string(forType: WorkspaceToolButton.toolUti) else {
       return false
     }
 
+    let tool = self.tools[idx]
     return self.tools.filter { $0.uuid == uuid }.first == tool
   }
 
   override func draggingEntered(_ sender: NSDraggingInfo) -> NSDragOperation {
     self.buttonFrames.removeAll()
-    self.tools.forEach { self.buttonFrames[$0] = $0.button.frame }
+    self.buttonFrames = self.tools.map { $0.button.frame }
 
     self.isDragOngoing = true
     return .move

    let dimensionForDraggedButton = self.draggedButtonDimension()

    let firstButton = firstTool.button
    let firstButtonMargin = self.draggedOnBarButton == firstButton ? dimensionForDraggedButton : 0
    switch self.location {
    case .top:
      self.layoutConstraints.append(contentsOf: [

  }

  fileprivate func draggedButtonDimension() -> CGFloat {
    guard let idx = self.draggedOnToolIdx else {
      return 0
    }

    let button = self.tools[idx].button

    switch button.location {
    case .top, .bottom:
