     
     mutating func append(_ element: Element) {
         
-        // copy (if neccesary) and mutate underlying object
         internalReference.mutatingReference.append(element)
+    }
+    
+    @discardableResult
+    mutating func removeFirst() -> Element {
+        
+        return internalReference.mutatingReference.removeFirst()
+    }
+    
+    @discardableResult
+    mutating func removeLast() -> Element {
+        
+        return internalReference.mutatingReference.removeLast()
+    }
+    
+    @discardableResult
+    mutating func remove(at index: Int) -> Element {
+        
+        return internalReference.mutatingReference.remove(at: index)
     }
 }
 

        /// Append a new element.
        internal func append(_ element: Element) {
            
            // add new element
            self.elements.append(element)
            
            // lazily rebuild string
            resetStringCache()
        }
    }
}

        /// Counter for lazy string rebuilds
        internal var lazyStringBuild = Atomic<UInt>(0)
        
        /// Resets and clears the string cache.
        ///
        /// - Note: This should only be neccesary for unique references that are reused upon mutation. 
        @inline(__always)
        private func resetStringCache() {
            
