diff --git a/src/machineLearning/machineLearning.h b/src/machineLearning/machineLearning.h
index 3065a5d3a4b9a0815c80c2586233a3adbd028444..c965dff0e92b07c277dba3ac61a9abb68c156d8e 100644
--- a/src/machineLearning/machineLearning.h
+++ b/src/machineLearning/machineLearning.h
@@ -62,7 +62,7 @@ typedef machineLearning<xmmHmrTool> xmmTemporalRegression;
 
 /*
 typedef machineLearning<GVF> gvf;
-*/
+//*/
 
 RAPIDMIX_END_NAMESPACE
 
diff --git a/src/signalProcessing/rapidPiPoTools/rapidPiPoHost.cpp b/src/signalProcessing/rapidPiPoTools/rapidPiPoHost.cpp
index 8ad567a95e3048f5f884dc0ed0610486e53e6e5f..6663da43170182caff13ab52db0a34fca1c158fa 100644
--- a/src/signalProcessing/rapidPiPoTools/rapidPiPoHost.cpp
+++ b/src/signalProcessing/rapidPiPoTools/rapidPiPoHost.cpp
@@ -1,8 +1,10 @@
 #include "rapidPiPoHost.h"
 #include <iostream>
+#include <fstream>
 
-//===================== P I P O = H O S T = U T I L S ========================//
+//=========================== H O S T === U T I L S ==========================//
 
+/*
 static const unsigned int maxWordLen = 256;
 
 static bool getPiPoInstanceAndAttrName(const char *attrName,
@@ -29,6 +31,7 @@ static bool getPiPoInstanceAndAttrName(const char *attrName,
 
   return false;
 }
+//*/
 
 
 static void fromPiPoStreamAttributes(PiPoStreamAttributes &src,
@@ -96,7 +99,7 @@ static void toPiPoStreamAttributes(pipoStreamAttributes &src,
   );
 }
 
-//========================= H O S T = M E T H O D S ==========================//
+//========================= H O S T === M E T H O D S ========================//
 
 PiPoHost::PiPoHost() :
 inputStreamAttrs(PIPO_MAX_LABELS),
