diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java
index 2bb6481c49cba7c687be272fa5adfd97addc23f2..c5afa2dd8b184fa68ad6acdc6807b171ab6ff950 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java
@@ -648,7 +648,7 @@ public class ModelUtils {
             } else if (isStringSchema(ref) && (ref.getEnum() != null && !ref.getEnum().isEmpty())) {
                 // top-level enum class
                 return schema;
-            } else if (isMapSchema(ref) || isArraySchema(ref)) { // map/array def should be created as models
+            } else if (isMapSchema(ref) || isArraySchema(ref) || isComposedSchema(ref)) { // map/array def should be created as models
                 return schema;
             } else {
                 return unaliasSchema(allSchemas, allSchemas.get(ModelUtils.getSimpleRef(schema.get$ref())));
diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/utils/ModelUtilsTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/utils/ModelUtilsTest.java
index ac9648e0243e2066fc337ae39ef0b709406e39a1..e09d27dbb9502d39c44bd739d425260ba6d903c1 100644
--- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/utils/ModelUtilsTest.java
+++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/utils/ModelUtilsTest.java
@@ -19,10 +19,7 @@ package org.openapitools.codegen.utils;
 
 import io.swagger.parser.OpenAPIParser;
 import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.oas.models.media.IntegerSchema;
-import io.swagger.v3.oas.models.media.ObjectSchema;
-import io.swagger.v3.oas.models.media.Schema;
-import io.swagger.v3.oas.models.media.StringSchema;
+import io.swagger.v3.oas.models.media.*;
 import io.swagger.v3.oas.models.parameters.Parameter;
 import io.swagger.v3.oas.models.parameters.RequestBody;
 import io.swagger.v3.oas.models.responses.ApiResponse;
@@ -32,7 +29,10 @@ import org.openapitools.codegen.TestUtils;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
+import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 public class ModelUtilsTest {
 
@@ -173,4 +173,24 @@ public class ModelUtilsTest {
         Parameter result2 = ModelUtils.getReferencedParameter(openAPI, new Parameter().$ref("#/components/parameters/OtherParameter"));
         Assert.assertEquals(result2, otherParameter);
     }
+
+    /**
+     * Issue https://github.com/OpenAPITools/openapi-generator/issues/582.
+     * Composed schemas should not get unaliased when generating model properties, in order to properly
+     * generate the property data type name.
+     */
+    @Test
+    public void testComposedSchemasAreNotUnaliased() {
+        ComposedSchema composedSchema = new ComposedSchema().allOf(Arrays.asList(
+                new Schema<>().$ref("#/components/schemas/SomeSchema"),
+                new ObjectSchema()
+        ));
+        Schema refToComposedSchema = new Schema().$ref("#/components/schemas/SomeComposedSchema");
+
+
+        Map<String, Schema> allSchemas = new HashMap<>();
+        allSchemas.put("SomeComposedSchema", composedSchema);
+
+        Assert.assertEquals(refToComposedSchema, ModelUtils.unaliasSchema(allSchemas, refToComposedSchema));
+    }
 }