diff --git a/cv-node/config/config.json b/cv-node/config/config.json
index 954cb0882ab338781dd3b9ec8cca48fe7b3364f7..4e4a982b7e8fa0c09f71f07b651fc2ddfd97fecb 100644
--- a/cv-node/config/config.json
+++ b/cv-node/config/config.json
@@ -10,6 +10,7 @@
 		"frame_delay": 100,
 		"num_frames": 25,
 		"assume_zero_tangential_distortion": true,
+		"fix_aspect_ratio": true,
 		"fix_principal_point_at_center": true,
 		"use_fisheye_model": false,
 		"fix_k1": false,
@@ -19,7 +20,8 @@
 		"fix_k5": true,
 		"save": true,
 		"use_intrinsics": true,
-		"use_extrinsics": true
+		"use_extrinsics": true,
+		"flip_vertical": false
 	},
 	"camera": {
 		"name": "Pansonic Lumix DMC-FZ300",
diff --git a/cv-node/include/ftl/calibrate.hpp b/cv-node/include/ftl/calibrate.hpp
index 7af77206d686e2043a792454c21cce7625e1e6c5..1982b4dc192816d6f2e4ac8d8f5df2eabd371886 100644
--- a/cv-node/include/ftl/calibrate.hpp
+++ b/cv-node/include/ftl/calibrate.hpp
@@ -5,6 +5,7 @@
 #include <ftl/local.hpp>
 #include <string>
 #include <vector>
+#include <nlohmann/json.hpp>
 
 namespace cv {
 class FileStorage;
@@ -21,7 +22,7 @@ class Calibrate {
 		enum InputType { INVALID, CAMERA, VIDEO_FILE, IMAGE_LIST };
 
 		void write(cv::FileStorage& fs) const;
-		void read(const cv::FileNode& node);
+		void read(const nlohmann::json& node);
 		void validate();
 		//Mat nextImage();
 
@@ -65,7 +66,7 @@ class Calibrate {
 
 	};
 	public:
-	Calibrate(ftl::LocalSource *s, const std::string &cal);
+	Calibrate(ftl::LocalSource *s, nlohmann::json &config);
 	
 	bool recalibrate();
 	
diff --git a/cv-node/src/calibrate.cpp b/cv-node/src/calibrate.cpp
index a74f999f44b123732dc923ed12236534d8fd6853..ef2e6fcb7dcf78220a54c80c1aac257de51b42fc 100644
--- a/cv-node/src/calibrate.cpp
+++ b/cv-node/src/calibrate.cpp
@@ -46,30 +46,30 @@ void Calibrate::Settings::write(FileStorage& fs) const                        //
               //<< "Input" << input
        << "}";
 }
-void Calibrate::Settings::read(const FileNode& node)                          //Read serialization for this class
+void Calibrate::Settings::read(const nlohmann::json& node)                          //Read serialization for this class
 {
-    node["BoardSize_Width" ] >> boardSize.width;
-    node["BoardSize_Height"] >> boardSize.height;
-    node["Calibrate_Pattern"] >> patternToUse;
-    node["Square_Size"]  >> squareSize;
-    node["Calibrate_NrOfFrameToUse"] >> nrFrames;
-    node["Calibrate_FixAspectRatio"] >> aspectRatio;
-    node["Write_DetectedFeaturePoints"] >> writePoints;
-    node["Write_extrinsicParameters"] >> writeExtrinsics;
-    node["Write_gridPoints"] >> writeGrid;
+    boardSize.width = node["board_size"][0];
+    boardSize.height = node["board_size"][1];
+    //node["Calibrate_Pattern"] >> patternToUse;
+    squareSize = node["square_size"];
+    nrFrames = node["num_frames"];
+    aspectRatio = node["fix_aspect_ratio"];
+    //node["Write_DetectedFeaturePoints"] >> writePoints;
+    //node["Write_extrinsicParameters"] >> writeExtrinsics;
+    //node["Write_gridPoints"] >> writeGrid;
     //node["Write_outputFileName"] >> outputFileName;
-    node["Calibrate_AssumeZeroTangentialDistortion"] >> calibZeroTangentDist;
-    node["Calibrate_FixPrincipalPointAtTheCenter"] >> calibFixPrincipalPoint;
-    node["Calibrate_UseFisheyeModel"] >> useFisheye;
-    node["Input_FlipAroundHorizontalAxis"] >> flipVertical;
+    calibZeroTangentDist = node["assume_zero_tangential_distortion"];
+    calibFixPrincipalPoint = node["fix_principal_point_at_center"];
+    useFisheye =  node["use_fisheye_model"];
+    flipVertical = node["flip_vertical"];
     //node["Show_UndistortedImage"] >> showUndistorsed;
     //node["Input"] >> input;
-    node["Input_Delay"] >> delay;
-    node["Fix_K1"] >> fixK1;
-    node["Fix_K2"] >> fixK2;
-    node["Fix_K3"] >> fixK3;
-    node["Fix_K4"] >> fixK4;
-    node["Fix_K5"] >> fixK5;
+    delay = node["frame_delay"];
+    fixK1 = node["fix_k1"];
+    fixK2 = node["fix_k2"];
+    fixK3 = node["fix_k3"];
+    fixK4 = node["fix_k4"];
+    fixK5 = node["fix_k5"];
 
     validate();
 }
@@ -112,7 +112,7 @@ void Calibrate::Settings::validate()
         if (calibFixPrincipalPoint) flag |= fisheye::CALIB_FIX_PRINCIPAL_POINT;
     }
 
-    calibrationPattern = NOT_EXISTING;
+    /*calibrationPattern = NOT_EXISTING;
     if (!patternToUse.compare("CHESSBOARD")) calibrationPattern = CHESSBOARD;
     if (!patternToUse.compare("CIRCLES_GRID")) calibrationPattern = CIRCLES_GRID;
     if (!patternToUse.compare("ASYMMETRIC_CIRCLES_GRID")) calibrationPattern = ASYMMETRIC_CIRCLES_GRID;
@@ -120,7 +120,7 @@ void Calibrate::Settings::validate()
     {
         LOG(ERROR) << " Camera calibration mode does not exist: " << patternToUse;
         goodInput = false;
-    }
+    }*/
     atImageList = 0;
 
 }
