diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCppCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCppCodegen.java
index 814d8e12bf2f09ebb85cf628b7c5cfa08d5d88a6..c53021a7534bca8a1cc30f9ce5f61cf86272b759 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCppCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCppCodegen.java
@@ -168,7 +168,7 @@ abstract public class AbstractCppCodegen extends DefaultCodegen implements Codeg
             return sanitizeName(name);
         }
 
-        if (isReservedWord(name)) {
+        if (isReservedWord(name) || name.matches("^\\d.*")) {
             return escapeReservedWord(name);
         }
 
@@ -205,6 +205,10 @@ abstract public class AbstractCppCodegen extends DefaultCodegen implements Codeg
 
     @Override
     public String toParamName(String name) {
+        if (isReservedWord(name) || name.matches("^\\d.*")) {
+            return escapeReservedWord(name);
+        }
+
         return sanitizeName(super.toParamName(name));
     }
 
@@ -217,6 +221,9 @@ abstract public class AbstractCppCodegen extends DefaultCodegen implements Codeg
         } else {
             nameInCamelCase = sanitizeName(nameInCamelCase);
         }
+        if (isReservedWord(nameInCamelCase) || nameInCamelCase.matches("^\\d.*")) {
+            nameInCamelCase =  escapeReservedWord(nameInCamelCase);
+        }        
         property.nameInCamelCase = nameInCamelCase;
         return property;
     }
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java
index a1ac3bf86ae83b07a5df6ba668a5d6281a095c14..c288575f695187d7a38df56022ec0db746589202 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java
@@ -46,6 +46,8 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
     protected boolean isAddExternalLibs = true;
     public static final String OPTIONAL_EXTERNAL_LIB = "addExternalLibs";
     public static final String OPTIONAL_EXTERNAL_LIB_DESC = "Add the Possibility to fetch and compile external Libraries needed by this Framework.";
