diff --git a/src/field/python/FieldExport.impl.h b/src/field/python/FieldExport.impl.h
index 058379e656756d133bec1b45255bbc76cc36c9ea..ecbbbae8ca9d72cd0b9c1db0352159297853a5c7 100644
--- a/src/field/python/FieldExport.impl.h
+++ b/src/field/python/FieldExport.impl.h
@@ -34,6 +34,7 @@
 #include "field/AddToStorage.h"
 #include "field/python/GatherExport.h"
 #include "field/vtk/VTKWriter.h"
+#include "field/vtk/FlagFieldMapping.h"
 
 #include "python_coupling/helper/MplHelpers.h"
 #include "python_coupling/helper/BoostPythonHelpers.h"
@@ -749,8 +750,8 @@ namespace internal {
             .add_property("allocSize", &field_allocSize       < Field_T > )
             .add_property("strides",   &field_strides         < Field_T > )
             .add_property("offsets",   &field_offsets         < Field_T > )
-            .def("clone",              &Field_T::clone                    , return_value_policy<manage_new_object>())
-            .def("cloneUninitialized", &Field_T::cloneUninitialized       , return_value_policy<manage_new_object>())
+            .def("clone",              &Field_T::clone             , return_value_policy<manage_new_object>())
+            .def("cloneUninitialized", &Field_T::cloneUninitialized, return_value_policy<manage_new_object>())
             .def("swapDataPointers",   &field_swapDataPointers< Field_T > )
             .def("__getitem__",        &field_getCellXYZ      < Field_T > )
             .def("__setitem__",        &field_setCellXYZ      < Field_T > )
@@ -1087,6 +1088,150 @@ namespace internal {
          return exporter.getCreatedWriter();
       }
    }
