diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/tools/VcfFilter.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/tools/VcfFilter.scala
index 92e82b96834eb66a192d93605dd2c81ba4e60583..981203de4652d72e16b5a0b0018d05679943b984 100644
--- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/tools/VcfFilter.scala
+++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/tools/VcfFilter.scala
@@ -17,7 +17,7 @@ package nl.lumc.sasc.biopet.tools
 
 import java.io.File
 
-import htsjdk.variant.variantcontext.VariantContext
+import htsjdk.variant.variantcontext.{ GenotypeType, VariantContext }
 import htsjdk.variant.variantcontext.writer.{ AsyncVariantContextWriter, VariantContextWriterBuilder }
 import htsjdk.variant.vcf.VCFFileReader
 import nl.lumc.sasc.biopet.core.config.Configurable
@@ -72,6 +72,7 @@ object VcfFilter extends ToolCommand {
                   minSamplesPass: Int = 1,
                   mustHaveVariant: List[String] = Nil,
                   calledIn: List[String] = Nil,
+                  mustHaveGenotype: List[(String, GenotypeType)] = Nil,
                   deNovoInSample: String = null,
                   resToDom: List[Trio] = Nil,
                   trioCompound: List[Trio] = Nil,
@@ -126,6 +127,12 @@ object VcfFilter extends ToolCommand {
     opt[String]("calledIn") unbounded () valueName "<sample>" action { (x, c) =>
       c.copy(calledIn = x :: c.calledIn)
     } text "Must be called in this sample"
+    opt[String]("mustHaveGenotype") unbounded () valueName "<sample:genotype>" action { (x, c) =>
+      c.copy(mustHaveGenotype = (x.split(":")(0), GenotypeType.valueOf(x.split(":")(1))) :: c.mustHaveGenotype)
+    } validate { x =>
+      if (x.split(":").length == 2 && GenotypeType.values().contains(x.split(":")(1))) success
+      else failure("--mustHaveGenotype should be in this format: sample:genotype")
+    } text "Must have genotoype <genotype> for this sample. Genotype can be " + GenotypeType.values().mkString(", ")
     opt[String]("diffGenotype") unbounded () valueName "<sample:sample>" action { (x, c) =>
       c.copy(diffGenotype = (x.split(":")(0), x.split(":")(1)) :: c.diffGenotype)
     } validate { x => if (x.split(":").length == 2) success else failure("--notSameGenotype should be in this format: sample:sample")
@@ -184,6 +191,7 @@ object VcfFilter extends ToolCommand {
         minAlternateDepth(record, cmdArgs.minAlternateDepth, cmdArgs.minSamplesPass) &&
         (cmdArgs.mustHaveVariant.isEmpty || mustHaveVariant(record, cmdArgs.mustHaveVariant)) &&
         calledIn(record, cmdArgs.calledIn) &&
+        hasGenotype(record, cmdArgs.mustHaveGenotype) &&
         (cmdArgs.diffGenotype.isEmpty || cmdArgs.diffGenotype.forall(x => notSameGenotype(record, x._1, x._2))) &&
         (
           cmdArgs.filterHetVarToHomVar.isEmpty ||
@@ -220,6 +228,16 @@ object VcfFilter extends ToolCommand {
     else true
   }
 
+  /**
+   * Checks if given genotypes for given samples are there
+   * @param record VCF record
+   * @param samplesGenotypes samples and their associated genotypes to be checked (of format sample:genotype)
+   * @return false when filter fails
+   */
+  def hasGenotype(record: VariantContext, samplesGenotypes: List[(String, GenotypeType)]): Boolean = {
+    samplesGenotypes.forall(x => record.getGenotype(x._1).getType == x._2)
+  }
+
   /**
    * Checks if record has atleast minQualScore
    * @param record VCF record
diff --git a/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/tools/VcfFilterTest.scala b/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/tools/VcfFilterTest.scala
index 150e3eea3bbf953838754679c6e0404c0acf760c..2b47405a46b9971aab59ff2c4eaa088efea7f052 100644
--- a/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/tools/VcfFilterTest.scala
+++ b/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/tools/VcfFilterTest.scala
@@ -15,8 +15,11 @@
  */
 package nl.lumc.sasc.biopet.tools
 
+import java.io.File
 import java.nio.file.Paths
 
+import htsjdk.variant.variantcontext.GenotypeType
+import htsjdk.variant.vcf.VCFFileReader
 import org.scalatest.Matchers
 import org.scalatest.mock.MockitoSugar
 import org.scalatest.testng.TestNGSuite
@@ -37,6 +40,7 @@ class VcfFilterTest extends TestNGSuite with MockitoSugar with Matchers {
   }
 
   val vepped_path = resourcePath("/VEP_oneline.vcf")
+  val vepped = new File(vepped_path)
   val rand = new Random()
 
   @Test def testOutputTypeVcf() = {
@@ -57,4 +61,24 @@ class VcfFilterTest extends TestNGSuite with MockitoSugar with Matchers {
     main(arguments)
   }
 
+  @Test def testHasGenotype() = {
+    val reader = new VCFFileReader(vepped, false)
+    val record = reader.iterator().next()
+
+    hasGenotype(record, List(("Child_7006504", GenotypeType.HET))) shouldBe true
+    hasGenotype(record, List(("Child_7006504", GenotypeType.HOM_VAR))) shouldBe false
+    hasGenotype(record, List(("Child_7006504", GenotypeType.HOM_REF))) shouldBe false
+    hasGenotype(record, List(("Child_7006504", GenotypeType.NO_CALL))) shouldBe false
+    hasGenotype(record, List(("Child_7006504", GenotypeType.MIXED))) shouldBe false
+
+    hasGenotype(record, List(("Mother_7006508", GenotypeType.HET))) shouldBe false
+    hasGenotype(record, List(("Mother_7006508", GenotypeType.HOM_VAR))) shouldBe false
+    hasGenotype(record, List(("Mother_7006508", GenotypeType.HOM_REF))) shouldBe true
+    hasGenotype(record, List(("Mother_7006508", GenotypeType.NO_CALL))) shouldBe false
+    hasGenotype(record, List(("Mother_7006508", GenotypeType.MIXED))) shouldBe false
+
+    hasGenotype(record, List(("Mother_7006508", GenotypeType.HOM_REF), ("Child_7006504", GenotypeType.HET))) shouldBe true
+    hasGenotype(record, List(("Mother_7006508", GenotypeType.HET), ("Child_7006504", GenotypeType.HOM_REF))) shouldBe false
+  }
+
 }