@@ -166,16 +166,16 @@ bool runCalibration(Calibrate::Settings& s, Size imageSize, Mat&  cameraMatrix,
                            vector<vector<Point2f> > imagePoints, float grid_width, bool release_object);
 
 
-Calibrate::Calibrate(ftl::LocalSource *s, const std::string &cal) : local_(s) {
-    FileStorage fs(cal, FileStorage::READ); // Read the settings
+Calibrate::Calibrate(ftl::LocalSource *s, nlohmann::json &config) : local_(s) {
+    /*FileStorage fs(cal, FileStorage::READ); // Read the settings
     if (!fs.isOpened())
     {
         LOG(ERROR) << "Could not open the configuration file: \"" << cal << "\"";
         return;
-    }
+    }*/
     //fs["Settings"] >> settings_;
-    settings_.read(fs["Settings"]);
-    fs.release();
+    settings_.read(config);
+    //fs.release();
     
     if (!settings_.goodInput)
     {
@@ -534,7 +534,7 @@ static bool _runCalibration( Calibrate::Settings& s, Size& imageSize, Mat& camer
     }
 
     vector<vector<Point3f> > objectPoints(1);
-    calcBoardCornerPositions(s.boardSize, s.squareSize, objectPoints[0], s.calibrationPattern);
+    calcBoardCornerPositions(s.boardSize, s.squareSize, objectPoints[0], Calibrate::Settings::CHESSBOARD);
     objectPoints[0][s.boardSize.width - 1].x = objectPoints[0][0].x + grid_width;
     newObjPoints = objectPoints[0];
 
diff --git a/cv-node/src/main.cpp b/cv-node/src/main.cpp
index 95b04d3ff1dea95c06f204c8674399e95d7ebff8..4fbe18c48921d5305c088c7da14a4694d5796c2d 100644
--- a/cv-node/src/main.cpp
+++ b/cv-node/src/main.cpp
@@ -111,7 +111,7 @@ int main(int argc, char **argv) {
 	}*/
 	
 	// Perform or load calibration intrinsics + extrinsics
-	Calibrate calibrate(lsrc, OPTION_calibration_config);
+	Calibrate calibrate(lsrc, config["calibration"]);
 	if (config["calibrate"]) calibrate.recalibrate();
 	if (!calibrate.isCalibrated()) LOG(WARNING) << "Cameras are not calibrated!";