+
+   //===================================================================================================================
+   //
+   //  createFlagFieldVTKWriter
+   //
+   //===================================================================================================================
+
+   class CreateFlagFieldVTKWriterExporter
+   {
+   public:
+      CreateFlagFieldVTKWriterExporter( const shared_ptr<StructuredBlockStorage> & blocks,
+                                        ConstBlockDataID fieldId, const std::string & vtkName,
+                                        boost::python::dict flagMapping)
+         : blocks_( blocks ), fieldId_(fieldId), vtkName_( vtkName ), flagMapping_( flagMapping )
+      {}
+
+      template< typename FieldType>
+      void operator() ( python_coupling::NonCopyableWrap<FieldType> )
+      {
+         using namespace boost::python;
+
+         IBlock * firstBlock =  & ( * blocks_->begin() );
+         if( firstBlock->isDataClassOrSubclassOf<FieldType>(fieldId_) )
+         {
+            typedef typename FieldType::flag_t flag_t;
+            typedef field::FlagFieldMapping<FieldType, flag_t> FFMapping;
+            auto uncastedWriter = shared_ptr<FFMapping >( new FFMapping(fieldId_, vtkName_));
+            writer_ = uncastedWriter;
+            auto keys = flagMapping_.keys();
+
+            for( int i=0; i < len(keys); ++i ) {
+               uncastedWriter->addMapping(FlagUID(extract<std::string>(keys[i])),
+                                          extract<flag_t>(flagMapping_[keys[i]]) );
+            }
+         }
+
+      }
+
+      shared_ptr< vtk::BlockCellDataWriterInterface > getCreatedWriter() {
+         return writer_;
+      }
+
+   private:
+      shared_ptr< vtk::BlockCellDataWriterInterface > writer_;
+      shared_ptr< StructuredBlockStorage > blocks_;
+      ConstBlockDataID fieldId_;
+      std::string vtkName_;
+      boost::python::dict flagMapping_;
+   };
+
+
+   template<typename FieldTypes>
+   inline shared_ptr<vtk::BlockCellDataWriterInterface> createFlagFieldVTKWriter(const shared_ptr<StructuredBlockStorage> & blocks,
+                                                                                 const std::string & name,
+                                                                                 boost::python::dict flagMapping,
+                                                                                 const std::string & nameInVtkOutput = "" )
+   {
+      std::string vtkName = nameInVtkOutput;
+      if( vtkName.size() == 0)
+         vtkName = name;
+
+      if ( blocks->begin() == blocks->end() )
+         return shared_ptr<vtk::BlockCellDataWriterInterface>();
+      auto fieldID = python_coupling::blockDataIDFromString( *blocks, name );
+
+      CreateFlagFieldVTKWriterExporter exporter(blocks, fieldID, vtkName, flagMapping);
+      python_coupling::for_each_noncopyable_type< FieldTypes >  ( boost::ref(exporter) );
+      if ( ! exporter.getCreatedWriter() ) {
+         PyErr_SetString( PyExc_ValueError, "Failed to create writer");
+         throw boost::python::error_already_set();
+      }
+      else {
+         return exporter.getCreatedWriter();
+      }
+   }
+
+
+   //===================================================================================================================
+   //
+   //  createBinarizationFieldWriter
+   //
+   //===================================================================================================================
+
+   class CreateBinarizationVTKWriterExporter
+   {
+   public:
+      CreateBinarizationVTKWriterExporter( const shared_ptr<StructuredBlockStorage> & blocks,
+                                           ConstBlockDataID fieldId, const std::string & vtkName, uint_t mask )
+         : blocks_( blocks ), fieldId_(fieldId), vtkName_( vtkName ), mask_(mask)
+      {}
+
+      template< typename FieldType>
+      void operator() ( python_coupling::NonCopyableWrap<FieldType> )
+      {
+         using namespace boost::python;
+
+         IBlock * firstBlock =  & ( * blocks_->begin() );
+         if( firstBlock->isDataClassOrSubclassOf<FieldType>(fieldId_) )
+         {
+            typedef field::BinarizationFieldWriter<FieldType> Writer;
+            writer_ = shared_ptr<Writer>( new Writer(fieldId_, vtkName_,
+                                                     static_cast<typename FieldType::value_type>(mask_) ));
+         }
+      }
+
+      shared_ptr< vtk::BlockCellDataWriterInterface > getCreatedWriter() {
+         return writer_;
+      }
+
+   private:
+      shared_ptr< vtk::BlockCellDataWriterInterface > writer_;
+      shared_ptr< StructuredBlockStorage > blocks_;
+      ConstBlockDataID fieldId_;
+      std::string vtkName_;
+      uint_t mask_;
+   };
+
+
+   template<typename FieldTypes>
+   inline shared_ptr<vtk::BlockCellDataWriterInterface> createBinarizationVTKWriter(const shared_ptr<StructuredBlockStorage> & blocks,
+                                                                                    const std::string & name,
+                                                                                    uint_t mask,
+                                                                                    const std::string & nameInVtkOutput = "" )
+   {
+      std::string vtkName = nameInVtkOutput;
+      if( vtkName.size() == 0)
+         vtkName = name;
+
+      if ( blocks->begin() == blocks->end() )
+         return shared_ptr<vtk::BlockCellDataWriterInterface>();
+      auto fieldID = python_coupling::blockDataIDFromString( *blocks, name );
+
+      CreateBinarizationVTKWriterExporter exporter(blocks, fieldID, vtkName, mask);
+      python_coupling::for_each_noncopyable_type< FieldTypes >  ( boost::ref(exporter) );
+      if ( ! exporter.getCreatedWriter() ) {
+         PyErr_SetString( PyExc_ValueError, "Failed to create writer");
+         throw boost::python::error_already_set();
+      }
+      else {
+         return exporter.getCreatedWriter();
+      }
+   }
+
+
 } // namespace internal
 
 
@@ -1127,6 +1272,26 @@ void exportFields()
                                                                     ( arg("ghostLayers") = uint_t(1) ) ) );
 
    def( "createVTKWriter", &internal::createVTKWriter<FieldTypes>, ( arg("blocks"), arg("name"), arg("vtkName")="" ));
+
+
+   typedef boost::mpl::vector<
+           FlagField<uint8_t>,
+           FlagField<uint16_t>,
+           FlagField<uint32_t>,
+           FlagField<uint64_t> > FlagFields;
+
+   def( "createFlagFieldVTKWriter", &internal::createFlagFieldVTKWriter<FlagFields>,
+                                   ( arg("blocks"), arg("name"), arg("flagMapping"), arg("vtkName")="" ));
+
+
+   typedef boost::mpl::vector<
+           Field<uint8_t,1 >,
+           Field<uint16_t, 1>,
+           Field<uint32_t, 1>,
+           Field<uint64_t, 1> > UintFields;
+
+   def( "createBinarizationVTKWriter", &internal::createBinarizationVTKWriter<UintFields>,
+        ( arg("blocks"), arg("name"), arg("mask"), arg("vtkName")="" ));
 }
 
 
