diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 05646b9..a2ca6ff 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,13 @@
+2019-08-24  Devin Rousso  <drousso@apple.com>
+
+        Web Inspector: "Copy Rule" menu item does not propagate comments properly
+        https://bugs.webkit.org/show_bug.cgi?id=201095
+
+        Reviewed by Joseph Pecoraro.
+
+        * inspector/css/generateCSSRuleString.html:
+        * inspector/css/generateCSSRuleString-expected.txt:
+
 2019-08-23  Devin Rousso  <drousso@apple.com>
 
         Web Inspector: create additional command line api functions for other console methods
diff --git a/LayoutTests/inspector/css/generateCSSRuleString-expected.txt b/LayoutTests/inspector/css/generateCSSRuleString-expected.txt
index d377974..ae9e058 100644
--- a/LayoutTests/inspector/css/generateCSSRuleString-expected.txt
+++ b/LayoutTests/inspector/css/generateCSSRuleString-expected.txt
@@ -4,38 +4,84 @@
 == Running test suite: CSS.generateCSSRuleString
 -- Running test case: CSS.generateCSSRuleString.InlineStyle
 #test-node {
-    a-b: 1;
-    c-d: 2;
+    a: 1;
+    b: 2;
+    c: 3;
+}
+
+-- Running test case: CSS.generateCSSRuleString.InlineStyle.WithCommentedProperty
+#test-node {
+    a: 1;
+    /* b: 2; */
+    c: 3;
 }
 
 -- Running test case: CSS.generateCSSRuleString.MatchedRules
 @media only screen and (min-width: 0px) {
     @media only screen and (min-height: 0px) {
         body > div#test-node {
-            a-b: 1;
-            c-d: 2;
+            a: 1;
+            b: 2;
+            c: 3;
         }
     }
 }
 @media only screen and (min-width: 0px) {
     body > #test-node {
-        a-b: 1;
-        c-d: 2;
+        a: 1;
+        b: 2;
+        c: 3;
     }
 }
 body > div {
-    a-b: 1;
-    c-d: 2;
+    a: 1;
+    b: 2;
+    c: 3;
 }
 body > * {
-    a-b: 1;
-    c-d: 2;
+    a: 1;
+    b: 2;
+    c: 3;
 }
 * {
-    a-b: 1;
-    c-d: 2;
+    a: 1;
+    b: 2;
+    c: 3;
 }
 address, article, aside, div, footer, header, hgroup, layer, main, nav, section {
     display: block;
 }
 
+-- Running test case: CSS.generateCSSRuleString.MatchedRules.WithCommentedProperties
+@media only screen and (min-width: 0px) {
+    @media only screen and (min-height: 0px) {
+        body > div#test-node {
+            a: 1;
+            /* b: 2; */
+            c: 3;
+        }
+    }
+}
+@media only screen and (min-width: 0px) {
+    body > #test-node {
+        a: 1;
+        /* b: 2; */
+        c: 3;
+    }
+}
+body > div {
+    a: 1;
+    /* b: 2; */
+    c: 3;
+}
+body > * {
+    a: 1;
+    /* b: 2; */
+    c: 3;
+}
+* {
+    a: 1;
+    /* b: 2; */
+    c: 3;
+}
+
diff --git a/LayoutTests/inspector/css/generateCSSRuleString.html b/LayoutTests/inspector/css/generateCSSRuleString.html
index f87624d..dbb55b3 100644
--- a/LayoutTests/inspector/css/generateCSSRuleString.html
+++ b/LayoutTests/inspector/css/generateCSSRuleString.html
@@ -2,11 +2,11 @@
 <html>
 <head>
 <style>
