diff --git a/org.eclipse.mylyn.wikitext.mediawiki.core/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/AbstractMediaWikiLanguage.java b/org.eclipse.mylyn.wikitext.mediawiki.core/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/AbstractMediaWikiLanguage.java
index 671a291..b15ad4d 100644
--- a/org.eclipse.mylyn.wikitext.mediawiki.core/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/AbstractMediaWikiLanguage.java
+++ b/org.eclipse.mylyn.wikitext.mediawiki.core/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/AbstractMediaWikiLanguage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2012 David Green and others.
+ * Copyright (c) 2010, 2012, 2015 David Green and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,8 +50,15 @@
 				return mapping;
 			}
 		}
-		String pageId = pageName.replace(' ', '_');
-		// FIXME: other character encodings occur here, not just ' '
+
+		String pageId;
+		int anchorIndex = pageName.indexOf("#"); //$NON-NLS-1$
+		if (anchorIndex < 0) {
+			pageId = pageName;
+		} else {
+			String encodedAnchor = MediaWikiIdGenerationStrategy.headingTextToId(pageName.substring(anchorIndex + 1));
+			pageId = pageName.substring(0, anchorIndex) + "#" + encodedAnchor; //$NON-NLS-1$
+		}
 
 		if (pageId.startsWith(CATEGORY_PREFIX) && pageId.length() > CATEGORY_PREFIX.length()) { // category
 			return pageId.substring(CATEGORY_PREFIX.length());
diff --git a/org.eclipse.mylyn.wikitext.mediawiki.core/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/MediaWikiIdGenerationStrategy.java b/org.eclipse.mylyn.wikitext.mediawiki.core/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/MediaWikiIdGenerationStrategy.java
index 1693bd3..5f0d41a 100644
--- a/org.eclipse.mylyn.wikitext.mediawiki.core/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/MediaWikiIdGenerationStrategy.java
+++ b/org.eclipse.mylyn.wikitext.mediawiki.core/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/MediaWikiIdGenerationStrategy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2011 David Green and others.
+ * Copyright (c) 2007, 2011, 2015 David Green and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,7 +36,7 @@
 		//   anchor = anchor + '_' + refCount(anchor) 
 		// }
 
-		String anchor = escape(headingText);
+		String anchor = headingTextToId(headingText);
 		Integer previousRefCount = anchorReferenceCount.put(anchor, 1);
 		if (previousRefCount != null) {
 			int refCount = previousRefCount + 1;
@@ -47,7 +47,14 @@
 		return anchor;
 	}
 
-	private String escape(String headingText) {
+	/**
+	 * encode a page name or anchor following MediaWiki encoding behaviour
+	 * 
+	 * @param headingText
+	 *            the heading text, page name or anchor text
+	 * @return an encoded id
+	 */
+	static String headingTextToId(String headingText) {
 		// implementation based on Sanitizer.php line 629
 		String escaped = headingText.replaceAll("\\s", "_"); //$NON-NLS-1$ //$NON-NLS-2$
 		// TODO: decode entity and char references
diff --git a/org.eclipse.mylyn.wikitext.mediawiki.core/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/PageMapping.java b/org.eclipse.mylyn.wikitext.mediawiki.core/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/PageMapping.java
index d2634f1..a427c63 100644
--- a/org.eclipse.mylyn.wikitext.mediawiki.core/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/PageMapping.java
+++ b/org.eclipse.mylyn.wikitext.mediawiki.core/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/PageMapping.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 David Green and others.
+ * Copyright (c) 2010, 2015 David Green and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,7 +21,8 @@
 	 * provide a relative mapping for the given page name.
 	 * 
 	 * @param pageName
-	 *            the name of the page, for example "Mylyn/User_Guide"
+	 *            the name of the page, for example "Mylyn/User_Guide", ":Category:Mylyn", "#Some_link?" or
+	 *            "Main Page#help".
 	 * @return a relative or absolute URL, or null if no mapping is available or if the default mapping should apply.
 	 */
 	String mapPageNameToHref(String pageName);
diff --git a/org.eclipse.mylyn.wikitext.tests/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/MediaWikiIdGenerationStrategyTest.java b/org.eclipse.mylyn.wikitext.tests/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/MediaWikiIdGenerationStrategyTest.java
index 021f614..4c6bc82 100644
--- a/org.eclipse.mylyn.wikitext.tests/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/MediaWikiIdGenerationStrategyTest.java
+++ b/org.eclipse.mylyn.wikitext.tests/src/org/eclipse/mylyn/internal/wikitext/mediawiki/core/MediaWikiIdGenerationStrategyTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 David Green and others.
+ * Copyright (c) 2007, 2010, 2015 David Green and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,4 +33,11 @@
 	public void testWithDots() {
 		assertEquals("com.foo.Bar", generationStrategy.generateId("com.foo.Bar"));
 	}
+
+	public void testHeadingTextToId() {
+		//Bug 388657
+		assertEquals("Anchor_Text.3F", generationStrategy.generateId("Anchor Text?"));
+		assertEquals("This.2FSection", generationStrategy.generateId("This/Section"));
+		assertEquals("C.23_Implementation", generationStrategy.generateId("C# Implementation"));
+	}
 }
diff --git a/org.eclipse.mylyn.wikitext.tests/src/org/eclipse/mylyn/wikitext/mediawiki/core/MediaWikiLanguageTest.java b/org.eclipse.mylyn.wikitext.tests/src/org/eclipse/mylyn/wikitext/mediawiki/core/MediaWikiLanguageTest.java
index 9b9a225..af3e916 100644
--- a/org.eclipse.mylyn.wikitext.tests/src/org/eclipse/mylyn/wikitext/mediawiki/core/MediaWikiLanguageTest.java
+++ b/org.eclipse.mylyn.wikitext.tests/src/org/eclipse/mylyn/wikitext/mediawiki/core/MediaWikiLanguageTest.java
@@ -417,6 +417,22 @@
 	}
 
 	@Test
+	public void testLinkInternalPageReferenceWithAltTextAndAnchor() {
+		//Bug 388657
+		assertMarkup(
+				"<p>a <a href=\"/wiki/Main_Page#Anchor_Text.3F\" title=\"Main Page#Anchor Text?\">text of the link</a> reference to the Main Page</p>",
+				"a [[Main Page#Anchor Text?|text of the link]] reference to the Main Page");
+	}
+
+	@Test
+	public void testLinkInternalPageReferenceWithAltTextAndAnchor2() {
+		//Bug 388657
+		assertMarkup(
+				"<p>Go to <a href=\"/wiki/This!page#with_anchor.21\" title=\"This!page#with anchor!\">this page</a> to have an example</p>",
+				"Go to [[This!page#with anchor!|this page]] to have an example");
+	}
+
+	@Test
 	public void testLinkInternalPageReferenceWithAltTextInTables() {
 		assertMarkup(
 				"<table><tr><td><a href=\"/wiki/Orion/Server_API/Preference_API\" title=\"Orion/Server_API/Preference API\">Preference API</a></td></tr></table>",