@@ -212,7 +215,8 @@ PiPoHost::setAttr(const std::string &attrName, double value)
 {
   PiPo::Attr *attr = this->graph->getAttr(attrName.c_str());
   
-  if (attr != NULL) {
+  if (attr != NULL)
+  {
     int iAttr = attr->getIndex();
     return this->graph->setAttr(iAttr, value);
   }
@@ -225,15 +229,19 @@ PiPoHost::setAttr(const std::string &attrName, const std::vector<double> &values
 {
   PiPo::Attr *attr = this->graph->getAttr(attrName.c_str());
 
-  if (attr != NULL) {
+  if (attr != NULL)
+  {
     int iAttr = attr->getIndex();
     double vals[values.size()];
     unsigned int i = 0;
-    for (auto &value : values) {
+
+    for (auto &value : values)
+    {
       vals[i] = value;
       i++;
     }
-    return this->graph->setAttr(iAttr, &vals[0], values.size());
+
+    return this->graph->setAttr(iAttr, &vals[0], static_cast<unsigned int>(values.size()));
   }
 
   return false;
@@ -244,15 +252,19 @@ PiPoHost::setAttr(const std::string &attrName, const std::string &value) // for
 {
   PiPo::Attr *attr = this->graph->getAttr(attrName.c_str());
   
-  if (attr != NULL) {
-    int iAttr = attr->getIndex();
+  if (attr != NULL)
+  {
+    // int iAttr = attr->getIndex();
     PiPo::Type type = attr->getType();
   
-    if (type == PiPo::Type::Enum) {
+    if (type == PiPo::Type::Enum)
+    {
       std::vector<const char *> *list = attr->getEnumList();
       
-      for (int i = 0; i < list->size(); i++) {
-        if (strcmp(list->at(i), value.c_str()) == 0) {
+      for (int i = 0; i < list->size(); i++)
+      {
+        if (strcmp(list->at(i), value.c_str()) == 0)
+        {
           attr->set(0, i);
           return true;
         }
@@ -263,180 +275,215 @@ PiPoHost::setAttr(const std::string &attrName, const std::string &value) // for
   return false;
 }
 
-
-int
-PiPoHost::propagateInputStreamAttributes()
+std::vector<std::string>
+PiPoHost::getAttrNames()
 {
-  if (this->graph != nullptr)
+  std::vector<std::string> res;
+
+  for (unsigned int i = 0; i < this->graph->getNumAttrs(); ++i)
   {
-    return this->graph->streamAttributes(this->inputStreamAttrs.hasTimeTags,
-                                         this->inputStreamAttrs.rate,
-                                         this->inputStreamAttrs.offset,
-                                         this->inputStreamAttrs.dims[0],
-                                         this->inputStreamAttrs.dims[1],
-                                         this->inputStreamAttrs.labels,
-                                         this->inputStreamAttrs.hasVarSize,
-                                         this->inputStreamAttrs.domain,
-                                         this->inputStreamAttrs.maxFrames);
+    res.push_back(this->graph->getAttr(i)->getName());
   }
-    
-  return 0;
-}
-
-
-
-
-// void
-// PiPoHost::streamAttributesChanged(PiPo *pipo, PiPo::Attr *attr) {
-//   this->propagateInputAttributes();
-// }
-
-// void
-// PiPoHost::signalError(PiPo *pipo, std::string errorMsg) {
-//   // todo
-// }
-
-// void
-// PiPoHost::signalWarning(PiPo *pipo, std::string warningMsg) {
-//   // todo
-// }
-
-//--------------------- INPUT STREAM ATTRIBUTES SETTERS ----------------------//
 
-/*
-void
-PiPoHost::setInputHasTimeTags(bool hasTimeTags, bool propagate) {
-  this->inputStreamAttrs.hasTimeTags = hasTimeTags;
+  return res;
+}
 
-  if (propagate) {
-    this->propagateInputAttributes();
-  }
+double
+PiPoHost::getDoubleAttr(const std::string &attrName)
+{
+    PiPo::Attr *attr = this->graph->getAttr(attrName.c_str());
+    
+    if (attr != NULL) {
+        // int iAttr = attr->getIndex();
+        PiPo::Type type = attr->getType();
+        
+        if (type == PiPo::Type::Double) {
+            return attr->getDbl(0);
+        }
+    }
+    
+    return 0;
 }
 
-#define MIN_PIPO_SAMPLERATE (1.0 / 31536000000.0) // once a year
-#define MAX_PIPO_SAMPLERATE (96000000000.0)
+std::vector<double>
+PiPoHost::getDoubleArrayAttr(const std::string &attrName)
+{
+    std::vector<double> res;
+    PiPo::Attr *attr = this->graph->getAttr(attrName.c_str());
+    
+    if (attr != NULL) {
+        // int iAttr = attr->getIndex();
+        PiPo::Type type = attr->getType();
+        
+        if (type == PiPo::Type::Double) {
+            for (int i = 0; i < attr->getSize(); ++i) {
+                res.push_back(attr->getDbl(i));
+            }
+        }
+    }
+    
+    return res;
+}
 
-void
-PiPoHost::setInputFrameRate(double rate, bool propagate) {
-  if (rate <= MIN_PIPO_SAMPLERATE) {
-    this->inputStreamAttrs.rate = MIN_PIPO_SAMPLERATE;
-  } else if (rate >= MAX_PIPO_SAMPLERATE) {
-    this->inputStreamAttrs.rate = MAX_PIPO_SAMPLERATE;
-  } else {
-    this->inputStreamAttrs.rate = rate;
-  }
+std::string
+PiPoHost::getEnumAttr(const std::string &attrName)
+{
+    PiPo::Attr *attr = this->graph->getAttr(attrName.c_str());
+    
+    if (attr != NULL) {
+        // int iAttr = attr->getIndex();
+        PiPo::Type type = attr->getType();
+        
+        if (type == PiPo::Type::Enum) {
+            return attr->getStr(0);
+        }
+    }
 
-  if (propagate) {
-    this->propagateInputAttributes();
-  }
+    return "";
 }
 
-void
-PiPoHost::setInputFrameOffset(double offset, bool propagate) {
-  this->inputStreamAttrs.offset = offset;
+//============================= JSON FORMATTING ==============================//
 
-  if (propagate) {
-    this->propagateInputAttributes();
-  }
+std::string
+PiPoHost::getJSON()
+{
+  Json::Value result = toJSON();
+  return result.toStyledString();
 }
 
 void
-PiPoHost::setInputDims(int width, int height, bool propagate) {
-  this->inputStreamAttrs.dims[0] = width;
-  this->inputStreamAttrs.dims[1] = height;
-  
-  if (propagate) {
-    this->propagateInputAttributes();
-  }
+PiPoHost::writeJSON(const std::string &filepath)
+{
+  Json::Value root = toJSON();
+  std::ofstream jsonOut;
+  jsonOut.open (filepath);
+  Json::StyledStreamWriter writer;
+  writer.write(jsonOut, root);
+  jsonOut.close();
 }
 
-void
-PiPoHost::setInputLabels(const std::vector<std::string> &labels, bool propagate) {
-  const char *labs[labels.size()];
-
-  for (unsigned int i = 0; i < labels.size(); ++i) {
-    labs[i] = labels[i].c_str();
-  }
-
-  this->inputStreamAttrs.labels = &labs[0];
-
-  if (propagate) {
-    this->propagateInputAttributes();
-  }
+bool
+PiPoHost::putJSON(const std::string &jsonMessage)
+{
+  Json::Value parsedFromString;
+  Json::Reader reader;
+  bool parsingSuccessful = reader.parse(jsonMessage, parsedFromString);
+  return (parsingSuccessful && fromJSON(parsedFromString));
 }
 
-void
-PiPoHost::setInputHasVarSize(bool hasVarSize, bool propagate) {
-  this->inputStreamAttrs.hasVarSize = hasVarSize;
-
-  if (propagate) {
-    this->propagateInputAttributes();
-  }
+bool
+PiPoHost::readJSON(const std::string &filepath)
+{
+  Json::Value root;
+  std::ifstream file(filepath);
+  file >> root;
+  return fromJSON(root);
 }
 
-void
-PiPoHost::setInputDomain(double domain, bool propagate) {
-  this->inputStreamAttrs.domain = domain;
+//======================== PROTECTED HOST METHODS ============================//
 
-  if (propagate) {
-    this->propagateInputAttributes();
-  }
-}
-
-void
-PiPoHost::setInputMaxFrames(int maxFrames, bool propagate) {
-  this->inputStreamAttrs.maxFrames = maxFrames;
+Json::Value
+PiPoHost::toJSON() 
+{
+  Json::Value root;
+  Json::Value metadata;
+  Json::Value pipodata;
 
-  if (propagate) {
-    this->propagateInputAttributes();
-  }
-}
+  metadata["creator"] = "RAPID-MIX API";// C++";
+  metadata["version"] = "v0.1.1"; //TODO: This should be a macro someplace
+  metadata["family"] = "pipo";
+    
+  root["metadata"] = metadata;
 
-//--------------------- INPUT STREAM ATTRIBUTES GETTERS ----------------------//
+  pipodata["description"] = this->graphName;
+    
+  Json::Value inputStream;
+  inputStream["hasTimeTags"] = inputStreamAttrs.hasTimeTags;
+  inputStream["rate"] = inputStreamAttrs.rate;
+  inputStream["offset"] = inputStreamAttrs.offset;
+  inputStream["width"] = inputStreamAttrs.dims[0];
+  inputStream["height"] = inputStreamAttrs.dims[1];
+  inputStream["labels"] = inputStreamAttrs.labels;
+  inputStream["hasVarSize"] = inputStreamAttrs.hasVarSize;
+  inputStream["domain"] = inputStreamAttrs.domain;
+  inputStream["maxFrames"] = inputStreamAttrs.maxFrames;
+  
+  Json::Value outputStream;
+  outputStream["hasTimeTags"] = outputStreamAttrs.hasTimeTags;
+  outputStream["rate"] = outputStreamAttrs.rate;
+  outputStream["offset"] = outputStreamAttrs.offset;
+  outputStream["width"] = outputStreamAttrs.dims[0];
+  outputStream["height"] = outputStreamAttrs.dims[1];
+  outputStream["labels"] = outputStreamAttrs.labels;
+  outputStream["hasVarSize"] = outputStreamAttrs.hasVarSize;
+  outputStream["domain"] = outputStreamAttrs.domain;
+  outputStream["maxFrames"] = outputStreamAttrs.maxFrames;
+
+  Json::Value streams;
+  streams["input"] =  inputStream;
+  streams["output"] =  outputStream;
+  
+  pipodata["streamAttributes"] = streams;
+    
+  Json::Value params;
+  int n = this->graph->getNumAttrs();
+  params.resize(static_cast<Json::ArrayIndex>(n));
 
-bool
-PiPoHost::getInputHasTimeTags() {
-  return this->inputStreamAttrs.hasTimeTags;
-}
+  for (unsigned int i = 0; i < n; ++i)
+  {
+    Json::Value param;
+    PiPo::Attr *a = this->graph->getAttr(i);
+    param["name"] = a->getName();
+    param["value"] = a->getDbl(0);
+    params[i] = param;
+  }
+    
+  pipodata["parameters"] = params;
 
-double
-PiPoHost::getInputFrameRate() {
-  return this->inputStreamAttrs.rate;
-}
+  root["pipodata"] = pipodata;
 
-double
-PiPoHost::getInputFrameOffset() {
-  return this->inputStreamAttrs.offset;
+  return root;
 }
 
-void
-PiPoHost::getInputDims(int &width, int &height) {
-  width = this->inputStreamAttrs.dims[0];
-  height = this->inputStreamAttrs.dims[1];
-}
+bool
+PiPoHost::fromJSON(Json::Value &jv)
+{
+  if (jv["metadata"]["family"].asString().compare("pipo") == 0 &&
+    jv["pipodata"].size() > 0) {
 
-void
-PiPoHost::getInputLabels(std::vector<std::string> &labels) {
-  //for (unsigned int i = 0; i < )
-}
+    this->setGraph(jv["pipodata"]["description"].asString());
 
-bool
-PiPoHost::getInputHasVarSize() {
-  return this->inputStreamAttrs.hasVarSize;
+    Json::Value inputStream = jv["pipodata"]["streamAttributes"]["input"];
+    // setInputStreamAttributes(
+    //   inputStream["hasTimeTags"].getDbl()//,
+    //   //...
+    // );
+    return true;
+  }
+  
+  return false;
 }
 
-double
-PiPoHost::getInputDomain() {
-  return this->inputStreamAttrs.domain;
-}
+//========================= PRIVATE HOST METHODS =============================//
 
 int
-PiPoHost::getInputMaxFrames() {
-  return this->inputStreamAttrs.maxFrames;
+PiPoHost::propagateInputStreamAttributes()
+{
+  if (this->graph != nullptr)
+  {
+    return this->graph->streamAttributes(this->inputStreamAttrs.hasTimeTags,
+                                         this->inputStreamAttrs.rate,
+                                         this->inputStreamAttrs.offset,
+                                         this->inputStreamAttrs.dims[0],
+                                         this->inputStreamAttrs.dims[1],
+                                         this->inputStreamAttrs.labels,
+                                         this->inputStreamAttrs.hasVarSize,
+                                         this->inputStreamAttrs.domain,
+                                         this->inputStreamAttrs.maxFrames);
+  }
+    
+  return 0;
 }
-//*/
-
-//--------------------- OUTPUT STREAM ATTRIBUTES GETTERS ---------------------//
 
 void
 PiPoHost::setOutputAttributes(bool hasTimeTags, double rate, double offset,
@@ -473,184 +520,28 @@ PiPoHost::setOutputAttributes(bool hasTimeTags, double rate, double offset,
   this->outputStreamAttrs.maxFrames = maxFrames; 
 }
 
-/*
-bool
-PiPoHost::getOutputHasTimeTags() {
-  return this->outputStreamAttrs.hasTimeTags;
-}
-
-double
-PiPoHost::getOutputFrameRate() {
-  return this->outputStreamAttrs.rate;
-}
-
-double
-PiPoHost::getOutputFrameOffset() {
-  return this->outputStreamAttrs.offset;
-}
-
-void
-PiPoHost::getOutputDims(int &width, int &height) {
-  width = this->outputStreamAttrs.dims[0];
-  height = this->outputStreamAttrs.dims[1];
-}
-
-void
-PiPoHost::getOutputLabels(std::vector<std::string> &labels) {
-  labels.clear();
-
-  for (unsigned int i = 0; this->outputStreamAttrs.numLabels; ++i) {
-
-    if (this->outputStreamAttrs.labels[i] != NULL) {
-      labels.push_back(std::string(this->outputStreamAttrs.labels[i]));
-    } else {
-      labels.push_back("unnamed");
-    }
-  }
-}
-
-bool
-PiPoHost::getOutputHasVarSize() {
-  return this->outputStreamAttrs.hasVarSize;
-}
-
-double
-PiPoHost::getOutputDomain() {
-  return this->outputStreamAttrs.domain;
-}
-
-int
-PiPoHost::getOutputMaxFrames() {
-  return this->outputStreamAttrs.maxFrames;
-}
-
-
 
 
-//===================== PIPO HOST CLASS IMPLEMENTATION =======================//
-
-rapidPiPoHost::rapidPiPoHost(rapidPiPoOwner *rpo) :
-owner(rpo),
-inputStreamAttrs(PIPO_MAX_LABELS),
-outputStreamAttrs(PIPO_MAX_LABELS) {
-  PiPoCollection::init();
-  outputter = new rapidPiPoOutputter(this);
-  chain = nullptr;
-}
-
-rapidPiPoHost::~rapidPiPoHost() {
-  if (chain != nullptr) {
-    delete chain;
-  }
-  delete outputter;
-}
-
-rapidPiPoOwner *
-rapidPiPoHost::getOwner() {
-  return owner;
-}
-
-void
-rapidPiPoHost::onNewFrame(double time, std::vector<PiPoValue> &frame) {
-  std::cout << time << std::endl;
-  owner->onNewFrame(frame);
-}
 // void
-// rapidPiPoHost::onNewFrame(const std::function<void(std::vector<PiPoValue>,
-//                                              rapidPiPoOwner *rpo)> cb) {
-//   outputter->setFrameCallback(cb);
-// }
-
-// void
-// rapidPiPoHost::onNewFrame(std::function<void(std::vector<PiPoValue>)> cb) {
-//   outputter->setSimpleFrameCallback(cb);
-// }
-
-std::vector<PiPoValue>
-rapidPiPoHost::getLastFrame() {
-  return outputter->getLastFrame();
-}
-
-rapidPiPo *
-rapidPiPoHost::setPiPoChain(std::string name) {
-  if (chain != nullptr) {
-    delete chain;
-  }
-
-  chain = new rapidPiPo(name);
-  chain->connect((PiPo *)outputter);
-  return chain;
-}
-
-void
-rapidPiPoHost::clearPiPoChain() {
-  delete chain;
-  chain = nullptr;
-}
-
-void
-rapidPiPoHost::propagateInputAttributes() {
-  if (chain != nullptr) {
-    const char *colNameStr[PIPO_MAX_LABELS];
-
-    unsigned int numCols = this->inputStreamAttrs.dims[0];
-    unsigned int numLabels = this->inputStreamAttrs.numLabels;
-    
-    if (numLabels > PIPO_MAX_LABELS) {
-      numLabels = PIPO_MAX_LABELS;
-    }
-    
-    if (numLabels > numCols) {
-      numLabels = numCols;
-    }
-    
-    std::vector<std::string> labels(numLabels);
-
-    if (numLabels > 0) {
-      for (unsigned int i = 0; i < numLabels; i++) {
-        colNameStr[i] = this->inputStreamAttrs.labels[i];
-      }
-      
-      for (unsigned int i = numLabels; i < numCols; i++) {
-        colNameStr[i] = "unnamed";
-      }
-      
-      for (unsigned int i = 0; i < numCols; ++i) {
-        labels[i] = std::string(colNameStr[i]);
-      }
-    }
-    
-    chain->streamAttributes(this->inputStreamAttrs.hasTimeTags,
-                            this->inputStreamAttrs.rate,
-                            this->inputStreamAttrs.offset,
-                            this->inputStreamAttrs.dims[0],
-                            this->inputStreamAttrs.dims[1],
-                            labels,
-                            this->inputStreamAttrs.hasVarSize,
-                            this->inputStreamAttrs.domain,
-                            this->inputStreamAttrs.maxFrames);
-  }
-}
-
-// void
-// rapidPiPoHost::streamAttributesChanged(PiPo *pipo, PiPo::Attr *attr) {
+// PiPoHost::streamAttributesChanged(PiPo *pipo, PiPo::Attr *attr) {
 //   this->propagateInputAttributes();
 // }
 
 // void
-// rapidPiPoHost::signalError(PiPo *pipo, std::string errorMsg) {
+// PiPoHost::signalError(PiPo *pipo, std::string errorMsg) {
 //   // todo
 // }
 
 // void
-// rapidPiPoHost::signalWarning(PiPo *pipo, std::string warningMsg) {
+// PiPoHost::signalWarning(PiPo *pipo, std::string warningMsg) {
 //   // todo
 // }
 
 //--------------------- INPUT STREAM ATTRIBUTES SETTERS ----------------------//
 
+/*
 void
-rapidPiPoHost::setInputHasTimeTags(bool hasTimeTags, bool propagate) {
+PiPoHost::setInputHasTimeTags(bool hasTimeTags, bool propagate) {
   this->inputStreamAttrs.hasTimeTags = hasTimeTags;
 
   if (propagate) {
@@ -662,7 +553,7 @@ rapidPiPoHost::setInputHasTimeTags(bool hasTimeTags, bool propagate) {
 #define MAX_PIPO_SAMPLERATE (96000000000.0)
 
 void
-rapidPiPoHost::setInputFrameRate(double rate, bool propagate) {
+PiPoHost::setInputFrameRate(double rate, bool propagate) {
   if (rate <= MIN_PIPO_SAMPLERATE) {
     this->inputStreamAttrs.rate = MIN_PIPO_SAMPLERATE;
   } else if (rate >= MAX_PIPO_SAMPLERATE) {
@@ -677,7 +568,7 @@ rapidPiPoHost::setInputFrameRate(double rate, bool propagate) {
 }
 
 void
-rapidPiPoHost::setInputFrameOffset(double offset, bool propagate) {
+PiPoHost::setInputFrameOffset(double offset, bool propagate) {
   this->inputStreamAttrs.offset = offset;
 
   if (propagate) {
@@ -686,7 +577,7 @@ rapidPiPoHost::setInputFrameOffset(double offset, bool propagate) {
 }
 
 void
-rapidPiPoHost::setInputDims(int width, int height, bool propagate) {
+PiPoHost::setInputDims(int width, int height, bool propagate) {
   this->inputStreamAttrs.dims[0] = width;
   this->inputStreamAttrs.dims[1] = height;
   
@@ -696,7 +587,7 @@ rapidPiPoHost::setInputDims(int width, int height, bool propagate) {
 }
 
 void
-rapidPiPoHost::setInputLabels(const std::vector<std::string> &labels, bool propagate) {
+PiPoHost::setInputLabels(const std::vector<std::string> &labels, bool propagate) {
   const char *labs[labels.size()];
 
   for (unsigned int i = 0; i < labels.size(); ++i) {
@@ -711,7 +602,7 @@ rapidPiPoHost::setInputLabels(const std::vector<std::string> &labels, bool propa
 }
 
 void
-rapidPiPoHost::setInputHasVarSize(bool hasVarSize, bool propagate) {
+PiPoHost::setInputHasVarSize(bool hasVarSize, bool propagate) {
   this->inputStreamAttrs.hasVarSize = hasVarSize;
 
   if (propagate) {
@@ -720,7 +611,7 @@ rapidPiPoHost::setInputHasVarSize(bool hasVarSize, bool propagate) {
 }
 
 void
-rapidPiPoHost::setInputDomain(double domain, bool propagate) {
+PiPoHost::setInputDomain(double domain, bool propagate) {
   this->inputStreamAttrs.domain = domain;
 
   if (propagate) {
@@ -729,117 +620,121 @@ rapidPiPoHost::setInputDomain(double domain, bool propagate) {
 }
 
 void
-rapidPiPoHost::setInputMaxFrames(int maxFrames, bool propagate) {
+PiPoHost::setInputMaxFrames(int maxFrames, bool propagate) {
   this->inputStreamAttrs.maxFrames = maxFrames;
 
   if (propagate) {
     this->propagateInputAttributes();
   }
 }
+//*/
 
 //--------------------- INPUT STREAM ATTRIBUTES GETTERS ----------------------//
 
+/*
 bool
-rapidPiPoHost::getInputHasTimeTags() {
+PiPoHost::getInputHasTimeTags() {
   return this->inputStreamAttrs.hasTimeTags;
 }
 
 double
-rapidPiPoHost::getInputFrameRate() {
+PiPoHost::getInputFrameRate() {
   return this->inputStreamAttrs.rate;
 }
 
 double
-rapidPiPoHost::getInputFrameOffset() {
+PiPoHost::getInputFrameOffset() {
   return this->inputStreamAttrs.offset;
 }
 
 void
-rapidPiPoHost::getInputDims(int &width, int &height) {
+PiPoHost::getInputDims(int &width, int &height) {
   width = this->inputStreamAttrs.dims[0];
   height = this->inputStreamAttrs.dims[1];
 }
 
 void
-rapidPiPoHost::getInputLabels(std::vector<std::string> &labels) {
+PiPoHost::getInputLabels(std::vector<std::string> &labels) {
   //for (unsigned int i = 0; i < )
 }
 
 bool
-rapidPiPoHost::getInputHasVarSize() {
+PiPoHost::getInputHasVarSize() {
   return this->inputStreamAttrs.hasVarSize;
 }
 
 double
-rapidPiPoHost::getInputDomain() {
+PiPoHost::getInputDomain() {
   return this->inputStreamAttrs.domain;
 }
 
 int
-rapidPiPoHost::getInputMaxFrames() {
+PiPoHost::getInputMaxFrames() {
   return this->inputStreamAttrs.maxFrames;
 }
+//*/
 
 //--------------------- OUTPUT STREAM ATTRIBUTES GETTERS ---------------------//
 
-void
-rapidPiPoHost::setOutputAttributes(bool hasTimeTags, double rate, double offset,
-                                   unsigned int width, unsigned int height,
-                                   const char **labels, bool hasVarSize,
-                                   double domain, unsigned int maxFrames) {
-  if (labels != NULL) {
-    int numLabels = width;
+// void
+// PiPoHost::setOutputAttributes(bool hasTimeTags, double rate, double offset,
+//                               unsigned int width, unsigned int height,
+//                               const char **labels, bool hasVarSize,
+//                               double domain, unsigned int maxFrames) {
+//   if (labels != NULL) {
+//     int numLabels = width;
     
-    if (numLabels > PIPO_MAX_LABELS) {
-      numLabels = PIPO_MAX_LABELS;
-    }
+//     if (numLabels > PIPO_MAX_LABELS) {
+//       numLabels = PIPO_MAX_LABELS;
+//     }
     
-    for (unsigned int i = 0; i < numLabels; i++) {
-      try {
-        this->outputStreamAttrs.labels[i] = labels[i];        
-      } catch(std::exception e) {
-        this->outputStreamAttrs.labels[i] = "unnamed";
-      }
-    }
+//     for (unsigned int i = 0; i < numLabels; i++) {
+//       try {
+//         this->outputStreamAttrs.labels[i] = labels[i];        
+//       } catch(std::exception e) {
+//         this->outputStreamAttrs.labels[i] = "unnamed";
+//       }
+//     }
     
-    this->outputStreamAttrs.numLabels = numLabels;
-  } else {
-    this->outputStreamAttrs.numLabels = 0;
-  }
+//     this->outputStreamAttrs.numLabels = numLabels;
+//   } else {
+//     this->outputStreamAttrs.numLabels = 0;
+//   }
   
-  this->outputStreamAttrs.hasTimeTags = hasTimeTags;
-  this->outputStreamAttrs.rate = rate;
-  this->outputStreamAttrs.offset = offset;
-  this->outputStreamAttrs.dims[0] = width;
-  this->outputStreamAttrs.dims[1] = height;
-  this->outputStreamAttrs.hasVarSize = hasVarSize;
-  this->outputStreamAttrs.domain = domain;
-  this->outputStreamAttrs.maxFrames = maxFrames; 
-}
+//   this->outputStreamAttrs.hasTimeTags = hasTimeTags;
+//   this->outputStreamAttrs.rate = rate;
+//   this->outputStreamAttrs.offset = offset;
+//   this->outputStreamAttrs.dims[0] = width;
+//   this->outputStreamAttrs.dims[1] = height;
+//   this->outputStreamAttrs.hasVarSize = hasVarSize;
+//   this->outputStreamAttrs.domain = domain;
+//   this->outputStreamAttrs.maxFrames = maxFrames; 
+// }
 
+/*
 bool
-rapidPiPoHost::getOutputHasTimeTags() {
+PiPoHost::getOutputHasTimeTags() {
   return this->outputStreamAttrs.hasTimeTags;
 }
 
 double
-rapidPiPoHost::getOutputFrameRate() {
+PiPoHost::getOutputFrameRate() {
   return this->outputStreamAttrs.rate;
 }
 
 double
-rapidPiPoHost::getOutputFrameOffset() {
+PiPoHost::getOutputFrameOffset() {
   return this->outputStreamAttrs.offset;
 }
 
 void
-rapidPiPoHost::getOutputDims(int &width, int &height) {
+PiPoHost::getOutputDims(int &width, int &height) {
   width = this->outputStreamAttrs.dims[0];
   height = this->outputStreamAttrs.dims[1];
 }
 
 void
-rapidPiPoHost::getOutputLabels(std::vector<std::string> &labels) {
+PiPoHost::getOutputLabels(std::vector<std::string> &labels) {
   labels.clear();
 
   for (unsigned int i = 0; this->outputStreamAttrs.numLabels; ++i) {
@@ -853,33 +748,17 @@ rapidPiPoHost::getOutputLabels(std::vector<std::string> &labels) {
 }
 
 bool
-rapidPiPoHost::getOutputHasVarSize() {
+PiPoHost::getOutputHasVarSize() {
   return this->outputStreamAttrs.hasVarSize;
 }
 
 double
-rapidPiPoHost::getOutputDomain() {
+PiPoHost::getOutputDomain() {
   return this->outputStreamAttrs.domain;
 }
 
 int
-rapidPiPoHost::getOutputMaxFrames() {
+PiPoHost::getOutputMaxFrames() {
   return this->outputStreamAttrs.maxFrames;
 }
- 
 //*/
-
-// void
-// rapidPiPoHost::setRapidPiPoParam(rapidPiPoParam *param) {
-//   char instanceName[maxWordLen];
-//   char pipoAttrName[maxWordLen];
-
-//   if (getPiPoInstanceAndAttrName(param->getName(), instanceName, pipoAttrName)) {
-//     // todo (or not todo)
-//   }
-// }
-
-// void
-// rapidPiPoHost::getPiPoParams(std::vector<rapidPiPoParam> &params) {
-
-// }
diff --git a/src/signalProcessing/rapidPiPoTools/rapidPiPoHost.h b/src/signalProcessing/rapidPiPoTools/rapidPiPoHost.h
index dce73408f4df19d1e6f906d7c5facbd29e51b5ab..b898da3e1ed549f74d17818c5d70d4745fe48697 100644
--- a/src/signalProcessing/rapidPiPoTools/rapidPiPoHost.h
+++ b/src/signalProcessing/rapidPiPoTools/rapidPiPoHost.h
@@ -5,13 +5,18 @@
 #include "PiPoHost.h"
 #include "PiPoCollection.h"
 
+//#ifdef EXTERNAL_JSONCPP_PATH
+#define EXTERNAL_JSONCPP_PATH "json.h"
+#include EXTERNAL_JSONCPP_PATH
+//#endif /* EXTERNAL_JSONCPP_PATH */
+
 #define MIN_PIPO_SAMPLERATE (1.0 / 31536000000.0) /* once a year */
 #define MAX_PIPO_SAMPLERATE (96000000000.0)
 
 #define PIPO_OUT_RING_SIZE 2
 
 struct pipoStreamAttributes {
-  pipoStreamAttributes() :
+  pipoStreamAttributes() : // default parameters suited for audio
   hasTimeTags(false),
   rate(MIN_PIPO_SAMPLERATE),
   offset(0),
@@ -20,12 +25,12 @@ struct pipoStreamAttributes {
   labels({ "" }),
   hasVarSize(false),
   domain(0),
-  maxFrames(256) {}
+  maxFrames(1) {}
 
   bool hasTimeTags;
   double rate;
   double offset;
-  unsigned int width; // width, height (by pipo convention)
+  unsigned int width;
   unsigned int height;
   std::vector<std::string> labels;
   bool hasVarSize;
@@ -84,11 +89,21 @@ public:
     // virtual bool isFloatAttr(const std::string &attrName);
     // virtual bool isFloatArrayAttr(const std::string &attrName);
     // virtual bool isStringAttr(const std::string &attrName);
+    
+    virtual std::vector<std::string> getAttrNames();
 
-    // virtual bool getBoolAttr(const std::string &attrName);
-    // virtual int getIntAttr(const std::string &attrName);
-    // virtual float getFloatAttr(const std::string &attrName);
+    virtual double getDoubleAttr(const std::string &attrName);
+    virtual std::vector<double> getDoubleArrayAttr(const std::string &attrName);
+    virtual std::string getEnumAttr(const std::string &attrName);
 
+    /** Get a JSON representation of the model in the form of a styled string */
+    virtual std::string getJSON();
+    /** Write a JSON model description to specified file path */
+    virtual void writeJSON(const std::string &filepath);
+    /** configure empty model with string. See getJSON() */
+    virtual bool putJSON(const std::string &jsonMessage);
+    /** read a JSON file at file path and build a modelSet from it */
+    virtual bool readJSON(const std::string &filepath);
 
 
     // int streamAttributes(bool hasTimeTags, double rate, double offset,
@@ -134,6 +149,10 @@ public:
 
     // void setPiPoParam(PiPoParam *param);
     //*/
+protected:
+  Json::Value toJSON();
+  bool fromJSON(Json::Value &jv);
+
 private:
     int propagateInputStreamAttributes();
     void setOutputAttributes(bool hasTimeTags, double rate, double offset,
@@ -150,8 +169,8 @@ private:
     PiPoHost *host;
     std::atomic<int> writeIndex, readIndex;
     std::vector<std::vector<PiPoValue>> ringBuffer;
-    //std::function<void(std::vector<PiPoValue>, PiPoObserver *rpo)> frameCallback;
-    std::function<void(std::vector<PiPoValue>)> simpleFrameCallback;
+    // std::function<void(std::vector<PiPoValue>, PiPoObserver *rpo)> frameCallback;
+    // std::function<void(std::vector<PiPoValue>)> simpleFrameCallback;
     
 public:
     PiPoOut(PiPoHost *host) :
@@ -212,9 +231,9 @@ public:
     //    frameCallback = f;
     //}
     
-    void setSimpleFrameCallback(std::function<void(std::vector<PiPoValue>)> f) {
-        simpleFrameCallback = f;
-    }
+    // void setSimpleFrameCallback(std::function<void(std::vector<PiPoValue>)> f) {
+    //     simpleFrameCallback = f;
+    // }
     
     std::vector<PiPoValue> getLastFrame() {
         std::vector<PiPoValue> f;
@@ -227,85 +246,4 @@ public:
     }
 };
 
-//================================ PARAMETER =================================//
-
-// can we avoid using such a class ?
-/*
-class rapidPiPoParam {
-  std::string name;
-  std::string pipoName;
-  std::string paramName;
-  std::vector<std::string> values;
-
-public:
-  rapidPiPoParam() :
-  name(""), pipoName(""), paramName("") {}
-
-  rapidPiPoParam(std::string name, std::string pipoName, std::string paramName,
-                 std::vector<std::string> const &values) {
-    this->name = name;
-    this->pipoName = pipoName;
-    this->paramName = paramName;
-    this->values = std::vector<std::string>(values.size());
-    for (int i = 0; i < values.size(); ++i) {
-      this->values[i] = values[i];
-    }
-  }
-
-  const char *getName() {
-    return name.c_str();
-  }
-
-  const char *getParamName() {
-    return paramName.c_str();
-  }
-
-  const char *getPiPoName() {
-    return pipoName.c_str();
-  }
-
-  int getNumValues() {
-    return values.size();
-  }
-
-  bool isValueInt(int i) {
-    // todo
-    return false;
-  }
-
-  bool isValueFloat(int i) {
-    // todo
-    return false;
-  } 
-
-  bool isValueNum(int i) {
-    // todo;
-    return false;
-  }
-
-  float getValueFloat(int i) {
-    // todo
-    return 0.;
-  }
-
-  int getValueInt(int i) {
-    // todo
-    return 0;
-  }
-
-  const char *getValueString() {
-    return values[0].c_str();
-    //return values[i].c_str();
-  }
-
-  std::string getValuesAsString() {
-    std::string res = values[0];
-    for (int i = 1; i < values.size(); ++i) {
-      res += " " + values[i];
-    }
-    return res;
-  }
-};
-//*/
-
 #endif /* _RAPID_PIPO_HOST_H_ */
diff --git a/src/signalProcessing/rapidPiPoTools/rapidPiPoTools.h b/src/signalProcessing/rapidPiPoTools/rapidPiPoTools.h
index 04265de86b4148f1cc711ddea464f330a8439275..d9a2e0efbe555a74e1d9cb032c4b3ec181032d16 100644
--- a/src/signalProcessing/rapidPiPoTools/rapidPiPoTools.h
+++ b/src/signalProcessing/rapidPiPoTools/rapidPiPoTools.h
@@ -3,7 +3,7 @@
 
 #include "rapidPiPoHost.h"
 
-typedef PiPoHost rapidPiPoHost;
-typedef pipoStreamAttributes rapidPiPoStreamAttributes;
+typedef PiPoHost pipoHost;
+typedef pipoStreamAttributes pipoStreamAttributes;
 
 # endif /* _RAPID_PIPO_TOOLS_H_ */
diff --git a/src/signalProcessing/signalProcessing.h b/src/signalProcessing/signalProcessing.h
index 43fbfb2e586f6ad21bd7521218b2560e86752b25..3edb4130221dacc5fca21ba8e203ceaaf6713e09 100644
--- a/src/signalProcessing/signalProcessing.h
+++ b/src/signalProcessing/signalProcessing.h
@@ -23,6 +23,10 @@ typedef maxiFFT FFT;
 typedef maxiMFCC MFCC;
 typedef rapidStream rapidStream; //MZ: Best... typedef... EVER!
 
+typedef pipoHost pipoHost;
+typedef pipoStreamAttributes pipoStreamAttributes;
+
+
 RAPIDMIX_END_NAMESPACE
 
 #endif
diff --git a/tests/src/test_rapidPiPoTools.cpp b/tests/src/test_rapidPiPoTools.cpp
index fd5e06bad2433a6824be38acb36f56b9ebe02e89..38886f89d3186939c036f86cb0ec7ad2ceffb13a 100644
--- a/tests/src/test_rapidPiPoTools.cpp
+++ b/tests/src/test_rapidPiPoTools.cpp
@@ -15,11 +15,9 @@
 #include "catch.hpp"
 #include "signalProcessing.h"
 
-#define MAX_PATH_SIZE 256
+//#define MAX_PATH_SIZE 256
 
-//static
-
-//================================== GMM =====================================//
+//=============================== ONSEG TEST =================================//
 
 SCENARIO("Test rapidPiPoHost", "[signalProcessing]")
 {
@@ -41,7 +39,7 @@ SCENARIO("Test rapidPiPoHost", "[signalProcessing]")
         //====================================================================//
 
         // instantiate PiPo related classes here :
-        rapidPiPoHost host; // -> this class is located in rapidPiPoTools
+        rapidmix::pipoHost host; // -> this class is located in rapidPiPoTools
         
         // if we want to add some custom PiPos to our collection :
         // #include "myCustomPiPo.h"
@@ -49,7 +47,7 @@ SCENARIO("Test rapidPiPoHost", "[signalProcessing]")
         // now we can write :
         // pipoHost.setChain("myCustomPiPo");
 
-//#include "PiPoMaximChroma.h"
+// #include "PiPoMaximChroma.h"
         // this one is not part of the default collection :
         // PiPoCollection::addToCollection("chroma", new PiPoCreator<PiPoMaximChroma>);
         
@@ -75,12 +73,26 @@ SCENARIO("Test rapidPiPoHost", "[signalProcessing]")
         host.setAttr("onseg.threshold", 9.);
         host.setAttr("onseg.offthresh", -120.);
         
+        std::cout << "onseg threshold : ";
+        std::cout << host.getDoubleAttr("onseg.threshold") << std::endl;
+        std::cout << "fft mode : ";
+        std::cout << host.getEnumAttr("fft.mode") << std::endl;
+        std::cout << "param names : " << std::endl;
+
+        std::vector<std::string> attrs = host.getAttrNames();
+        
+        for (int i = 0; i < attrs.size(); ++i)
+        {
+            std::cout << "- " << attrs[i] << std::endl;
+        }
+
+        std::cout << host.getJSON() << std::endl;
         // set another chain :
         // pipoHost.setChain("chroma");
         
         WHEN("file is processed")
         {
-            rapidPiPoStreamAttributes sa;
+            rapidmix::pipoStreamAttributes sa;
             sa.hasTimeTags = true;
             sa.rate = 44100;
             sa.offset = 0;
diff --git a/tests/test_project.xcodeproj/project.pbxproj b/tests/test_project.xcodeproj/project.pbxproj
index fea030fad79a57f1fdde7c5fdb8a1d0b5124496f..f34a9bcf8e85e9e3d99ec277a140741ccccc6721 100644
--- a/tests/test_project.xcodeproj/project.pbxproj
+++ b/tests/test_project.xcodeproj/project.pbxproj
@@ -36,6 +36,7 @@
 		311BA31E1EDC7ADE00244DAC /* maximilian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5A1F1ED8450C00E9FAFA /* maximilian.cpp */; };
 		311BA3211EDC7B2400244DAC /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 311BA3201EDC7B2400244DAC /* Accelerate.framework */; };
 		311BA3241EDC7BA800244DAC /* DnB-loop-175BPM.wav in CopyFiles */ = {isa = PBXBuildFile; fileRef = 311BA3231EDC7BA400244DAC /* DnB-loop-175BPM.wav */; };
+<<<<<<< HEAD
 		BE2C5F711EDD77B800E9FAFA /* test_RapidLib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5EDF1ED8480D00E9FAFA /* test_RapidLib.cpp */; };
 		BE2C5F751EDD77F100E9FAFA /* machineLearning.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5EBE1ED8459300E9FAFA /* machineLearning.cpp */; };
 		BE2C5F761EDD780000E9FAFA /* modelSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5DF51ED8450E00E9FAFA /* modelSet.cpp */; };
@@ -46,6 +47,47 @@
 		BE2C5F7B1EDD783200E9FAFA /* jsoncpp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5E081ED8450E00E9FAFA /* jsoncpp.cpp */; };
 		BE2C5F7C1EDD784100E9FAFA /* trainingData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5EC01ED8459300E9FAFA /* trainingData.cpp */; };
 		BE2C5F7D1EDD784F00E9FAFA /* svm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5EED1ED849AA00E9FAFA /* svm.cpp */; };
+=======
+		311BA3251EDCE80B00244DAC /* jsoncpp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5E081ED8450E00E9FAFA /* jsoncpp.cpp */; };
+		BE2C5E941ED8450E00E9FAFA /* classification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5DEA1ED8450E00E9FAFA /* classification.cpp */; };
+		BE2C5E951ED8450E00E9FAFA /* knnClassification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5DF31ED8450E00E9FAFA /* knnClassification.cpp */; };
+		BE2C5E961ED8450E00E9FAFA /* modelSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5DF51ED8450E00E9FAFA /* modelSet.cpp */; };
+		BE2C5E971ED8450E00E9FAFA /* neuralNetwork.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5DF71ED8450E00E9FAFA /* neuralNetwork.cpp */; };
+		BE2C5E981ED8450E00E9FAFA /* regression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5DF91ED8450E00E9FAFA /* regression.cpp */; };
+		BE2C5E991ED8450E00E9FAFA /* jsoncpp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5E081ED8450E00E9FAFA /* jsoncpp.cpp */; };
+		BE2C5EC81ED8459300E9FAFA /* machineLearning.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5EBE1ED8459300E9FAFA /* machineLearning.cpp */; };
+		BE2C5EC91ED8459300E9FAFA /* trainingData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5EC01ED8459300E9FAFA /* trainingData.cpp */; };
+		BE2C5ECA1ED8459300E9FAFA /* rapidStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5EC51ED8459300E9FAFA /* rapidStream.cpp */; };
+		BE2C5EE81ED8480D00E9FAFA /* test_RapidLib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5EDF1ED8480D00E9FAFA /* test_RapidLib.cpp */; };
+		BE2C5EEF1ED849AA00E9FAFA /* svm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5EED1ED849AA00E9FAFA /* svm.cpp */; };
+		BE2C5F121EDD74BC00E9FAFA /* libsvm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F0F1EDD74BC00E9FAFA /* libsvm.cpp */; };
+		BE2C5F571EDD74FC00E9FAFA /* BayesianFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F151EDD74FC00E9FAFA /* BayesianFilter.cpp */; };
+		BE2C5F581EDD74FC00E9FAFA /* filter_utilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F171EDD74FC00E9FAFA /* filter_utilities.cpp */; };
+		BE2C5F591EDD74FC00E9FAFA /* finitedifferences.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F1A1EDD74FC00E9FAFA /* finitedifferences.c */; };
+		BE2C5F5A1EDD74FC00E9FAFA /* bbpr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F1D1EDD74FC00E9FAFA /* bbpr.cpp */; };
+		BE2C5F5B1EDD74FC00E9FAFA /* rpoly.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F1F1EDD74FC00E9FAFA /* rpoly.cpp */; };
+		BE2C5F5C1EDD74FC00E9FAFA /* rta_bpf.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F241EDD74FC00E9FAFA /* rta_bpf.c */; };
+		BE2C5F5D1EDD74FC00E9FAFA /* rta_int.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F281EDD74FC00E9FAFA /* rta_int.c */; };
+		BE2C5F5E1EDD74FC00E9FAFA /* rta_util.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F2E1EDD74FC00E9FAFA /* rta_util.c */; };
+		BE2C5F5F1EDD74FC00E9FAFA /* rta_bands.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F311EDD74FC00E9FAFA /* rta_bands.c */; };
+		BE2C5F601EDD74FC00E9FAFA /* rta_biquad.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F331EDD74FC00E9FAFA /* rta_biquad.c */; };
+		BE2C5F611EDD74FC00E9FAFA /* rta_correlation.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F351EDD74FC00E9FAFA /* rta_correlation.c */; };
+		BE2C5F621EDD74FC00E9FAFA /* rta_cubic.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F371EDD74FC00E9FAFA /* rta_cubic.c */; };
+		BE2C5F631EDD74FC00E9FAFA /* rta_dct.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F391EDD74FC00E9FAFA /* rta_dct.c */; };
+		BE2C5F641EDD74FC00E9FAFA /* rta_delta.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F3B1EDD74FC00E9FAFA /* rta_delta.c */; };
+		BE2C5F651EDD74FC00E9FAFA /* rta_fft.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F3D1EDD74FC00E9FAFA /* rta_fft.c */; };
+		BE2C5F661EDD74FC00E9FAFA /* rta_lifter.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F401EDD74FC00E9FAFA /* rta_lifter.c */; };
+		BE2C5F671EDD74FC00E9FAFA /* rta_lpc.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F421EDD74FC00E9FAFA /* rta_lpc.c */; };
+		BE2C5F681EDD74FC00E9FAFA /* rta_mean_variance.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F441EDD74FC00E9FAFA /* rta_mean_variance.c */; };
+		BE2C5F691EDD74FC00E9FAFA /* rta_mel.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F461EDD74FC00E9FAFA /* rta_mel.c */; };
+		BE2C5F6A1EDD74FC00E9FAFA /* rta_moments.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F481EDD74FC00E9FAFA /* rta_moments.c */; };
+		BE2C5F6B1EDD74FC00E9FAFA /* rta_onepole.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F4A1EDD74FC00E9FAFA /* rta_onepole.c */; };
+		BE2C5F6C1EDD74FC00E9FAFA /* rta_preemphasis.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F4C1EDD74FC00E9FAFA /* rta_preemphasis.c */; };
+		BE2C5F6D1EDD74FC00E9FAFA /* rta_resample.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F4E1EDD74FC00E9FAFA /* rta_resample.c */; };
+		BE2C5F6E1EDD74FC00E9FAFA /* rta_selection.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F501EDD74FC00E9FAFA /* rta_selection.c */; };
+		BE2C5F6F1EDD74FC00E9FAFA /* rta_svd.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F521EDD74FC00E9FAFA /* rta_svd.c */; };
+		BE2C5F701EDD74FC00E9FAFA /* rta_window.c in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F541EDD74FC00E9FAFA /* rta_window.c */; };
+>>>>>>> 912f95ac3e65fa90db8c7586e29f9d8b800dbdcc
 /* End PBXBuildFile section */
 
 /* Begin PBXCopyFilesBuildPhase section */
