What about making FrameCreator a trait and having TextFrameCreator and BinaryFrameCreator classes rather than anonymous functions?

You could also consider giving the FrameCreator some of the responsibility for doing the buffering.

e.g.
````scala
abstract class FrameBuilder(bufferSize: Int) {
  protected val buffer: ChannelBuffer = ChannelBuffers.dynamicBuffer(bufferSize)
  def append(buffer: ChannelBuffer): Boolean = { ... } // return false or throw exception on overflow
  def createFrame: WebSocketFrame
}
class TextFrameBuilder(rsv: Int) {
  def createFrame = new TextWebSocketFrame(true, rsv, buffer)
}
class BinaryFrameBuilder(rsv: Int) {
  def createFrame = new BinaryWebSocketFrame(true, rsv, buffer)
}
````