-*{a-b:1;c-d:2}
-body>*{a-b:1;c-d:2}
-@media all {body>div{a-b:1;c-d:2}}
-@media only screen and (min-width:0px) {body>#test-node{a-b:1;c-d:2}}
-@media only screen and (min-width:0px) {@media only screen and (min-height:0px) {body>div#test-node{a-b:1;c-d:2}}}
+*{a:1;b:2;c:3}
+body>*{a:1;b:2;c:3}
+@media all {body>div{a:1;b:2;c:3}}
+@media only screen and (min-width:0px) {body>#test-node{a:1;b:2;c:3}}
+@media only screen and (min-width:0px) {@media only screen and (min-height:0px) {body>div#test-node{a:1;b:2;c:3}}}
 </style>
 <script src="../../http/tests/inspector/resources/inspector-test.js"></script>
 <script>
@@ -24,6 +24,15 @@
     });
 
     suite.addTestCase({
+        name: "CSS.generateCSSRuleString.InlineStyle.WithCommentedProperty",
+        description: "Check the formatting of the generated inline style string if a property is commented out.",
+        test() {
+            nodeStyles.inlineStyle.properties[1].commentOut(true);
+            InspectorTest.log(nodeStyles.inlineStyle.generateCSSRuleString());
+        },
+    });
+
+    suite.addTestCase({
         name: "CSS.generateCSSRuleString.MatchedRules",
         description: "Check the formatting of the generated string for all matched CSS rules.",
         test() {
@@ -32,6 +41,20 @@
         }
     });
 
+    suite.addTestCase({
+        name: "CSS.generateCSSRuleString.MatchedRules.WithCommentedProperties",
+        description: "Check the formatting of the generated string for all matched CSS rules if a property is commented out in each.",
+        test() {
+            for (let rule of nodeStyles.matchedRules) {
+                if (!rule.style.editable)
+                    continue;
+
+                rule.style.properties[1].commentOut(true);
+                InspectorTest.log(rule.style.generateCSSRuleString());
+            }
+        }
+    });
+
     WI.domManager.requestDocument((documentNode) => {
         WI.domManager.querySelector(documentNode.id, "#test-node", async (contentNodeId) => {
             if (!contentNodeId) {
@@ -53,6 +76,6 @@
 </head>
 <body onload="runTest()">
     <p>Testing that generated CSS rule strings have proper formatting.</p>
-    <div id="test-node" style="a-b:1;c-d:2"></div>
+    <div id="test-node" style="a:1;b:2;c:3"></div>
 </body>
 </html>
diff --git a/Source/WebInspectorUI/ChangeLog b/Source/WebInspectorUI/ChangeLog
index d04a694..bc7787f 100644
--- a/Source/WebInspectorUI/ChangeLog
+++ b/Source/WebInspectorUI/ChangeLog
@@ -1,3 +1,15 @@
+2019-08-24  Devin Rousso  <drousso@apple.com>
+
+        Web Inspector: "Copy Rule" menu item does not propagate comments properly
+        https://bugs.webkit.org/show_bug.cgi?id=201095
+
+        Reviewed by Joseph Pecoraro.
+
+        * UserInterface/Models/CSSProperty.js:
+        (WI.CSSProperty.prototype.commentOut):
+        (WI.CSSProperty.prototype.get formattedText):
+        Wrap the `text` in `/* ${text} */` if the `WI.CSSProperty` isn't `enabled` (e.g. commented out).
+
 2019-08-23  Devin Rousso  <drousso@apple.com>
 
         Web Inspector: create additional command line api functions for other console methods
diff --git a/Source/WebInspectorUI/UserInterface/Models/CSSProperty.js b/Source/WebInspectorUI/UserInterface/Models/CSSProperty.js
index 4f8f0df..d812d81 100644
--- a/Source/WebInspectorUI/UserInterface/Models/CSSProperty.js
+++ b/Source/WebInspectorUI/UserInterface/Models/CSSProperty.js
@@ -149,6 +149,7 @@
 
     commentOut(disabled)
     {
+        console.assert(this.editable);
         if (this._enabled === !disabled)
             return;
 
@@ -181,7 +182,10 @@
         if (!this._name)
             return "";
 
-        return `${this._name}: ${this._rawValue};`;
+        let text = `${this._name}: ${this._rawValue};`;
+        if (!this._enabled)
+            text = "/* " + text + " */";
+        return text;
     }
 
     get modified()