diff --git a/src/field/vtk/FlagFieldMapping.h b/src/field/vtk/FlagFieldMapping.h
index dbda66b788df794395312e0b71b4fb4deac322fe..8b25ce58e6dea759214898243d717ce5ab97fde8 100644
--- a/src/field/vtk/FlagFieldMapping.h
+++ b/src/field/vtk/FlagFieldMapping.h
@@ -30,7 +30,6 @@ namespace walberla {
 namespace field {
 
 
-
 template< typename FlagField_T, typename T >
 class FlagFieldMapping : public vtk::BlockCellDataWriter<T,1>
 {
@@ -84,6 +83,38 @@ protected:
 }; // FlagFieldMapping
 
 
+template<typename FieldType, typename TargetType=uint8_t>
+class BinarizationFieldWriter : public vtk::BlockCellDataWriter<TargetType,1>
+{
+   typedef typename FieldType::value_type SrcType;
+
+public:
+   BinarizationFieldWriter( const ConstBlockDataID fieldID, const std::string& id, SrcType mask) :
+           vtk::BlockCellDataWriter<TargetType,1>( id ), fieldID_( fieldID ), field_( NULL ), mask_( mask ) {}
+
+protected:
+
+   void configure()  {
+      WALBERLA_ASSERT_NOT_NULLPTR( this->block_ );
+      field_ = this->block_->template getData< FieldType >( fieldID_ );
+   }
+
+   TargetType evaluate( const cell_idx_t x, const cell_idx_t y, const cell_idx_t z, const cell_idx_t /*f*/ )
+   {
+      WALBERLA_ASSERT_NOT_NULLPTR( field_ );
+      if (field_->get(x,y,z) & mask_) {
+         return TargetType(1);
+      } else {
+         return TargetType(0);
+      }
+   }
+   const ConstBlockDataID fieldID_;
+   const FieldType*       field_;
+
+   SrcType mask_;
+}; // BinaryFieldWriter
+
+
 
 } // namespace field
 } // namespace walberla
diff --git a/src/mesh/python/Exports.impl.h b/src/mesh/python/Exports.impl.h
index 5b76ff0819c1dd9f79f7d28671b9ad415e76f3b4..d47cd2f7da53984c33cf93b8df31fb8e832f110c 100644
--- a/src/mesh/python/Exports.impl.h
+++ b/src/mesh/python/Exports.impl.h
@@ -151,7 +151,6 @@ void exportModuleToPython()
    ;
 
 
-
 }
 
 
diff --git a/src/vtk/python/Exports.cpp b/src/vtk/python/Exports.cpp
index 94c0906b1c008518db0fa980d5d27d92f8ee22f0..86fe6e26f3ec502e9ec7288e3254b053c0084527 100644
--- a/src/vtk/python/Exports.cpp
+++ b/src/vtk/python/Exports.cpp
@@ -40,9 +40,10 @@ namespace internal {
 
    shared_ptr<VTKOutput> VTKOutput_create(const shared_ptr<StructuredBlockStorage> & sbs, const std::string & identifier,
                                           const std::string & baseFolder, const std::string & executionFolder,
-                                          const bool binary, const bool littleEndian, const bool useMPIIO )
+                                          const bool binary, const bool littleEndian, const bool useMPIIO,
+                                          uint_t ghostLayers=0)
    {
-      return createVTKOutput_BlockData(*sbs, identifier, 1, 0, false, baseFolder, executionFolder,
+      return createVTKOutput_BlockData(*sbs, identifier, 1, ghostLayers, false, baseFolder, executionFolder,
                                        true, binary, littleEndian, useMPIIO, 0);
    }
 
@@ -72,15 +73,18 @@ void exportModuleToPython()
        ;
 
    def("makeOutput", internal::VTKOutput_create, (arg("blocks"), arg("name"), arg("baseFolder")=".",
-                                                  arg("executionFolder")="vtk", arg("binary")=true, arg("littleEndian")=true, arg("useMPIIO")=true));
+                                                  arg("executionFolder")="vtk", arg("binary")=true,
+                                                  arg("littleEndian")=true, arg("useMPIIO")=true,
+                                                  arg("ghostLayers")=0));
 
    class_<VTKOutput, shared_ptr<VTKOutput>, boost::noncopyable > ("VTKOutput", no_init)
-      .def( "addCellDataWriter", &VTKOutput::addCellDataWriter )
-      .def( "write"           , &internal::VTKOutput_write  )
+      .def( "addCellDataWriter"     , &VTKOutput::addCellDataWriter )
+      .def( "write"                 , &internal::VTKOutput_write )
+      .def( "__call__"              , &internal::VTKOutput_write )
       .def( "addAABBInclusionFilter", &VTKOutput::addAABBInclusionFilter )
       .def( "addAABBExclusionFilter", &VTKOutput::addAABBExclusionFilter )
-      .def( "setSamplingResolution", p_setSamplingResolution1 )
-      .def( "setSamplingResolution", p_setSamplingResolution2 )
+      .def( "setSamplingResolution" , p_setSamplingResolution1 )
+      .def( "setSamplingResolution" , p_setSamplingResolution2 )
       ;
 }