diff --git a/cdtk/functions.php b/cdtk/functions.php
index 432bb72..bb63478 100644
--- a/cdtk/functions.php
+++ b/cdtk/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/code-recommenders/functions.php b/code-recommenders/functions.php
index 432bb72..bb63478 100644
--- a/code-recommenders/functions.php
+++ b/code-recommenders/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/ebm/functions.php b/ebm/functions.php
index 432bb72..bb63478 100644
--- a/ebm/functions.php
+++ b/ebm/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/ebpm/functions.php b/ebpm/functions.php
index 432bb72..bb63478 100644
--- a/ebpm/functions.php
+++ b/ebpm/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/eclipse.orion/functions.php b/eclipse.orion/functions.php
index 432bb72..bb63478 100755
--- a/eclipse.orion/functions.php
+++ b/eclipse.orion/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/egl/functions.php b/egl/functions.php
index 432bb72..bb63478 100644
--- a/egl/functions.php
+++ b/egl/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/emf-client/functions.php b/emf-client/functions.php
index 432bb72..bb63478 100644
--- a/emf-client/functions.php
+++ b/emf-client/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/emf-facet/functions.php b/emf-facet/functions.php
index 432bb72..bb63478 100755
--- a/emf-facet/functions.php
+++ b/emf-facet/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/emf-store/functions.php b/emf-store/functions.php
index 432bb72..bb63478 100644
--- a/emf-store/functions.php
+++ b/emf-store/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/etrice/functions.php b/etrice/functions.php
index 432bb72..bb63478 100755
--- a/etrice/functions.php
+++ b/etrice/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/graphiti/functions.php b/graphiti/functions.php
index 432bb72..bb63478 100644
--- a/graphiti/functions.php
+++ b/graphiti/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/jubula/functions.php b/jubula/functions.php
index 432bb72..bb63478 100755
--- a/jubula/functions.php
+++ b/jubula/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/libra/functions.php b/libra/functions.php
index 432bb72..bb63478 100644
--- a/libra/functions.php
+++ b/libra/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/mangrove/functions.php b/mangrove/functions.php
index 432bb72..bb63478 100644
--- a/mangrove/functions.php
+++ b/mangrove/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/modeling.eatop/functions.php b/modeling.eatop/functions.php
index 432bb72..bb63478 100644
--- a/modeling.eatop/functions.php
+++ b/modeling.eatop/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/modeling.emf.edm/functions.php b/modeling.emf.edm/functions.php
index 432bb72..bb63478 100644
--- a/modeling.emf.edm/functions.php
+++ b/modeling.emf.edm/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/modeling.emf.incquery/functions.php b/modeling.emf.incquery/functions.php
index 432bb72..bb63478 100755
--- a/modeling.emf.incquery/functions.php
+++ b/modeling.emf.incquery/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/modeling.emfparsley/functions.php b/modeling.emfparsley/functions.php
index 432bb72..bb63478 100644
--- a/modeling.emfparsley/functions.php
+++ b/modeling.emfparsley/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/modeling.fmc/functions.php b/modeling.fmc/functions.php
index 432bb72..bb63478 100644
--- a/modeling.fmc/functions.php
+++ b/modeling.fmc/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/modeling.franca/functions.php b/modeling.franca/functions.php
index 432bb72..bb63478 100644
--- a/modeling.franca/functions.php
+++ b/modeling.franca/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/modeling.gendoc/functions.php b/modeling.gendoc/functions.php
index 432bb72..bb63478 100644
--- a/modeling.gendoc/functions.php
+++ b/modeling.gendoc/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/modeling.mdt.rmf/functions.php b/modeling.mdt.rmf/functions.php
index 432bb72..bb63478 100644
--- a/modeling.mdt.rmf/functions.php
+++ b/modeling.mdt.rmf/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/modeling.sirius/functions.php b/modeling.sirius/functions.php
index 432bb72..bb63478 100644
--- a/modeling.sirius/functions.php
+++ b/modeling.sirius/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/modeling.uml2profiles/functions.php b/modeling.uml2profiles/functions.php
index 432bb72..bb63478 100644
--- a/modeling.uml2profiles/functions.php
+++ b/modeling.uml2profiles/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/mpc/functions.php b/mpc/functions.php
index fc14025..bb63478 100644
--- a/mpc/functions.php
+++ b/mpc/functions.php
@@ -1,36 +1,23 @@
-<?
+<? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/mylyn-reviews/functions.php b/mylyn-reviews/functions.php
index 432bb72..bb63478 100644
--- a/mylyn-reviews/functions.php
+++ b/mylyn-reviews/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/mylyn.context.mft/functions.php b/mylyn.context.mft/functions.php
index 432bb72..bb63478 100644
--- a/mylyn.context.mft/functions.php
+++ b/mylyn.context.mft/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/mylyn.docs.intent/functions.php b/mylyn.docs.intent/functions.php
index 432bb72..bb63478 100644
--- a/mylyn.docs.intent/functions.php
+++ b/mylyn.docs.intent/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/mylyn.docs.vex/functions.php b/mylyn.docs.vex/functions.php
index 432bb72..bb63478 100644
--- a/mylyn.docs.vex/functions.php
+++ b/mylyn.docs.vex/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/polarsys.3p/functions.php b/polarsys.3p/functions.php
index 432bb72..bb63478 100755
--- a/polarsys.3p/functions.php
+++ b/polarsys.3p/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/polarsys.arcon/functions.php b/polarsys.arcon/functions.php
index 432bb72..bb63478 100755
--- a/polarsys.arcon/functions.php
+++ b/polarsys.arcon/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/polarsys.chess/functions.php b/polarsys.chess/functions.php
index 432bb72..bb63478 100755
--- a/polarsys.chess/functions.php
+++ b/polarsys.chess/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/polarsys.kitalpha/functions.php b/polarsys.kitalpha/functions.php
index 432bb72..bb63478 100644
--- a/polarsys.kitalpha/functions.php
+++ b/polarsys.kitalpha/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/polarsys.polychrony/functions.php b/polarsys.polychrony/functions.php
index 432bb72..bb63478 100644
--- a/polarsys.polychrony/functions.php
+++ b/polarsys.polychrony/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/polarsys.reqcycle/functions.php b/polarsys.reqcycle/functions.php
index 432bb72..bb63478 100644
--- a/polarsys.reqcycle/functions.php
+++ b/polarsys.reqcycle/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/potomac/functions.php b/potomac/functions.php
index 432bb72..bb63478 100644
--- a/potomac/functions.php
+++ b/potomac/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/remus/functions.php b/remus/functions.php
index 432bb72..bb63478 100644
--- a/remus/functions.php
+++ b/remus/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/rt-packaging/functions.php b/rt-packaging/functions.php
index 432bb72..bb63478 100644
--- a/rt-packaging/functions.php
+++ b/rt-packaging/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/rt.concierge/functions.php b/rt.concierge/functions.php
index 432bb72..bb63478 100644
--- a/rt.concierge/functions.php
+++ b/rt.concierge/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/rt.ebr/functions.php b/rt.ebr/functions.php
index 432bb72..bb63478 100644
--- a/rt.ebr/functions.php
+++ b/rt.ebr/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/rt.ecr/functions.php b/rt.ecr/functions.php
index 432bb72..bb63478 100644
--- a/rt.ecr/functions.php
+++ b/rt.ecr/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/rt.vertx/functions.php b/rt.vertx/functions.php
index 432bb72..bb63478 100644
--- a/rt.vertx/functions.php
+++ b/rt.vertx/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/sapphire/functions.php b/sapphire/functions.php
index 432bb72..bb63478 100644
--- a/sapphire/functions.php
+++ b/sapphire/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/scout/functions.php b/scout/functions.php
index 432bb72..bb63478 100755
--- a/scout/functions.php
+++ b/scout/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/secrt/functions.php b/secrt/functions.php
index 432bb72..bb63478 100644
--- a/secrt/functions.php
+++ b/secrt/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/sketch/functions.php b/sketch/functions.php
index 432bb72..bb63478 100644
--- a/sketch/functions.php
+++ b/sketch/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/soa-policy-tools/functions.php b/soa-policy-tools/functions.php
index 432bb72..bb63478 100644
--- a/soa-policy-tools/functions.php
+++ b/soa-policy-tools/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/soa.bpmn2-modeler/functions.php b/soa.bpmn2-modeler/functions.php
index 432bb72..bb63478 100644
--- a/soa.bpmn2-modeler/functions.php
+++ b/soa.bpmn2-modeler/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/soa.stardust/functions.php b/soa.stardust/functions.php
index 432bb72..bb63478 100755
--- a/soa.stardust/functions.php
+++ b/soa.stardust/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/soa.winery/functions.php b/soa.winery/functions.php
index 432bb72..bb63478 100644
--- a/soa.winery/functions.php
+++ b/soa.winery/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.aether/functions.php b/technology.aether/functions.php
index 432bb72..bb63478 100644
--- a/technology.aether/functions.php
+++ b/technology.aether/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.californium/functions.php b/technology.californium/functions.php
index 432bb72..bb63478 100755
--- a/technology.californium/functions.php
+++ b/technology.californium/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.cbi/functions.php b/technology.cbi/functions.php
index 432bb72..bb63478 100755
--- a/technology.cbi/functions.php
+++ b/technology.cbi/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.eclipsescada/functions.php b/technology.eclipsescada/functions.php
index 432bb72..bb63478 100644
--- a/technology.eclipsescada/functions.php
+++ b/technology.eclipsescada/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.efxclipse/functions.php b/technology.efxclipse/functions.php
index 432bb72..bb63478 100644
--- a/technology.efxclipse/functions.php
+++ b/technology.efxclipse/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.handly/functions.php b/technology.handly/functions.php
index 432bb72..bb63478 100644
--- a/technology.handly/functions.php
+++ b/technology.handly/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.hudson/functions.php b/technology.hudson/functions.php
index 432bb72..bb63478 100755
--- a/technology.hudson/functions.php
+++ b/technology.hudson/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.koneki/functions.php b/technology.koneki/functions.php
index 432bb72..bb63478 100644
--- a/technology.koneki/functions.php
+++ b/technology.koneki/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.krikkit/functions.php b/technology.krikkit/functions.php
index 432bb72..bb63478 100755
--- a/technology.krikkit/functions.php
+++ b/technology.krikkit/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.kura/functions.php b/technology.kura/functions.php
index 432bb72..bb63478 100644
--- a/technology.kura/functions.php
+++ b/technology.kura/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.liblwm2m/functions.php b/technology.liblwm2m/functions.php
index 432bb72..bb63478 100755
--- a/technology.liblwm2m/functions.php
+++ b/technology.liblwm2m/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.lyo/functions.php b/technology.lyo/functions.php
index 432bb72..bb63478 100644
--- a/technology.lyo/functions.php
+++ b/technology.lyo/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.m2e.m2e-wtp/functions.php b/technology.m2e.m2e-wtp/functions.php
index 432bb72..bb63478 100644
--- a/technology.m2e.m2e-wtp/functions.php
+++ b/technology.m2e.m2e-wtp/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.mbeddr/functions.php b/technology.mbeddr/functions.php
index 432bb72..bb63478 100644
--- a/technology.mbeddr/functions.php
+++ b/technology.mbeddr/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.mihini/functions.php b/technology.mihini/functions.php
index 432bb72..bb63478 100755
--- a/technology.mihini/functions.php
+++ b/technology.mihini/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.mosquitto/functions.php b/technology.mosquitto/functions.php
index 432bb72..bb63478 100644
--- a/technology.mosquitto/functions.php
+++ b/technology.mosquitto/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.nebula.nattable/functions.php b/technology.nebula.nattable/functions.php
index 432bb72..bb63478 100644
--- a/technology.nebula.nattable/functions.php
+++ b/technology.nebula.nattable/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.ogee/functions.php b/technology.ogee/functions.php
index 432bb72..bb63478 100755
--- a/technology.ogee/functions.php
+++ b/technology.ogee/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.om2m/functions.php b/technology.om2m/functions.php
index 432bb72..bb63478 100644
--- a/technology.om2m/functions.php
+++ b/technology.om2m/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.paho/functions.php b/technology.paho/functions.php
index 432bb72..bb63478 100755
--- a/technology.paho/functions.php
+++ b/technology.paho/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.ponte/functions.php b/technology.ponte/functions.php
index 432bb72..bb63478 100755
--- a/technology.ponte/functions.php
+++ b/technology.ponte/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.sisu/functions.php b/technology.sisu/functions.php
index 432bb72..bb63478 100644
--- a/technology.sisu/functions.php
+++ b/technology.sisu/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.skalli/functions.php b/technology.skalli/functions.php
index 432bb72..bb63478 100644
--- a/technology.skalli/functions.php
+++ b/technology.skalli/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.smarthome/functions.php b/technology.smarthome/functions.php
index 432bb72..bb63478 100755
--- a/technology.smarthome/functions.php
+++ b/technology.smarthome/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/technology.xwt/functions.php b/technology.xwt/functions.php
index 432bb72..bb63478 100755
--- a/technology.xwt/functions.php
+++ b/technology.xwt/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/tmw/functions.php b/tmw/functions.php
index 432bb72..bb63478 100755
--- a/tmw/functions.php
+++ b/tmw/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/tools.damos/functions.php b/tools.damos/functions.php
index 432bb72..bb63478 100644
--- a/tools.damos/functions.php
+++ b/tools.damos/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/tools.rat/functions.php b/tools.rat/functions.php
index 432bb72..bb63478 100755
--- a/tools.rat/functions.php
+++ b/tools.rat/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/tools.windowbuilder/functions.php b/tools.windowbuilder/functions.php
index 432bb72..bb63478 100755
--- a/tools.windowbuilder/functions.php
+++ b/tools.windowbuilder/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/tycho/functions.php b/tycho/functions.php
index 432bb72..bb63478 100644
--- a/tycho/functions.php
+++ b/tycho/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/uomo/functions.php b/uomo/functions.php
index 432bb72..bb63478 100755
--- a/uomo/functions.php
+++ b/uomo/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/vex/functions.php b/vex/functions.php
index 432bb72..bb63478 100755
--- a/vex/functions.php
+++ b/vex/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/virgo/functions.php b/virgo/functions.php
index 432bb72..bb63478 100644
--- a/virgo/functions.php
+++ b/virgo/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/webtools.jee-config/functions.php b/webtools.jee-config/functions.php
index 432bb72..bb63478 100755
--- a/webtools.jee-config/functions.php
+++ b/webtools.jee-config/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
diff --git a/webtools.vjet/functions.php b/webtools.vjet/functions.php
index 432bb72..bb63478 100755
--- a/webtools.vjet/functions.php
+++ b/webtools.vjet/functions.php
@@ -1,36 +1,23 @@
 <? 
 /*******************************************************************************
- * Copyright (c) 2007 Eclipse Foundation and others.
+ * Copyright (c) 2007,2014 Eclipse Foundation 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
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - initial API and implementation
+ *    Wayne Beaton (Eclipse Foundation) - Bug 423377
  *******************************************************************************/
 
 function get_title_from_html_document($file_name) {
 	$header = get_header_from_html_document($file_name);
-	
-	/*
-	 * Break the header up into multiple lines. Handle the
-	 * case where line breaks are lf, crlf, or cr.
-	 */
-	
-	$lines = preg_split("/\r?\n|\r/", $header); 
-	
-	/*
-	 * Merge the lines into a single line so that eregi
-	 * can find the title even if it is split over multiple
-	 * lines
-	 */
-	$one_line = implode(" ", $lines); 
-	
+
 	/*
 	 * If we can match a title tag, extract it.
 	 */
-	if (eregi("<title>(.*)</title>", $one_line, $title)) {
+	if (preg_match('/<title>(.*)<\/title>/i', $header, $title)) {
     	return $title[1];
 	}
 	
@@ -48,7 +35,7 @@
          * Only read up to the part that includes the
          * end tag for the header area.
          */
-        if (eregi("</head>", $part)) break;
+        if (preg_match('/<\/head>/i', $part)) break;
     }
     fclose($handle);
     return $content;
