diff --git a/src/funcheck/AnalysisComponent.scala b/src/funcheck/AnalysisComponent.scala
index 2a590e665436ee5a7d8144fbe9d7d91cd062776e..15307402474e04f42c6f2066f8f241ad07bd7cef 100644
--- a/src/funcheck/AnalysisComponent.scala
+++ b/src/funcheck/AnalysisComponent.scala
@@ -64,18 +64,23 @@ class AnalysisComponent(val global: Global, val pluginInstance: FunCheckPlugin)
       def unsup(s: String): String = "FunCheck: Unsupported construct: " + s
 
       tree match {
-        case ClassDef(mods, name, tparams, impl) => {
-          if(mods.isTrait) unit.error(tree.pos, unsup("trait."))
-        }
+        case c @ ClassDef(mods, name, tparams, impl) => {
+          val s = c.symbol
+          println(s)
+
+          if(s.isTrait)
+            unit.error(tree.pos, unsup("trait."))
+
+          else if(s.isModule) 
+            println("Seems like " + name + " is an object.")
 
+          else if(s.isClass && !(mods.isCase || mods.isAbstract)) 
+            unit.error(tree.pos, unsup("non-abstract, non-case class."))
+          
+        }
         case ValDef(mods, name, tpt, rhs) if mods.isVariable =>
           unit.error(tree.pos, unsup("mutable variable/field."))
-
-        case LabelDef(name, params, rhs) => ;
-           // used for tailcalls and like
-           // while/do are desugared to label defs as follows:
-           // while (cond) body ==> LabelDef($L, List(), if (cond) { body; L$() } else ())
-           // do body while (cond) ==> LabelDef($L, List(), body; if (cond) L$() else ())
+        case LabelDef(name, params, rhs) => unit.error(tree.pos, unsup("loop."))
         case Assign(lhs, rhs) => unit.error(tree.pos, unsup("assignment to mutable variable/field."))
         case Return(expr) => unit.error(tree.pos, unsup("return statement."))
         case Try(block, catches, finalizer) => unit.error(tree.pos, unsup("try block."))
diff --git a/src/funcheck/purescala/Trees.scala b/src/funcheck/purescala/Trees.scala
index df50d07facb3b49231d9ee5d436f6bbbde34b492..6980ba7873810640a9ff52964e55247462c5f2a9 100644
--- a/src/funcheck/purescala/Trees.scala
+++ b/src/funcheck/purescala/Trees.scala
@@ -67,6 +67,7 @@ see examples in:
   case class MapType(from: TypeTree, to: TypeTree) extends TypeTree
   case class ClassType(id: Identifier) extends TypeTree
   case class CaseClassType(id: Identifier) extends TypeTree
+  case class OptionType(base: TypeTree) extends TypeTree
 
   // Definitions