@@ -735,9 +777,9 @@
 		BE2C5EDD1ED8480D00E9FAFA /* src */ = {
 			isa = PBXGroup;
 			children = (
+				BE2C5EE01ED8480D00E9FAFA /* test_rapidmix-api.cpp */,
 				BE2C5EDE1ED8480D00E9FAFA /* test_gvf.cpp */,
 				BE2C5EDF1ED8480D00E9FAFA /* test_RapidLib.cpp */,
-				BE2C5EE01ED8480D00E9FAFA /* test_rapidmix-api.cpp */,
 				BE2C5EE11ED8480D00E9FAFA /* test_rapidPiPoTools.cpp */,
 				BE2C5EE21ED8480D00E9FAFA /* test_rapidXmmTools.cpp */,
 				BE2C5EE31ED8480D00E9FAFA /* test_signalProcessing.cpp */,
@@ -1062,11 +1104,11 @@
 			projectDirPath = "";
 			projectRoot = "";
 			targets = (
-				0BFFEF251E56083C00EF19A5 /* test_RapidLib */,
 				0BFFEF1A1E56082700EF19A5 /* test_GVF */,
+				0BFFEF251E56083C00EF19A5 /* test_RapidLib */,
+				31D7B7121E6B048100917757 /* test_rapidPiPoTools */,
 				0BFFEF301E56085C00EF19A5 /* test_rapidXmmTools */,
 				0BFFEF3E1E5608C000EF19A5 /* test_signalProcessing */,
-				31D7B7121E6B048100917757 /* test_rapidPiPoTools */,
 			);
 		};
 /* End PBXProject section */
@@ -1133,13 +1175,14 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				311BA3101EDC746F00244DAC /* test_rapidPiPoTools.cpp in Sources */,
+				311BA3111EDC747A00244DAC /* rapidPiPoHost.cpp in Sources */,
 				311BA31A1EDC7ADE00244DAC /* fft.cpp in Sources */,
 				311BA31B1EDC7ADE00244DAC /* maxiBark.cpp in Sources */,
 				311BA31C1EDC7ADE00244DAC /* maxiFFT.cpp in Sources */,
 				311BA31D1EDC7ADE00244DAC /* maxiMFCC.cpp in Sources */,
 				311BA31E1EDC7ADE00244DAC /* maximilian.cpp in Sources */,
-				311BA3101EDC746F00244DAC /* test_rapidPiPoTools.cpp in Sources */,
-				311BA3111EDC747A00244DAC /* rapidPiPoHost.cpp in Sources */,
+				311BA3251EDCE80B00244DAC /* jsoncpp.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};