diff --git a/wicket/src/main/java/org/apache/wicket/markup/html/PackageResourceGuard.java b/wicket/src/main/java/org/apache/wicket/markup/html/PackageResourceGuard.java
index dd1ae88..0ebb48c 100644
--- a/wicket/src/main/java/org/apache/wicket/markup/html/PackageResourceGuard.java
+++ b/wicket/src/main/java/org/apache/wicket/markup/html/PackageResourceGuard.java
@@ -91,12 +91,26 @@
 			ext = path.substring(ixExtension + 1).toLowerCase().trim();
 		}
 
-		if ("html".equals(ext) &&
-			getClass().getClassLoader().getResource(path.replaceAll("\\.html", ".class")) != null)
+		if ("html".equals(ext))
 		{
-			log.warn("Access denied to shared (static) resource because it is a Wicket markup file: " +
-				path);
-			return false;
+			String prefix = path.substring(0, ixExtension);
+			ClassLoader classLoader = getClass().getClassLoader();
+			while (true)
+			{
+				if (classLoader.getResource(prefix + ".class") != null)
+				{
+					log.warn("Access denied to shared (static) resource because it is a Wicket markup file: " +
+						path);
+					return false;
+				}
+
+				int ixUnderscore = prefix.lastIndexOf('_');
+				if (ixUnderscore == -1)
+				{
+					break;
+				}
+				prefix = prefix.substring(0, ixUnderscore);
+			}
 		}
 
 		if (acceptExtension(ext) == false)
diff --git a/wicket/src/test/java/org/apache/wicket/markup/html/PackageResourceGuardTest.java b/wicket/src/test/java/org/apache/wicket/markup/html/PackageResourceGuardTest.java
new file mode 100644
index 0000000..32a0210
--- /dev/null
+++ b/wicket/src/test/java/org/apache/wicket/markup/html/PackageResourceGuardTest.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.markup.html;
+
+import org.apache.wicket.WicketTestCase;
+import org.junit.Test;
+
+/**
+ * @author Juergen Donnerstag
+ */
+public class PackageResourceGuardTest extends WicketTestCase
+{
+	/**
+	 * Allow access to non-component markup
+	 * 
+	 * @throws Exception
+	 */
+	@Test
+	public void testMarkup() throws Exception
+	{
+		PackageResourceGuard guard = new PackageResourceGuard();
+
+		assertNotNull(getClass().getResource(
+			"/org/apache/wicket/markup/html/PackageResourceGuardTest$MyClass.class"));
+
+		assertFalse(guard.acceptAbsolutePath("org/apache/wicket/markup/html/PackageResourceGuardTest$MyClass.html"));
+		assertFalse(guard.acceptAbsolutePath("org/apache/wicket/markup/html/PackageResourceGuardTest$MyClass_de.html"));
+		assertFalse(guard.acceptAbsolutePath("org/apache/wicket/markup/html/PackageResourceGuardTest$MyClass_SomeHTMLSnippetIWantServed.html"));
+		assertFalse(guard.acceptAbsolutePath("org/apache/wicket/markup/html/PackageResourceGuardTest$MyOtherClass_WithCrazyName.html"));
+		assertFalse(guard.acceptAbsolutePath("org/apache/wicket/markup/html/PackageResourceGuardTest$MyOtherClass_WithCrazyName_de.html"));
+		assertFalse(guard.acceptAbsolutePath("org/apache/wicket/markup/html/PackageResourceGuardTest$MyOtherClass_WithCrazyName_en.html"));
+		assertTrue(guard.acceptAbsolutePath("org/apache/wicket/markup/html/PackageResourceGuardTest$MyOtherClass.html"));
+	}
+
+	private class MyClass extends WebComponent
+	{
+
+		public MyClass(String id)
+		{
+			super(id);
+		}
+	}
+
+	private class MyOtherClass_WithCrazyName extends WebComponent
+	{
+
+		public MyOtherClass_WithCrazyName(String id)
+		{
+			super(id);
+		}
+	}
+}
