diff --git a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
index 775be8a..cddc59f 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
@@ -972,7 +972,11 @@
 					&& token.getType() != ASTokenTypes.TOKEN_BLOCK_OPEN) {
 				blockOpenPending = false;
 			}
-			caseOrDefaultBlockOpenPending = false;
+			if (token.getType() != ASTokenTypes.HIDDEN_TOKEN_SINGLE_LINE_COMMENT
+					&& token.getType() != ASTokenTypes.HIDDEN_TOKEN_MULTI_LINE_COMMENT
+					&& token.getType() != ASTokenTypes.TOKEN_ASDOC_COMMENT) {
+				caseOrDefaultBlockOpenPending = false;
+			}
 			requiredSpace = false;
 			numRequiredNewLines = 0;
 			if (token instanceof MetaDataPayloadToken) {
@@ -1041,7 +1045,9 @@
 							if (!(item instanceof ObjectLiteralBlockStackItem)
 									&& (nextToken == null || (nextToken.getType() != ASTokenTypes.TOKEN_SEMICOLON
 											&& nextToken.getType() != ASTokenTypes.TOKEN_PAREN_CLOSE
-											&& nextToken.getType() != ASTokenTypes.TOKEN_COMMA))) {
+											&& nextToken.getType() != ASTokenTypes.TOKEN_COMMA
+											&& nextToken.getType() != ASTokenTypes.HIDDEN_TOKEN_SINGLE_LINE_COMMENT
+											&& nextToken.getType() != ASTokenTypes.HIDDEN_TOKEN_MULTI_LINE_COMMENT))) {
 								numRequiredNewLines = Math.max(numRequiredNewLines, 1);
 							}
 						}
@@ -1173,7 +1179,12 @@
 								inCaseOrDefaultClause = false;
 								caseOrDefaultBlockOpenPending = true;
 								indent = increaseIndent(indent);
-								numRequiredNewLines = Math.max(numRequiredNewLines, 1);
+								if (nextToken != null && (nextToken.getType() == ASTokenTypes.HIDDEN_TOKEN_SINGLE_LINE_COMMENT
+									|| nextToken.getType() == ASTokenTypes.HIDDEN_TOKEN_MULTI_LINE_COMMENT)) {
+									requiredSpace = true;
+								} else {
+									numRequiredNewLines = Math.max(numRequiredNewLines, 1);
+								}
 							} else if (ternaryStack > 0) {
 								ternaryStack--;
 								requiredSpace = true;
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestMultiLineComment.java b/formatter/src/test/java/org/apache/royale/formatter/TestMultiLineComment.java
index c55a310..6d32a02 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestMultiLineComment.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestMultiLineComment.java
@@ -108,4 +108,30 @@
 				result);
 	}
 
+	@Test
+	public void testAtEndOfBlock() {
+		FORMATTER formatter = new FORMATTER();
+		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		formatter.placeOpenBraceOnNewLine = true;
+		formatter.insertSpaces = false;
+		formatter.insertSpaceAtStartOfLineComment = true;
+		String result = formatter.formatActionScriptText(
+		// @formatter:off
+			"{\n" +
+			"\tstatement;\n" +
+			"} /* this is a comment */\n" +
+			"statement;",
+			// @formatter:on
+			problems
+		);
+		assertEquals(
+		// @formatter:off
+				"{\n" +
+				"\tstatement;\n" +
+				"} /* this is a comment */\n" +
+				"statement;",
+				// @formatter:on
+				result);
+	}
+
 }
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestSingleLineComment.java b/formatter/src/test/java/org/apache/royale/formatter/TestSingleLineComment.java
index 10e26f2..4c20606 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestSingleLineComment.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestSingleLineComment.java
@@ -178,4 +178,30 @@
 				result);
 	}
 
+	@Test
+	public void testAtEndOfBlock() {
+		FORMATTER formatter = new FORMATTER();
+		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		formatter.placeOpenBraceOnNewLine = true;
+		formatter.insertSpaces = false;
+		formatter.insertSpaceAtStartOfLineComment = true;
+		String result = formatter.formatActionScriptText(
+		// @formatter:off
+			"{\n" +
+			"\tstatement;\n" +
+			"} // this is a comment\n" +
+			"statement;",
+			// @formatter:on
+			problems
+		);
+		assertEquals(
+		// @formatter:off
+				"{\n" +
+				"\tstatement;\n" +
+				"} // this is a comment\n" +
+				"statement;",
+				// @formatter:on
+				result);
+	}
+
 }
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestSwitchStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestSwitchStatement.java
index d5a7677..dffb116 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestSwitchStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestSwitchStatement.java
@@ -699,4 +699,56 @@
 				// @formatter:on
 				result);
 	}
+
+	@Test
+	public void testCommentOnSameLineAsCaseClause() {
+		FORMATTER formatter = new FORMATTER();
+		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		formatter.placeOpenBraceOnNewLine = true;
+		formatter.insertSpaces = false;
+		String result = formatter.formatActionScriptText(
+		// @formatter:off
+			"switch (condition)\n" +
+			"{\n" +
+			"\tcase clause://what\n" +
+			"\t\tbreak;\n" +
+			"}",
+			// @formatter:on
+			problems
+		);
+		assertEquals(
+		// @formatter:off
+				"switch (condition)\n" +
+				"{\n" +
+				"\tcase clause: // what\n" +
+				"\t\tbreak;\n" +
+				"}",
+				// @formatter:on
+				result);
+	}
+
+	@Test
+	public void testCommentOnSameLineAsDefaultClause() {
+		FORMATTER formatter = new FORMATTER();
+		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		formatter.placeOpenBraceOnNewLine = true;
+		formatter.insertSpaces = false;
+		String result = formatter.formatActionScriptText(
+		// @formatter:off
+			"switch (condition)\n" +
+			"{\n" +
+			"\tdefault://what\n" +
+			"}",
+			// @formatter:on
+			problems
+		);
+		assertEquals(
+		// @formatter:off
+				"switch (condition)\n" +
+				"{\n" +
+				"\tdefault: // what\n" +
+				"}",
+				// @formatter:on
+				result);
+	}
 }
