perhaps use subclasses carrying the new field:

    scala> case class Foo(s: String, i: Int)
    defined class Foo

    scala> class Foo2(s: String, i: Int, val mdc: String) extends Foo(s, i)
    defined class Foo2

    scala> val f: Foo = new Foo2("a", 17, "b")
    f: Foo = Foo(a,17)

    scala> f match { case f2: Foo2 => println("mdc: " + f2.mdc); case Foo(s, i) => println("" + s + i) }
    mdc: b

    scala> val f: Foo = new Foo("a", 17)
    f: Foo = Foo(a,17)

    scala> f match { case f2: Foo2 => println("mdc: " + f2.mdc); case Foo(s, i) => println("" + s + i) }
    a17