diff --git a/src/tools/raid-calculator/index.ts b/src/tools/raid-calculator/index.ts
index a22dbdab..6420deb1 100644
--- a/src/tools/raid-calculator/index.ts
+++ b/src/tools/raid-calculator/index.ts
@@ -4,7 +4,7 @@ import { defineTool } from '../tool';
 export const tool = defineTool({
   name: 'RAID Calculator',
   path: '/raid-calculator',
-  description: 'Calculate storage capacity and fault tolerance of an array based on the number of disks, size, and RAID type',
+  description: 'Calculate storage capacity, fault tolerance and space efficiency of an array based on the number of disks, size, and RAID type',
   keywords: ['raid', 'calculator'],
   component: () => import('./raid-calculator.vue'),
   icon: Database,
diff --git a/src/tools/raid-calculator/raid-calculator.service.ts b/src/tools/raid-calculator/raid-calculator.service.ts
index 69b9c309..0428548c 100644
--- a/src/tools/raid-calculator/raid-calculator.service.ts
+++ b/src/tools/raid-calculator/raid-calculator.service.ts
@@ -97,12 +97,12 @@ const raidCalculations = {
   },
   raid_50: {
     about: 'RAID 50 stripes multiple RAID 5 arrays together (RAID 5 + RAID 0). Each RAID 5 set can sustain a single drive failure. More info: Wikipedia',
-    requirements: 'RAID 50 requires at least 6 disks total with 3 minimum per stripe. Stripes must contain an equal number of disks.',
+    requirements: 'RAID 50 requires at least 6 disks with 3 minimum per stripe. Stripes must contain an equal number of disks.',
     validate(num, size, stripeSize) {
       return num >= 6 && stripeSize >= 3 && num % stripeSize === 0;
     },
     capacity(num, size, stripeSize, unit) {
-      // RAID 5 per strip
+      // RAID 5 per stripe
       const perStripe = ((stripeSize - 1) * size) * unit;
 
       // sum each stripe
@@ -113,8 +113,30 @@ const raidCalculations = {
       return (1 - (1 / stripeSize)) * 100;
     },
     fault(num, size, unit) {
-      // one per mirror
+      // one per set
       return '1 drive failure per RAID 5 set';
     },
   },
+  raid_60: {
+    about: 'RAID 60 stripes multiple RAID 6 arrays together (RAID 6 + RAID 0). Each RAID 6 set can sustain a two drive failures. More info: Wikipedia',
+    requirements: 'RAID 50 requires at least 8 disks with 4 minimum per stripe. Stripes must contain an equal number of disks.',
+    validate(num, size, stripeSize) {
+      return num >= 8 && stripeSize >= 4 && num % stripeSize === 0;
+    },
+    capacity(num, size, stripeSize, unit) {
+      // RAID 6 per stripe
+      const perStripe = ((stripeSize - 2) * size) * unit;
+
+      // sum each stripe
+      return perStripe * (num / stripeSize);
+    },
+    efficiency(num, stripeSize) {
+      // 1 - (2 / strips per stripe)
+      return (1 - (2 / stripeSize)) * 100;
+    },
+    fault(num, size, unit) {
+      // 2 per set
+      return '2 drive failures per RAID 6 set';
+    },
+  },
 };
diff --git a/src/tools/raid-calculator/raid-calculator.vue b/src/tools/raid-calculator/raid-calculator.vue
index 0e607034..acb4b08a 100644
--- a/src/tools/raid-calculator/raid-calculator.vue
+++ b/src/tools/raid-calculator/raid-calculator.vue
@@ -62,7 +62,7 @@ function validateSetup() {
           />
         
       
-      
+      
         
         
       
@@ -77,6 +77,7 @@ function validateSetup() {
             { label: 'RAID 6 (double parity)', value: 'raid_6' },
             { label: 'RAID 10 (mirror + stripe)', value: 'raid_10' },
             { label: 'RAID 50 (parity + stripe)', value: 'raid_50' },
+            { label: 'RAID 60 (double parity + stripe)', value: 'raid_60' },
           ]"
         />