+    protected final String PREFIX = "";
+
     @Override
     public CodegenType getTag() {
         return CodegenType.SERVER;
@@ -63,6 +65,9 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
 
     public CppPistacheServerCodegen() {
         super();
+        if (StringUtils.isEmpty(modelNamePrefix)) {
+            modelNamePrefix = PREFIX;
+        }
 
         apiPackage = "org.openapitools.server.api";
         modelPackage = "org.openapitools.server.model";
@@ -83,8 +88,8 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
 
         reservedWords = new HashSet<>();
 
-        supportingFiles.add(new SupportingFile("modelbase-header.mustache", "model", "ModelBase.h"));
-        supportingFiles.add(new SupportingFile("modelbase-source.mustache", "model", "ModelBase.cpp"));
+        supportingFiles.add(new SupportingFile("modelbase-header.mustache", "model", modelNamePrefix + "ModelBase.h"));
+        supportingFiles.add(new SupportingFile("modelbase-source.mustache", "model", modelNamePrefix + "ModelBase.cpp"));
         supportingFiles.add(new SupportingFile("cmake.mustache", "", "CMakeLists.txt"));
         supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
 
@@ -117,7 +122,14 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
     @Override
     public void processOpts() {
         super.processOpts();
-
+        if (additionalProperties.containsKey("modelNamePrefix")) {
+            additionalProperties().put("prefix", modelNamePrefix);
+            supportingFiles.clear();
+            supportingFiles.add(new SupportingFile("modelbase-header.mustache", "model", modelNamePrefix + "ModelBase.h"));
+            supportingFiles.add(new SupportingFile("modelbase-source.mustache", "model", modelNamePrefix + "ModelBase.cpp"));
+            supportingFiles.add(new SupportingFile("cmake.mustache", "", "CMakeLists.txt"));
+            supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
+        }
         additionalProperties.put("modelNamespaceDeclarations", modelPackage.split("\\."));
         additionalProperties.put("modelNamespace", modelPackage.replaceAll("\\.", "::"));
         additionalProperties.put("apiNamespaceDeclarations", apiPackage.split("\\."));
@@ -138,6 +150,7 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
         }
     }
 
+    
     @Override
     public CodegenModel fromModel(String name, Schema model, Map<String, Schema> allDefinitions) {
         CodegenModel codegenModel = super.fromModel(name, model, allDefinitions);
@@ -240,7 +253,7 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
 
     @Override
     public String toModelFilename(String name) {
-        return initialCaps(name);
+        return initialCaps(toModelName(name));
     }
 
     @Override
@@ -265,7 +278,7 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
 
     @Override
     public String toApiFilename(String name) {
-        return initialCaps(name) + "Api";
+        return  modelNamePrefix + initialCaps(name) + "Api";
     }
 
     /**
diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-source.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-source.mustache
index b9e97395e41a980be80aeb29a0f7d5d1db36fd04..d6aa9becb04543486711d29610de52edd3ba5151 100644
--- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-source.mustache
+++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-source.mustache
@@ -76,7 +76,7 @@ void {{classname}}::{{operationIdSnakeCase}}_handler(const Pistache::Rest::Reque
       nlohmann::json request_body = nlohmann::json::parse(request.body());
     {{^isPrimitiveType}}{{^isContainer}}
       {{paramName}}.fromJson(request_body);
-    {{/isContainer}}{{/isPrimitiveType}}{{#isContainer}}  {{paramName}} = {{#isListContainer}}  ModelArrayHelper{{/isListContainer}}{{#isMapContainer}}  ModelMapHelper{{/isMapContainer}}::fromJson<{{items.baseType}}>(request_body);{{/isContainer}}
+    {{/isContainer}}{{/isPrimitiveType}}{{#isContainer}}  {{paramName}} = {{#isListContainer}}  {{prefix}}ModelArrayHelper{{/isListContainer}}{{#isMapContainer}}  {{prefix}}ModelMapHelper{{/isMapContainer}}::fromJson<{{items.baseType}}>(request_body);{{/isContainer}}
     {{#isPrimitiveType}}
       // The conversion is done automatically by the json library
       {{paramName}} = request_body;
diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-header.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-header.mustache
index 3efd24758f581591f5fb59996e226e876442e5e1..0fb65fa26b3e534116bc8386095420ad8c1f4bbe 100644
--- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-header.mustache
+++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-header.mustache
@@ -9,7 +9,7 @@
 #define {{classname}}_H_
 
 {{{defaultInclude}}}
-#include "ModelBase.h"
+#include "{{prefix}}ModelBase.h"
 
 {{#imports}}{{{this}}}
 {{/imports}}
@@ -22,14 +22,14 @@ namespace {{this}} {
 /// {{description}}
 /// </summary>
 class {{declspec}} {{classname}}
-    : public ModelBase
+    : public {{prefix}}ModelBase
 {
 public:
     {{classname}}();
     virtual ~{{classname}}();
 
     /////////////////////////////////////////////
-    /// ModelBase overrides
+    /// {{prefix}}ModelBase overrides
 
     void validate() override;
 
diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-source.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-source.mustache
index 7a36c378903ab2b426583696d18cbdb564a9ea2e..9c60bbbaae08b7882739b574fa8bfd0683f3dfd7 100644
--- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-source.mustache
+++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-source.mustache
@@ -38,7 +38,7 @@ nlohmann::json {{classname}}::toJson() const
         nlohmann::json jsonArray;
         for( auto& item : m_{{name}} )
         {
-            jsonArray.push_back(ModelBase::toJson(item));
+            jsonArray.push_back({{prefix}}ModelBase::toJson(item));
         }
         {{#required}}val["{{baseName}}"] = jsonArray;
         {{/required}}{{^required}}
@@ -50,9 +50,9 @@ nlohmann::json {{classname}}::toJson() const
     }
     {{/isListContainer}}{{^isListContainer}}{{^isPrimitiveType}}{{^required}}if(m_{{name}}IsSet)
     {
-        val["{{baseName}}"] = ModelBase::toJson(m_{{name}});
+        val["{{baseName}}"] = {{prefix}}ModelBase::toJson(m_{{name}});
     }
-    {{/required}}{{#required}}val["{{baseName}}"] = ModelBase::toJson(m_{{name}});
+    {{/required}}{{#required}}val["{{baseName}}"] = {{prefix}}ModelBase::toJson(m_{{name}});
     {{/required}}{{/isPrimitiveType}}{{/isListContainer}}{{/vars}}
 
     return val;
diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/modelbase-header.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/modelbase-header.mustache
index 1cb28f0d988f90ae7a42d076f84aceb8088de719..faeff48303875e0b2df1affb6c1819b37782a6c7 100644
--- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/modelbase-header.mustache
+++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/modelbase-header.mustache
@@ -1,12 +1,12 @@
 {{>licenseInfo}}
 /*
- * ModelBase.h
+ * {{prefix}}ModelBase.h
  *
  * This is the base class for all model classes
  */
 
-#ifndef ModelBase_H_
-#define ModelBase_H_
+#ifndef {{prefix}}ModelBase_H_
+#define {{prefix}}ModelBase_H_
 
 {{{defaultInclude}}}
 #include "json.hpp"
@@ -19,11 +19,11 @@
 namespace {{this}} {
 {{/modelNamespaceDeclarations}}
 
-class {{declspec}} ModelBase
+class {{declspec}} {{prefix}}ModelBase
 {
 public:
-    ModelBase();
-    virtual ~ModelBase();
+    {{prefix}}ModelBase();
+    virtual ~{{prefix}}ModelBase();
 
     virtual void validate() = 0;
 
@@ -36,16 +36,16 @@ public:
     static int64_t toJson( int64_t const value );
     static double toJson( double const value );
     static bool toJson( bool const value );
-    static nlohmann::json toJson(ModelBase const& content ); 
+    static nlohmann::json toJson({{prefix}}ModelBase const& content ); 
 };
 
-class ModelArrayHelper {
+class {{prefix}}ModelArrayHelper {
 public:
 	template<typename T>
 	static std::vector<T> fromJson(nlohmann::json& json) {
 		T *ptrTest;
 		std::vector<T> val;
-		if (dynamic_cast<ModelBase*>(ptrTest) != nullptr) {
+		if (dynamic_cast<{{prefix}}ModelBase*>(ptrTest) != nullptr) {
 			if (!json.empty()) {
 				for (auto &item : json.items()) {
 					T entry;
@@ -66,7 +66,7 @@ public:
 	}
 };
 
-class ArrayHelper {
+class {{prefix}}ArrayHelper {
 public:
 	template<typename T>
 	static std::vector<T> fromJson(nlohmann::json& json) {
@@ -82,13 +82,13 @@ public:
 	}
 };
 
-class ModelMapHelper {
+class {{prefix}}ModelMapHelper {
 public:
 	template<typename T>
 	static std::map<std::string, T> & fromJson(nlohmann::json& json) {
 		T *ptrTest;
 		std::map<std::string, T> val;
-		if (dynamic_cast<ModelBase*>(ptrTest) != nullptr) {
+		if (dynamic_cast<{{prefix}}ModelBase*>(ptrTest) != nullptr) {
 			if (!json.empty()) {
 				for (auto &item : json.items()) {
 					T entry;
@@ -110,7 +110,7 @@ public:
 	}
 };
 
-class MapHelper {
+class {{prefix}}MapHelper {
 public:
 	template<typename T>
 	static std::map<std::string, T> & fromJson(nlohmann::json& json) {
@@ -139,4 +139,4 @@ public:
 }
 {{/modelNamespaceDeclarations}}
 
-#endif /* ModelBase_H_ */
+#endif /* {{prefix}}ModelBase_H_ */
diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/modelbase-source.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/modelbase-source.mustache
index 3bc4c644e4258c641e3ba1a4dcc885117193de1b..f097c3a4a199aa49c0243398976af124cb9d6b15 100644
--- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/modelbase-source.mustache
+++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/modelbase-source.mustache
@@ -1,50 +1,50 @@
 {{>licenseInfo}}
-#include "ModelBase.h"
+#include "{{prefix}}ModelBase.h"
 
 {{#modelNamespaceDeclarations}}
 namespace {{this}} {
 {{/modelNamespaceDeclarations}}
 
-ModelBase::ModelBase()
+{{prefix}}ModelBase::{{prefix}}ModelBase()
 {
 }
-ModelBase::~ModelBase()
+{{prefix}}ModelBase::~{{prefix}}ModelBase()
 {
 }
 
-std::string ModelBase::toJson( std::string const& value )
+std::string {{prefix}}ModelBase::toJson( std::string const& value )
 {
     return value;
 }
 
-std::string ModelBase::toJson( std::time_t const& value )
+std::string {{prefix}}ModelBase::toJson( std::time_t const& value )
 {
     char buf[sizeof "2011-10-08T07:07:09Z"];
     strftime(buf, sizeof buf, "%FT%TZ", gmtime(&value));
     return buf;
 }
 
-int32_t ModelBase::toJson( int32_t const value )
+int32_t {{prefix}}ModelBase::toJson( int32_t const value )
 {
     return value;
 }
 
-int64_t ModelBase::toJson( int64_t const value )
+int64_t {{prefix}}ModelBase::toJson( int64_t const value )
 {
     return value;
 }
 
-double ModelBase::toJson( double const value )
+double {{prefix}}ModelBase::toJson( double const value )
 {
     return value;
 }
 
-bool ModelBase::toJson( bool const value )
+bool {{prefix}}ModelBase::toJson( bool const value )
 {
     return value;
 }
 
-nlohmann::json ModelBase::toJson(ModelBase const& content )
+nlohmann::json {{prefix}}ModelBase::toJson({{prefix}}ModelBase const& content )
 {
     return content.toJson();
 }