diff --git a/lib/versioning/composer/index.spec.ts b/lib/versioning/composer/index.spec.ts
index 62848c38bec2fa3d746971d2d71aeea8813d9263..357bd26bc390f8a5ca8ef50d9bde32c7775ad2ba 100644
--- a/lib/versioning/composer/index.spec.ts
+++ b/lib/versioning/composer/index.spec.ts
@@ -55,9 +55,14 @@ describe('semver.isValid(input)', () => {
     expect(semver.isValid('>1.2.3')).toBeTruthy();
   });
   it('should support ranges with stability modifiers', () => {
-    expect(semver.isValid('~1.2.3@beta1')).toBeTruthy();
+    expect(semver.isValid('~1.2.3-beta1')).toBeTruthy();
+    expect(semver.isValid('^1.2.3-alpha')).toBeTruthy();
+    expect(semver.isValid('>1.2.3-rc2')).toBeTruthy();
+  });
+  it('should support ranges with min-stability', () => {
+    expect(semver.isValid('~1.2.3@beta')).toBeTruthy();
     expect(semver.isValid('^1.2.3@alpha')).toBeTruthy();
-    expect(semver.isValid('>1.2.3@rc2')).toBeTruthy();
+    expect(semver.isValid('>1.2.3@rc')).toBeTruthy();
   });
 });
 describe('semver.isVersion(input)', () => {
@@ -336,7 +341,7 @@ describe('semver.getNewValue()', () => {
         fromVersion: '1.0.0-beta3',
         toVersion: '1.0.0-beta5',
       })
-    ).toEqual('^v1.0.0@beta5');
+    ).toEqual('^v1.0.0-beta5@beta');
   });
   it('replaces short caret with stability modifiers', () => {
     expect(
@@ -346,7 +351,17 @@ describe('semver.getNewValue()', () => {
         fromVersion: '1.0.0-beta3',
         toVersion: '2.0.0-beta5',
       })
-    ).toEqual('^v2.0.0@beta5');
+    ).toEqual('^v2.0.0-beta5@beta');
+  });
+  it('preserves the current min-stability modifiers', () => {
+    expect(
+      semver.getNewValue({
+        currentValue: '^4.0@alpha',
+        rangeStrategy: 'replace',
+        fromVersion: '4.0.0-alpha1',
+        toVersion: '4.0.0-beta5',
+      })
+    ).toEqual('^4.0.0-beta5@alpha');
   });
   it('handles differing lengths', () => {
     expect(
diff --git a/lib/versioning/composer/index.ts b/lib/versioning/composer/index.ts
index bcfba4d621d0a0f20f4a0945071a1359d3433efe..4f7048d246d1d339630f415cea834aa9a114e22e 100644
--- a/lib/versioning/composer/index.ts
+++ b/lib/versioning/composer/index.ts
@@ -185,7 +185,13 @@ function getNewValue({
   if (currentValue.split('.')[0].includes('v')) {
     newValue = newValue.replace(/([0-9])/, 'v$1');
   }
-  return newValue.replace('-', '@');
+
+  // Preserve original min-stability specifier
+  if (currentValue.includes('@')) {
+    newValue += '@' + currentValue.split('@')[1];
+  }
+
+  return newValue;
 }
 
 function sortVersions(a: string, b: string): number {