diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java
index bdec9ffeffdca4359d7ae31660bd80416f232886..1bdfa1211b83f2cea117a2c10bfb81d8f30ac325 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java
@@ -25,6 +25,7 @@ import org.openapitools.codegen.utils.ModelUtils;
 
 import java.io.File;
 import java.text.SimpleDateFormat;
+import java.util.TreeSet;
 import java.util.Date;
 import java.util.List;
 import java.util.Locale;
@@ -142,6 +143,34 @@ public class TypeScriptFetchClientCodegen extends AbstractTypeScriptClientCodege
         addImport(codegenModel, codegenModel.additionalPropertiesType);
     }
 
+    @Override
+    public Map<String, Object> postProcessModels(Map<String, Object> objs) {
+        // process enum in models
+        List<Object> models = (List<Object>) postProcessModelsEnum(objs).get("models");
+        for (Object _mo : models) {
+            Map<String, Object> mo = (Map<String, Object>) _mo;
+            CodegenModel cm = (CodegenModel) mo.get("model");
+            cm.imports = new TreeSet(cm.imports);
+            // name enum with model name, e.g. StatusEnum => Pet.StatusEnum
+            for (CodegenProperty var : cm.vars) {
+                if (Boolean.TRUE.equals(var.isEnum)) {
+                    // behaviour for enum names is specific for Typescript Fetch, not using namespaces
+                    var.datatypeWithEnum = var.datatypeWithEnum.replace(var.enumName, cm.classname + var.enumName);
+                }
+            }
+            if (cm.parent != null) {
+                for (CodegenProperty var : cm.allVars) {
+                    if (Boolean.TRUE.equals(var.isEnum)) {
+                        var.datatypeWithEnum = var.datatypeWithEnum
+                                .replace(var.enumName, cm.classname + var.enumName);
+                    }
+                }
+            }
+        }
+
+        return objs;
+    }
+
     @Override
     public Map<String, Object> postProcessAllModels(Map<String, Object> objs) {
         Map<String, Object> result = super.postProcessAllModels(objs);
diff --git a/modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache b/modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache
index e4523aadadca87591adf3e80b0728f5ec8851d7a..9bde0bc758e4234cd7196df674f9090028d5caa9 100644
--- a/modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache
+++ b/modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache
@@ -88,26 +88,22 @@ export function {{classname}}ToJSON(value?: {{classname}}): any {
     return value;
     {{/hasVars}}
 }
-{{#hasEnums}}
 
-/**
- * @export
- * @namespace {{classname}}
- */
-export namespace {{classname}} {
+{{#hasEnums}}
 {{#vars}}
-    {{#isEnum}}
-    /**
-     * @export
-     * @enum {string}
-     */
-    export enum {{enumName}} {
-    {{#allowableValues}}
-        {{#enumVars}}
-        {{{name}}} = {{{value}}}{{^-last}},{{/-last}}
-        {{/enumVars}}
-    {{/allowableValues}}
-    }
-    {{/isEnum}}
+{{#isEnum}}
+/**
+* @export
+* @enum {string}
+*/
+export enum {{classname}}{{enumName}} {
+{{#allowableValues}}
+    {{#enumVars}}
+    {{{name}}} = {{{value}}}{{^-last}},{{/-last}}
+    {{/enumVars}}
+{{/allowableValues}}
+}
+{{/isEnum}}
 {{/vars}}
-}{{/hasEnums}}
+
+{{/hasEnums}}
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-fetch/builds/default/models/Order.ts b/samples/client/petstore/typescript-fetch/builds/default/models/Order.ts
index 6a77a95173d4052b6ea8a8a29b6fc5e112ed3c9a..7b16f43c4d56766bf7e419bd4ad61087e91fd83d 100644
--- a/samples/client/petstore/typescript-fetch/builds/default/models/Order.ts
+++ b/samples/client/petstore/typescript-fetch/builds/default/models/Order.ts
@@ -47,7 +47,7 @@ export interface Order {
      * @type {string}
      * @memberof Order
      */
-    status?: Order.StatusEnum;
+    status?: OrderStatusEnum;
     /**
      * 
      * @type {boolean}
@@ -82,18 +82,13 @@ export function OrderToJSON(value?: Order): any {
 }
 
 /**
- * @export
- * @namespace Order
- */
-export namespace Order {
-    /**
-     * @export
-     * @enum {string}
-     */
-    export enum StatusEnum {
-        Placed = 'placed',
-        Approved = 'approved',
-        Delivered = 'delivered'
-    }
+* @export
+* @enum {string}
+*/
+export enum OrderStatusEnum {
+    Placed = 'placed',
+    Approved = 'approved',
+    Delivered = 'delivered'
 }
 
+
diff --git a/samples/client/petstore/typescript-fetch/builds/default/models/Pet.ts b/samples/client/petstore/typescript-fetch/builds/default/models/Pet.ts
index 7090b2fab2e7152983f59a2cf3b3f7e1a9d2116f..756b3514ec500af67bc6d1fe3221365978985076 100644
--- a/samples/client/petstore/typescript-fetch/builds/default/models/Pet.ts
+++ b/samples/client/petstore/typescript-fetch/builds/default/models/Pet.ts
@@ -62,7 +62,7 @@ export interface Pet {
      * @type {string}
      * @memberof Pet
      */
-    status?: Pet.StatusEnum;
+    status?: PetStatusEnum;
 }
 
 export function PetFromJSON(json: any): Pet {
@@ -91,18 +91,13 @@ export function PetToJSON(value?: Pet): any {
 }
 
 /**
- * @export
- * @namespace Pet
- */
-export namespace Pet {
-    /**
-     * @export
-     * @enum {string}
-     */
-    export enum StatusEnum {
-        Available = 'available',
-        Pending = 'pending',
-        Sold = 'sold'
-    }
+* @export
+* @enum {string}
+*/
+export enum PetStatusEnum {
+    Available = 'available',
+    Pending = 'pending',
+    Sold = 'sold'
 }
 
+
diff --git a/samples/client/petstore/typescript-fetch/builds/es6-target/models/Order.ts b/samples/client/petstore/typescript-fetch/builds/es6-target/models/Order.ts
index 6a77a95173d4052b6ea8a8a29b6fc5e112ed3c9a..7b16f43c4d56766bf7e419bd4ad61087e91fd83d 100644
--- a/samples/client/petstore/typescript-fetch/builds/es6-target/models/Order.ts
+++ b/samples/client/petstore/typescript-fetch/builds/es6-target/models/Order.ts
@@ -47,7 +47,7 @@ export interface Order {
      * @type {string}
      * @memberof Order
      */
-    status?: Order.StatusEnum;
+    status?: OrderStatusEnum;
     /**
      * 
      * @type {boolean}
@@ -82,18 +82,13 @@ export function OrderToJSON(value?: Order): any {
 }
 
 /**
- * @export
- * @namespace Order
- */
-export namespace Order {
-    /**
-     * @export
-     * @enum {string}
-     */
-    export enum StatusEnum {
-        Placed = 'placed',
-        Approved = 'approved',
-        Delivered = 'delivered'
-    }
+* @export
+* @enum {string}
+*/
+export enum OrderStatusEnum {
+    Placed = 'placed',
+    Approved = 'approved',
+    Delivered = 'delivered'
 }
 
+
diff --git a/samples/client/petstore/typescript-fetch/builds/es6-target/models/Pet.ts b/samples/client/petstore/typescript-fetch/builds/es6-target/models/Pet.ts
index 7090b2fab2e7152983f59a2cf3b3f7e1a9d2116f..756b3514ec500af67bc6d1fe3221365978985076 100644
--- a/samples/client/petstore/typescript-fetch/builds/es6-target/models/Pet.ts
+++ b/samples/client/petstore/typescript-fetch/builds/es6-target/models/Pet.ts
@@ -62,7 +62,7 @@ export interface Pet {
      * @type {string}
      * @memberof Pet
      */
-    status?: Pet.StatusEnum;
+    status?: PetStatusEnum;
 }
 
 export function PetFromJSON(json: any): Pet {
@@ -91,18 +91,13 @@ export function PetToJSON(value?: Pet): any {
 }
 
 /**
- * @export
- * @namespace Pet
- */
-export namespace Pet {
-    /**
-     * @export
-     * @enum {string}
-     */
-    export enum StatusEnum {
-        Available = 'available',
-        Pending = 'pending',
-        Sold = 'sold'
-    }
+* @export
+* @enum {string}
+*/
+export enum PetStatusEnum {
+    Available = 'available',
+    Pending = 'pending',
+    Sold = 'sold'
 }
 
+
diff --git a/samples/client/petstore/typescript-fetch/builds/with-interfaces/models/Order.ts b/samples/client/petstore/typescript-fetch/builds/with-interfaces/models/Order.ts
index 6a77a95173d4052b6ea8a8a29b6fc5e112ed3c9a..7b16f43c4d56766bf7e419bd4ad61087e91fd83d 100644
--- a/samples/client/petstore/typescript-fetch/builds/with-interfaces/models/Order.ts
+++ b/samples/client/petstore/typescript-fetch/builds/with-interfaces/models/Order.ts
@@ -47,7 +47,7 @@ export interface Order {
      * @type {string}
      * @memberof Order
      */
-    status?: Order.StatusEnum;
+    status?: OrderStatusEnum;
     /**
      * 
      * @type {boolean}
@@ -82,18 +82,13 @@ export function OrderToJSON(value?: Order): any {
 }
 
 /**
- * @export
- * @namespace Order
- */
-export namespace Order {
-    /**
-     * @export
-     * @enum {string}
-     */
-    export enum StatusEnum {
-        Placed = 'placed',
-        Approved = 'approved',
-        Delivered = 'delivered'
-    }
+* @export
+* @enum {string}
+*/
+export enum OrderStatusEnum {
+    Placed = 'placed',
+    Approved = 'approved',
+    Delivered = 'delivered'
 }
 
+
diff --git a/samples/client/petstore/typescript-fetch/builds/with-interfaces/models/Pet.ts b/samples/client/petstore/typescript-fetch/builds/with-interfaces/models/Pet.ts
index 7090b2fab2e7152983f59a2cf3b3f7e1a9d2116f..756b3514ec500af67bc6d1fe3221365978985076 100644
--- a/samples/client/petstore/typescript-fetch/builds/with-interfaces/models/Pet.ts
+++ b/samples/client/petstore/typescript-fetch/builds/with-interfaces/models/Pet.ts
@@ -62,7 +62,7 @@ export interface Pet {
      * @type {string}
      * @memberof Pet
      */
-    status?: Pet.StatusEnum;
+    status?: PetStatusEnum;
 }
 
 export function PetFromJSON(json: any): Pet {
@@ -91,18 +91,13 @@ export function PetToJSON(value?: Pet): any {
 }
 
 /**
- * @export
- * @namespace Pet
- */
-export namespace Pet {
-    /**
-     * @export
-     * @enum {string}
-     */
-    export enum StatusEnum {
-        Available = 'available',
-        Pending = 'pending',
-        Sold = 'sold'
-    }
+* @export
+* @enum {string}
+*/
+export enum PetStatusEnum {
+    Available = 'available',
+    Pending = 'pending',
+    Sold = 'sold'
 }
 
+
diff --git a/samples/client/petstore/typescript-fetch/builds/with-npm-version/models/Order.ts b/samples/client/petstore/typescript-fetch/builds/with-npm-version/models/Order.ts
index 6a77a95173d4052b6ea8a8a29b6fc5e112ed3c9a..7b16f43c4d56766bf7e419bd4ad61087e91fd83d 100644
--- a/samples/client/petstore/typescript-fetch/builds/with-npm-version/models/Order.ts
+++ b/samples/client/petstore/typescript-fetch/builds/with-npm-version/models/Order.ts
@@ -47,7 +47,7 @@ export interface Order {
      * @type {string}
      * @memberof Order
      */
-    status?: Order.StatusEnum;
+    status?: OrderStatusEnum;
     /**
      * 
      * @type {boolean}
@@ -82,18 +82,13 @@ export function OrderToJSON(value?: Order): any {
 }
 
 /**
- * @export
- * @namespace Order
- */
-export namespace Order {
-    /**
-     * @export
-     * @enum {string}
-     */
-    export enum StatusEnum {
-        Placed = 'placed',
-        Approved = 'approved',
-        Delivered = 'delivered'
-    }
+* @export
+* @enum {string}
+*/
+export enum OrderStatusEnum {
+    Placed = 'placed',
+    Approved = 'approved',
+    Delivered = 'delivered'
 }
 
+
diff --git a/samples/client/petstore/typescript-fetch/builds/with-npm-version/models/Pet.ts b/samples/client/petstore/typescript-fetch/builds/with-npm-version/models/Pet.ts
index 7090b2fab2e7152983f59a2cf3b3f7e1a9d2116f..756b3514ec500af67bc6d1fe3221365978985076 100644
--- a/samples/client/petstore/typescript-fetch/builds/with-npm-version/models/Pet.ts
+++ b/samples/client/petstore/typescript-fetch/builds/with-npm-version/models/Pet.ts
@@ -62,7 +62,7 @@ export interface Pet {
      * @type {string}
      * @memberof Pet
      */
-    status?: Pet.StatusEnum;
+    status?: PetStatusEnum;
 }
 
 export function PetFromJSON(json: any): Pet {
@@ -91,18 +91,13 @@ export function PetToJSON(value?: Pet): any {
 }
 
 /**
- * @export
- * @namespace Pet
- */
-export namespace Pet {
-    /**
-     * @export
-     * @enum {string}
-     */
-    export enum StatusEnum {
-        Available = 'available',
-        Pending = 'pending',
-        Sold = 'sold'
-    }
+* @export
+* @enum {string}
+*/
+export enum PetStatusEnum {
+    Available = 'available',
+    Pending = 'pending',
+    Sold = 'sold'
 }
 
+
diff --git a/samples/client/petstore/typescript-fetch/tests/default/test/PetApi.ts b/samples/client/petstore/typescript-fetch/tests/default/test/PetApi.ts
index 827cc99303c1f63d4839617b6439c860e3cca2fe..c452573699d5391b2fe5850c418b7dc4908ccd43 100644
--- a/samples/client/petstore/typescript-fetch/tests/default/test/PetApi.ts
+++ b/samples/client/petstore/typescript-fetch/tests/default/test/PetApi.ts
@@ -1,5 +1,5 @@
 import { expect } from 'chai';
-import { PetApi, Pet, Category } from '@swagger/typescript-fetch-petstore';
+import { PetApi, Pet, PetStatusEnum, Category } from '@swagger/typescript-fetch-petstore';
 import { config } from '../configuration';
 
 describe('PetApi', () => {
@@ -67,7 +67,7 @@ function createTestFixture(ts = Date.now()) {
         'name': `pet${ts}`,
         'category': category,
         'photoUrls': ['http://foo.bar.com/1', 'http://foo.bar.com/2'],
-        'status': Pet.StatusEnum.Available,
+        'status': PetStatusEnum.Available,
         'tags': []
     };