diff --git a/source/Applications/bChannelA/bChannelA.cpp b/source/Applications/bChannelA/bChannelA.cpp
index 3163b297b556def4c1dba04d992f0aeeffb616b9..8755b348e02f9cc7a942520088843fa0c9a64e50 100644
--- a/source/Applications/bChannelA/bChannelA.cpp
+++ b/source/Applications/bChannelA/bChannelA.cpp
@@ -288,15 +288,22 @@ void run(string configname)
 
          ////////////////////////////////////////////
          //METIS
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, MetisPartitioner::KWAY));
+         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, MetisPartitioner::RECURSIVE));
+         
+         //DEBUG METIS 
+         //////////////////////////////////////////////////////////////////////////
+         dynamic_pointer_cast<MetisPartitioningGridVisitor>(metisVisitor)->setNumberOfProcesses(2000);
+         grid->accept(metisVisitor);
+         WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
+         ppblocks.process(0);
+         return;
+         //////////////////////////////////////////////////////////////////////////
+
          ////////////////////////////////////////////
          if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
          InteractorsHelper intHelper(grid, metisVisitor);
          intHelper.addInteractor(addWallZminInt);
          intHelper.addInteractor(addWallZmaxInt);
-         
-
-
          intHelper.selectBlocks();
          if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
          //////////////////////////////////////
diff --git a/source/Applications/bChannelA/configBombadilpChannel.cfg b/source/Applications/bChannelA/configBombadilpChannel.cfg
index 98edd84b2df0eded00291ad51be15b6fcd191699..077bdf3f0dd57bdda16b11b3dceda4465e1ebb76 100644
--- a/source/Applications/bChannelA/configBombadilpChannel.cfg
+++ b/source/Applications/bChannelA/configBombadilpChannel.cfg
@@ -2,7 +2,7 @@
 #Simulation parameters for porous channel
 #
 
-pathOut = d:/temp/BreugemChannelAnisotrop2
+pathOut = d:/temp/BreugemChannelAnisotrop3
 pathGeo = g:/pChannelBA/cubes
 numOfThreads = 1
 availMem = 14e9
@@ -13,7 +13,7 @@ logToFile = false
 boundingBox = 0 0 0 600 400 400
 #boundingBox = 1 1 1 4 4 4
 refineLevel = 0
-deltaXfine  = 10
+deltaXfine  = 1
 #deltaXfine  = 1
 blocknx = 20 20 20
 #blocknx = 4 4 4
diff --git a/source/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.cpp b/source/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.cpp
index cd61f741feb329bc9111a9e9ea36769cccb3a90c..a996383ef3538c959a3a56ca21865eb9c7075ca8 100644
--- a/source/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.cpp
+++ b/source/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.cpp
@@ -5,6 +5,7 @@
 #include "Block3D.h"
 #include "Grid3D.h"
 #include "Communicator.h"
+#include "D3Q27System.h"
 
 using namespace std;
 
@@ -226,7 +227,6 @@ void MetisPartitioningGridVisitor::buildMetisGraphLevelBased(SPtr<Grid3D> grid,
 
         const int vertexWeight = 1;
         int edges = 0;
-        const int edgeWeight= 1;
 
         for(SPtr<Block3D> block : tBlockID)
         {
@@ -241,7 +241,7 @@ void MetisPartitioningGridVisitor::buildMetisGraphLevelBased(SPtr<Grid3D> grid,
                     if (this->getPartitionCondition(neighBlock, level))
                     {
                         edges++;
-                        metis.adjwgt.push_back(edgeWeight);
+                        metis.adjwgt.push_back(getEdgeWeight(dir));
                         metis.adjncy.push_back(neighBlock->getLocalID());
                     }
                 }
@@ -296,6 +296,23 @@ void MetisPartitioningGridVisitor::clear()
     parts.clear();
 }
 //////////////////////////////////////////////////////////////////////////
+int MetisPartitioningGridVisitor::getEdgeWeight(int dir)
+{
+   using namespace D3Q27System;
+   if (dir <= B)
+   {
+      return 100;
+   } 
+   else if (dir >= NE && dir <= TS)
+   {
+      return 10;
+   }
+   else if (dir >= TNE)
+   {
+      return 1;
+   }
+}
+//////////////////////////////////////////////////////////////////////////
 void MetisPartitioningGridVisitor::setNumberOfProcesses(int np)
 {
    numberOfProcesses = np;
diff --git a/source/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.h b/source/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.h
index 795478e3ae052a3e5a8493b72cf15151ac09e620..0cb2e05a7743f7880a0f64ef9c11b1201fae92de 100644
--- a/source/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.h
+++ b/source/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.h
@@ -46,6 +46,7 @@ protected:
    bool getPartitionCondition(SPtr<Block3D> block, PartLevel level);
    void distributePartitionData(SPtr<Grid3D> grid, PartLevel level);
    void clear();
+   int getEdgeWeight(int dir);
    int  nofSegments;
    int numOfDirs;
    std::vector<int> blockID;