     let results = document.concepts.filter { (concept) -> Bool in
       return concept.rect.contains(clickedPoint)
     }
+    guard results.count > 0 else { return nil }
+    return results
+  }
+  
+  func clickedElements(atPoint clickedPoint: NSPoint) -> [Element]? {
+    var results = [Element]()
+    let clickedConcepts: [Element] = document.concepts.filter { (concept) -> Bool in
+      return concept.rect.contains(clickedPoint)
+    }
+    let clickedLinks: [Element] = document.links.filter { (link) -> Bool in
+      return link.rect.contains(clickedPoint)
+    }
+    
+    results.append(contentsOf: clickedConcepts)
+    results.append(contentsOf: clickedLinks)
+    
     guard results.count > 0 else { return nil }
     return results
   }

  func draw() {
    link.color.set()
    constructArrow()?.bezierPath().fill()
    drawLinkText()
  }
  

    NSColor.black.set()
    let bottomLeftTextPoint = link.point.translate(deltaX: -(textSize.width - padding) / 2.0, deltaY: -(textSize.height - padding) / 2.0)
    link.attributedStringValue.draw(at: bottomLeftTextPoint)
  }
  
  func drawSelectedRing() {
    guard link.isSelected else { return }
    
    NSColor.red.set()
    constructArrow()?.bezierPath().stroke()
  }
  
  func constructArrow() -> Arrow? {
