diff --git a/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp b/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp
index 6140b97c42fdafdfceb72d81897cd50bcf26d032..93059ccde288c5d37eea4591d0486d326152bbe0 100644
--- a/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp
+++ b/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp
@@ -54,12 +54,12 @@ public:
 // calls
 class Kernel {
 public:
-  Kernel(Function* _KF, unsigned _gridDim = 0, std::vector<Value*>
-         _globalWGSize = std::vector<Value*>(),
-         std::vector<unsigned>* _inArgMap = NULL, unsigned _blockDim = 0,
+  Kernel(Function* _KF, std::vector<unsigned>* _inArgMap = NULL,
+         unsigned _gridDim = 0, std::vector<Value*>
+         _globalWGSize = std::vector<Value*>(), unsigned _blockDim = 0,
          std::vector<Value*> _localWGSize = std::vector<Value*>())
-    : KernelFunction(_KF),
-      gridDim(_gridDim), globalWGSize(_globalWGSize), inArgMap(_inArgMap),
+    : KernelFunction(_KF), inArgMap(_inArgMap),
+      gridDim(_gridDim), globalWGSize(_globalWGSize),
       blockDim(_blockDim), localWGSize(_localWGSize) {
 
     assert(gridDim == globalWGSize.size()
@@ -69,11 +69,11 @@ public:
   }
 
   Function* KernelFunction;
+  std::vector<unsigned>* inArgMap;
   unsigned gridDim;
   unsigned blockDim;
   std::vector<Value*> globalWGSize;
   std::vector<Value*> localWGSize;
-  std::vector<unsigned>* inArgMap;
 };
 
 // Helper function declarations
@@ -716,8 +716,8 @@ void CodeGenTraversal::codeGen(DFLeafNode* N) {
 
   if (!pLevel || !pReplFactor) {
     KernelLaunchNode = PNode;
-    kernel = new Kernel(NULL, N->getNumOfDim(), N->getDimLimits(), N->getInArgMap());
-    // TODO: Find a better way of choosing parameters
+    kernel = new Kernel(NULL, N->getInArgMap(), N->getNumOfDim(), N->getDimLimits());
+    // TODO: Find a good way of choosing parameters - is this required?
     //kernel->gridDim = N->getNumOfDim();
     //kernel->blockDim = N->getNumOfDim();
     //kernel->globalWGSize = N->getDimLimits();
@@ -736,17 +736,19 @@ void CodeGenTraversal::codeGen(DFLeafNode* N) {
     errs() << "*************** Entering else part **************\n";
     KernelLaunchNode = PNode->getParent();
     assert((PNode->getNumOfDim() == N->getNumOfDim()) && "Dimension number must match");
-    /*
-    KernelLaunchNode = PNode->getParent();
-    kernel->gridDim = PNode->getNumOfDim();
-    kernel->blockDim = N->getNumOfDim();
-    assert((kernel->gridDim == kernel->blockDim) && "Dimension number must match");
-    std::vector<Value*> numOfBlocks = PNode->getDimLimits();
-    kernel->localWGSize = N->getDimLimits();
-    for (unsigned i = 0; i < kernel->gridDim; i++) {
-      //BinaryOperator* MulInst = BinaryOperator::CreateMul(kernel->localWGSize[i],numOfBlocks[i]);
-      //kernel->globalWGSize.push_back(MulInst);
-    }*/
+    // Contains the instructions generating the kernel configuration parameters
+    std::vector<Value*> globalWGSizeInsts;
+    for (unsigned i = 0; i < PNode->getNumOfDim(); i++) {
+      BinaryOperator* MulInst = BinaryOperator::CreateMul(PNode->getDimLimits()[i],N->getDimLimits()[i]);
+      globalWGSizeInsts.push_back(MulInst);
+    }
+    kernel = new Kernel(NULL,                 // kernel function
+                        N->getInArgMap(),     // kenel argument mapping
+                        PNode->getNumOfDim(), // gridDim
+                        globalWGSizeInsts,    // grid size
+                        N->getNumOfDim(),     // blockDim
+                        N->getDimLimits());   // block size
+
   }
 
   std::vector<IntrinsicInst *> IItoRemove;