diff --git a/_projectCommon.php b/_projectCommon.php
index 595e9d3..a7641e1 100644
--- a/_projectCommon.php
+++ b/_projectCommon.php
@@ -20,40 +20,40 @@
 include_once $_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/scripts.php";
 
 $Nav->setLinkList(null);
-$Nav->addCustomNav("About This Project", "/projects/project_summary.php?projectid=modeling", "_self", 1);
-$Nav->addNavSeparator("Modeling", "/modeling/");
-$Nav->addCustomNav("Amalgam", "/modeling/amalgam/", "_self", 3);
-$Nav->addCustomNav("EMF", "/modeling/emf/", "_self", 3);
-$Nav->addCustomNav("EMFT", "/modeling/emft/", "_self", 3);
-$Nav->addCustomNav("GMP", "/modeling/gmp/", "_self", 3);
-$Nav->addCustomNav("GMT", "/gmt/", "_self", 3);
-$Nav->addCustomNav("MDT", "/modeling/mdt/", "_self", 3);
-$Nav->addCustomNav("M2M", "/m2m/", "_self", 3);
-$Nav->addCustomNav("M2T", "/modeling/m2t/", "_self", 3);
-$Nav->addCustomNav("TMF", "/modeling/tmf/", "_self", 3);
 
-$Nav->addNavSeparator("Downloads", "http://www.eclipse.org/modeling/downloads/");
-$Nav->addCustomNav("All-In-One Package", "http://www.eclipse.org/downloads/packages/eclipse-modeling-tools-includes-incubating-components/galileosr1", "_self", 2);
-$Nav->addCustomNav("Installation", "http://wiki.eclipse.org/Modeling_Project/Installation", "_self", 2);
 
-$Nav->addNavSeparator("Documentation", "http://wiki.eclipse.org/Category:Modeling");
-$Nav->addCustomNav("Getting Started", "http://wiki.eclipse.org/Modeling_Documentation", "_self", 2);
-$Nav->addCustomNav("Plan", "http://www.eclipse.org/projects/project-plan.php?projectid=modeling", "_self", 2);
-$Nav->addCustomNav("Search CVS", "http://www.eclipse.org/$PR/searchcvs.php?q=days%3A+7", "_self", 2);
+$Nav->addNavSeparator("Technologies", "/modeling/");
+$Nav->addCustomNav("EMF (Core)", "/modeling/emf/");
+$Nav->addCustomNav("Server and Storage", "/modeling/server.php", "_self", 3);
+$Nav->addCustomNav("User Interface", "/modeling/ui.php", "_self", 3);
+$Nav->addCustomNav("Graphical Modeling", "/modeling/graphical.php", "_self", 3);
+$Nav->addCustomNav("Modeling Tools", "/modeling/tools.php", "_self", 3);
+$Nav->addCustomNav("Transformation", "/modeling/transformation.php", "_self", 3);
+$Nav->addCustomNav("Textual Modeling", "/modeling/textual.php", "_self", 3);
+$Nav->addCustomNav("More...", "/modeling/more.php", "_self", 3);
 
-$Nav->addNavSeparator("Community", "http://wiki.eclipse.org/Modeling_Corner");
-$Nav->addCustomNav("Wiki", "http://wiki.eclipse.org/Modeling_Project", "_self", 2);
+
+
+$Nav->addNavSeparator("Downloads");
+$Nav->addCustomNav("Eclipse Modeling Tools", "http://eclipse.org/downloads/packages/eclipse-modeling-tools/lunar", "_self", 2);
+
+
+
+
+$Nav->addNavSeparator("Community", "/modeling/");
+
 $Nav->addCustomNav("Newsgroups", "http://www.eclipse.org/newsgroups/index_project.php", "_self", 2);
 $Nav->addCustomNav("Mailing Lists", "http://www.eclipse.org/mail/index_project.php", "_self", 2);
-$Nav->addCustomNav("Modeling Corner", "http://wiki.eclipse.org/Modeling_Corner", "_self", 2);
 
-$bugurl = "https://bugs.eclipse.org";
-$collist = "%26query_format%3Dadvanced&amp;column_changeddate=on&amp;column_bug_severity=on&amp;column_priority=on&amp;column_rep_platform=on&amp;column_bug_status=on&amp;column_product=on&amp;column_component=on&amp;column_version=on&amp;column_target_milestone=on&amp;column_short_short_desc=on&amp;splitheader=0";
-$Nav->addCustomNav("Open Bugs", "$bugurl/bugs/colchange.cgi?rememberedquery=product%3DModeling%26bug_status%3DNEW%26bug_status%3DASSIGNED%26bug_status%3DREOPENED%26bug_status%3DRESOLVED%26resolution%3DFIXED%26resolution%3D---%26order%3Dbugs.bug_status%2Cbugs.target_milestone%2Cbugs.bug_id" . $collist, "_self", 2);
-$Nav->addCustomNav("Submit A Bug", "$bugurl/bugs/enter_bug.cgi?product=Modeling", "_self", 2);
-$Nav->addCustomNav("Contributors", "http://www.eclipse.org/$PR/project-info/team.php", "_self", 2);
+
+
+
+
 
 $App->AddExtraHtmlHeader("<link rel=\"stylesheet\" type=\"text/css\" href=\"/modeling/includes/common.css\"/>\n");
+
+
+
 addGoogleAnalyticsTrackingCodeToHeader();
 $App->Promotion = TRUE; # set true to enable current eclipse.org site-wide promo
 ?>
diff --git a/_projectCommonold - Kopie.php b/_projectCommonold - Kopie.php
new file mode 100644
index 0000000..a7641e1
--- /dev/null
+++ b/_projectCommonold - Kopie.php
@@ -0,0 +1,59 @@
+<?php
+
+$PR = "modeling";
+
+$isBuildServer = (preg_match("/^(emft|modeling|build)\.eclipse\.org$|^localhost$/", $_SERVER["SERVER_NAME"]));
+$isBuildDotEclipseServer = $_SERVER["SERVER_NAME"] == "build.eclipse.org";
+$isWWWserver = (preg_match("/^(?:www.|)eclipse.org$/", $_SERVER["SERVER_NAME"]));
+$isEclipseCluster = (preg_match("/^(?:www.||download.|download1.|build.)eclipse.org$/", $_SERVER["SERVER_NAME"]));
+$writableBuildRoot = $isBuildDotEclipseServer ? "/opt/public/modeling" : "/home/www-data";
+
+if (isset ($_GET["skin"]) && preg_match("/^(Blue|EclipseStandard|Industrial|Lazarus|Miasma|Modern|OldStyle|Phoenix|PhoenixTest|PlainText|Nova)$/", $_GET["skin"], $regs))
+{
+	$theme = $regs[1];
+}
+else
+{
+	$theme = "solstice";
+}
+
+include_once $_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/scripts.php";
+
+$Nav->setLinkList(null);
+
+
+$Nav->addNavSeparator("Technologies", "/modeling/");
+$Nav->addCustomNav("EMF (Core)", "/modeling/emf/");
+$Nav->addCustomNav("Server and Storage", "/modeling/server.php", "_self", 3);
+$Nav->addCustomNav("User Interface", "/modeling/ui.php", "_self", 3);
+$Nav->addCustomNav("Graphical Modeling", "/modeling/graphical.php", "_self", 3);
+$Nav->addCustomNav("Modeling Tools", "/modeling/tools.php", "_self", 3);
+$Nav->addCustomNav("Transformation", "/modeling/transformation.php", "_self", 3);
+$Nav->addCustomNav("Textual Modeling", "/modeling/textual.php", "_self", 3);
+$Nav->addCustomNav("More...", "/modeling/more.php", "_self", 3);
+
+
+
+$Nav->addNavSeparator("Downloads");
+$Nav->addCustomNav("Eclipse Modeling Tools", "http://eclipse.org/downloads/packages/eclipse-modeling-tools/lunar", "_self", 2);
+
+
+
+
+$Nav->addNavSeparator("Community", "/modeling/");
+
+$Nav->addCustomNav("Newsgroups", "http://www.eclipse.org/newsgroups/index_project.php", "_self", 2);
+$Nav->addCustomNav("Mailing Lists", "http://www.eclipse.org/mail/index_project.php", "_self", 2);
+
+
+
+
+
+
+$App->AddExtraHtmlHeader("<link rel=\"stylesheet\" type=\"text/css\" href=\"/modeling/includes/common.css\"/>\n");
+
+
+
+addGoogleAnalyticsTrackingCodeToHeader();
+$App->Promotion = TRUE; # set true to enable current eclipse.org site-wide promo
+?>
diff --git a/ejs_production.js b/ejs_production.js
new file mode 100644
index 0000000..a7c3d92
--- /dev/null
+++ b/ejs_production.js
@@ -0,0 +1 @@
+String.prototype.rsplit=function(F){var E=this;var A=F.exec(E);var G=new Array();while(A!=null){var D=A.index;var C=F.lastIndex;if((D)!=0){var B=E.substring(0,D);G.push(E.substring(0,D));E=E.slice(D)}G.push(A[0]);E=E.slice(A[0].length);A=F.exec(E)}if(!E==""){G.push(E)}return G};String.prototype.chop=function(){return this.substr(0,this.length-1)};var EjsScanner=function(B,C,A){this.left_delimiter=C+"%";this.right_delimiter="%"+A;this.double_left=C+"%%";this.double_right="%%"+A;this.left_equal=C+"%=";this.left_comment=C+"%#";if(C=="["){this.SplitRegexp=/(\[%%)|(%%\])|(\[%=)|(\[%#)|(\[%)|(%\]\n)|(%\])|(\n)/}else{this.SplitRegexp=new RegExp("("+this.double_left+")|(%%"+this.double_right+")|("+this.left_equal+")|("+this.left_comment+")|("+this.left_delimiter+")|("+this.right_delimiter+"\n)|("+this.right_delimiter+")|(\n)")}this.source=B;this.stag=null;this.lines=0};EjsView=function(A){this.data=A};EjsView.prototype.partial=function(A,B){if(!B){B=this.data}return new EJS(A).render(B)};EjsScanner.to_text=function(A){if(A==null||A===undefined){return""}if(A instanceof Date){return A.toDateString()}if(A.toString){return A.toString()}return""};EjsScanner.prototype={scan:function(D){scanline=this.scanline;regex=this.SplitRegexp;if(!this.source==""){var C=this.source.rsplit(/\n/);for(var A=0;A<C.length;A++){var B=C[A];this.scanline(B,regex,D)}}},scanline:function(A,D,G){this.lines++;var E=A.rsplit(D);for(var C=0;C<E.length;C++){var B=E[C];if(B!=null){try{G(B,this)}catch(F){throw {type:"EjsScanner",line:this.lines}}}}}};var EjsBuffer=function(B,C){this.line=new Array();this.script="";this.pre_cmd=B;this.post_cmd=C;for(var A=0;A<this.pre_cmd.length;A++){this.push(B[A])}};EjsBuffer.prototype={push:function(A){this.line.push(A)},cr:function(){this.script=this.script+this.line.join("; ");this.line=new Array();this.script=this.script+"\n"},close:function(){if(this.line.length>0){for(var A=0;A<this.post_cmd.length;A++){this.push(pre_cmd[A])}this.script=this.script+this.line.join("; ");line=null}}};EjsCompiler=function(B,C){this.pre_cmd=['___ejsO = "";'];this.post_cmd=new Array();this.source=" ";if(B!=null){if(typeof B=="string"){B=B.replace(/\r\n/g,"\n");B=B.replace(/\r/g,"\n");this.source=B}else{if(B.innerHTML){this.source=B.innerHTML}}if(typeof this.source!="string"){this.source=""}}C=C||"<";var A=">";switch(C){case"[":A="]";break;case"<":break;default:throw C+" is not a supported deliminator";break}this.scanner=new EjsScanner(this.source,C,A);this.out=""};EjsCompiler.prototype={compile:function(options){options=options||{};this.out="";var put_cmd="___ejsO += ";var insert_cmd=put_cmd;var buff=new EjsBuffer(this.pre_cmd,this.post_cmd);var content="";var clean=function(content){content=content.replace(/\\/g,"\\\\");content=content.replace(/\n/g,"\\n");content=content.replace(/"/g,'\\"');return content};this.scanner.scan(function(token,scanner){if(scanner.stag==null){switch(token){case"\n":content=content+"\n";buff.push(put_cmd+'"'+clean(content)+'";');buff.cr();content="";break;case scanner.left_delimiter:case scanner.left_equal:case scanner.left_comment:scanner.stag=token;if(content.length>0){buff.push(put_cmd+'"'+clean(content)+'"')}content="";break;case scanner.double_left:content=content+scanner.left_delimiter;break;default:content=content+token;break}}else{switch(token){case scanner.right_delimiter:switch(scanner.stag){case scanner.left_delimiter:if(content[content.length-1]=="\n"){content=content.chop();buff.push(content);buff.cr()}else{buff.push(content)}break;case scanner.left_equal:buff.push(insert_cmd+"(EjsScanner.to_text("+content+"))");break}scanner.stag=null;content="";break;case scanner.double_right:content=content+scanner.right_delimiter;break;default:content=content+token;break}}});if(content.length>0){buff.push(put_cmd+'"'+clean(content)+'"')}buff.close();this.out=buff.script+";";var to_be_evaled="this.process = function(_CONTEXT,_VIEW) { try { with(_VIEW) { with (_CONTEXT) {"+this.out+" return ___ejsO;}}}catch(e){e.lineNumber=null;throw e;}};";try{eval(to_be_evaled)}catch(e){if(typeof JSLINT!="undefined"){JSLINT(this.out);for(var i=0;i<JSLINT.errors.length;i++){var error=JSLINT.errors[i];if(error.reason!="Unnecessary semicolon."){error.line++;var e=new Error();e.lineNumber=error.line;e.message=error.reason;if(options.url){e.fileName=options.url}throw e}}}else{throw e}}}};EJS=function(B){this.set_options(B);if(B.url){var C=EJS.get(B.url,this.cache);if(C){return C}if(C==EJS.INVALID_PATH){return null}this.text=EJS.request(B.url);if(this.text==null){throw"There is no template at "+B.url}this.name=B.url}else{if(B.element){if(typeof B.element=="string"){var A=B.element;B.element=document.getElementById(B.element);if(B.element==null){throw A+"does not exist!"}}if(B.element.value){this.text=B.element.value}else{this.text=B.element.innerHTML}this.name=B.element.id;this.type="["}}var C=new EjsCompiler(this.text,this.type);C.compile(B);EJS.update(this.name,this);this.template=C};EJS.config=function(B){EJS.cache=B.cache!=null?B.cache:EJS.cache;EJS.type=B.type!=null?B.type:EJS.type;var A={};EJS.get=function(D,C){if(C==false){return null}if(A[D]){return A[D]}return null};EJS.update=function(D,C){if(D==null){return }A[D]=C};EJS.INVALID_PATH=-1};EJS.config({cache:true,type:"<"});EJS.prototype={render:function(B){var A=new EjsView(B);return this.template.process.call(A,B,A)},out:function(){return this.template.out},set_options:function(A){this.type=A.type!=null?A.type:EJS.type;this.cache=A.cache!=null?A.cache:EJS.cache;this.text=A.text!=null?A.text:null;this.name=A.name!=null?A.name:null},update:function(element,options){if(typeof element=="string"){element=document.getElementById(element)}if(options==null){_template=this;return function(object){EJS.prototype.update.call(_template,element,object)}}if(typeof options=="string"){params={};params.url=options;_template=this;params.onComplete=function(request){var object=eval(request.responseText);EJS.prototype.update.call(_template,element,object)};EJS.ajax_request(params)}else{element.innerHTML=this.render(options)}}};EJS.newRequest=function(){var C=[function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new XMLHttpRequest()},function(){return new ActiveXObject("Microsoft.XMLHTTP")}];for(var A=0;A<C.length;A++){try{var B=C[A]();if(B!=null){return B}}catch(D){continue}}};EJS.request=function(C){var A=new EJS.newRequest();A.open("GET",C,false);try{A.send(null)}catch(B){return null}if(A.status==404||A.status==2||(A.status==0&&A.responseText=="")){return null}return A.responseText};EJS.ajax_request=function(B){B.method=(B.method?B.method:"GET");var A=new EJS.newRequest();A.onreadystatechange=function(){if(A.readyState==4){if(A.status==200){B.onComplete(A)}else{B.onComplete(A)}}};A.open(B.method,B.url);A.send(null)};EjsView.prototype.date_tag=function(C,O,A){if(!(O instanceof Date)){O=new Date()}var B=["January","February","March","April","May","June","July","August","September","October","November","December"];var G=[],D=[],P=[];var J=O.getFullYear();var H=O.getMonth();var N=O.getDate();for(var M=J-15;M<J+15;M++){G.push({value:M,text:M})}for(var E=0;E<12;E++){D.push({value:(E),text:B[E]})}for(var I=0;I<31;I++){P.push({value:(I+1),text:(I+1)})}var L=this.select_tag(C+"[year]",J,G,{id:C+"[year]"});var F=this.select_tag(C+"[month]",H,D,{id:C+"[month]"});var K=this.select_tag(C+"[day]",N,P,{id:C+"[day]"});return L+F+K};EjsView.prototype.form_tag=function(B,A){A=A||{};A.action=B;if(A.multipart==true){A.method="post";A.enctype="multipart/form-data"}return this.start_tag_for("form",A)};EjsView.prototype.form_tag_end=function(){return this.tag_end("form")};EjsView.prototype.hidden_field_tag=function(A,C,B){return this.input_field_tag(A,C,"hidden",B)};EjsView.prototype.input_field_tag=function(A,D,C,B){B=B||{};B.id=B.id||A;B.value=D||"";B.type=C||"text";B.name=A;return this.single_tag_for("input",B)};EjsView.prototype.is_current_page=function(A){return(window.location.href==A||window.location.pathname==A?true:false)};EjsView.prototype.link_to=function(B,A,C){if(!B){var B="null"}if(!C){var C={}}if(C.confirm){C.onclick=' var ret_confirm = confirm("'+C.confirm+'"); if(!ret_confirm){ return false;} ';C.confirm=null}C.href=A;return this.start_tag_for("a",C)+B+this.tag_end("a")};EjsView.prototype.submit_link_to=function(B,A,C){if(!B){var B="null"}if(!C){var C={}}C.onclick=C.onclick||"";if(C.confirm){C.onclick=' var ret_confirm = confirm("'+C.confirm+'"); if(!ret_confirm){ return false;} ';C.confirm=null}C.value=B;C.type="submit";C.onclick=C.onclick+(A?this.url_for(A):"")+"return false;";return this.start_tag_for("input",C)};EjsView.prototype.link_to_if=function(F,B,A,D,C,E){return this.link_to_unless((F==false),B,A,D,C,E)};EjsView.prototype.link_to_unless=function(E,B,A,C,D){C=C||{};if(E){if(D&&typeof D=="function"){return D(B,A,C,D)}else{return B}}else{return this.link_to(B,A,C)}};EjsView.prototype.link_to_unless_current=function(B,A,C,D){C=C||{};return this.link_to_unless(this.is_current_page(A),B,A,C,D)};EjsView.prototype.password_field_tag=function(A,C,B){return this.input_field_tag(A,C,"password",B)};EjsView.prototype.select_tag=function(D,G,H,F){F=F||{};F.id=F.id||D;F.value=G;F.name=D;var B="";B+=this.start_tag_for("select",F);for(var E=0;E<H.length;E++){var C=H[E];var A={value:C.value};if(C.value==G){A.selected="selected"}B+=this.start_tag_for("option",A)+C.text+this.tag_end("option")}B+=this.tag_end("select");return B};EjsView.prototype.single_tag_for=function(A,B){return this.tag(A,B,"/>")};EjsView.prototype.start_tag_for=function(A,B){return this.tag(A,B)};EjsView.prototype.submit_tag=function(A,B){B=B||{};B.type=B.type||"submit";B.value=A||"Submit";return this.single_tag_for("input",B)};EjsView.prototype.tag=function(C,E,D){if(!D){var D=">"}var B=" ";for(var A in E){if(E[A]!=null){var F=E[A].toString()}else{var F=""}if(A=="Class"){A="class"}if(F.indexOf("'")!=-1){B+=A+'="'+F+'" '}else{B+=A+"='"+F+"' "}}return"<"+C+B+D};EjsView.prototype.tag_end=function(A){return"</"+A+">"};EjsView.prototype.text_area_tag=function(A,C,B){B=B||{};B.id=B.id||A;B.name=B.name||A;C=C||"";if(B.size){B.cols=B.size.split("x")[0];B.rows=B.size.split("x")[1];delete B.size}B.cols=B.cols||50;B.rows=B.rows||4;return this.start_tag_for("textarea",B)+C+this.tag_end("textarea")};EjsView.prototype.text_tag=EjsView.prototype.text_area_tag;EjsView.prototype.text_field_tag=function(A,C,B){return this.input_field_tag(A,C,"text",B)};EjsView.prototype.url_for=function(A){return'window.location="'+A+'";'};EjsView.prototype.img_tag=function(B,C,A){A=A||{};A.src=B;A.alt=C;return this.single_tag_for("img",A)}
\ No newline at end of file
diff --git a/emf/_projectCommon.php b/emf/_projectCommon.php
index 67ac200..51b3360 100644
--- a/emf/_projectCommon.php
+++ b/emf/_projectCommon.php
@@ -27,6 +27,9 @@
 	$theme = "solstice";
 }
 
+
+
+
 /* projects/components in cvs */
 /* "proj" => "cvsname" */
 $cvsprojs = array (); /* should always be empty */
@@ -54,15 +57,10 @@
 $projects = array(
 	"EMF (Core)" => "emf",
 
-	"CDO" => "cdo",
-	"Compare" => "compare",
+	
 	"Model Query" => "query",
 	"Model Query 2" => "query2",
 	"Model Transaction" => "transaction",
-	"Net4j" => "net4j",
-	"QTV All-In-One" => "emfqtv",
-	"SDO" => "sdo",
-	"Teneo" => "teneo",
 	"Validation Framework" => "validation",
 );
 
@@ -95,44 +93,29 @@
 	"N" => "Nightly"
 );
 
-$Nav->addCustomNav("About This Project", "/projects/project_summary.php?projectid=" . str_replace("/", ".", $PR), "", 1);
-$Nav->addNavSeparator($projectName, "$rooturl/");
 
-foreach (array_keys(array_diff($projects, $extraprojects)) as $z)
-{
-	$Nav->addCustomNav($z, "$rooturl/?project=$projects[$z]", "_self", 2);
-}
 
-$Nav->addNavSeparator("Downloads", "$downurl/$PR/downloads/?project=$proj");
-$Nav->addCustomNav("Installation", "http://wiki.eclipse.org/EMF/Installation", "_self", 2);
-$Nav->addCustomNav("Update Manager", "$rooturl/updates/", "_self", 2);
 
+
+
+
+
+
+
+
+
+$Nav->addNavSeparator("Home", "/modeling/emf");
+$Nav->addNavSeparator("Getting started", "/modeling/emf/gettingstarted.php");
 $Nav->addNavSeparator("Documentation", "$rooturl/docs/");
-$Nav->addCustomNav("Getting Started", "http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.emf.doc/references/overview/EMF.html", "_self", 2);
-$Nav->addCustomNav("FAQ", "http://wiki.eclipse.org/index.php/EMF/FAQ", "_self", 2);
-$Nav->addCustomNav("Plan", "http://www.eclipse.org/projects/project-plan.php?projectid=modeling.emf", "_self", 2);
-if (!$proj || $proj == "emf" || $proj == "sdo")
-{
-	$Nav->addCustomNav("Release Notes", "http://www.eclipse.org/$PR/news/relnotes.php?project=" . ($proj?$proj:"emf") . "&amp;version=HEAD", "_self", 2);
-	$Nav->addCustomNav("Search CVS", "http://www.eclipse.org/$PR/searchcvs.php?q=project%3A+org.eclipse.emf".($proj=="sdo"?".ecore.sdo":"")."+days%3A+7", "_self", 2);
-}
-else
-{
-	$Nav->addCustomNav("Release Notes", "http://www.eclipse.org/$PR/news/relnotes.php?project=$proj&amp;version=HEAD", "_self", 2);
-	$Nav->addCustomNav("Search CVS", "http://www.eclipse.org/$PR/searchcvs.php?q=file%3A+org.eclipse." . strtolower($projectName) . "%2F" . ($proj?"org.eclipse.emf.".$proj."%2F":"") . "+days%3A+7", "_self", 2);
-}
-$Nav->addNavSeparator("Community", "http://wiki.eclipse.org/Modeling_Corner");
-$Nav->addCustomNav("Wiki", "http://wiki.eclipse.org/" . $projectName, "_self", 2);
-$Nav->addCustomNav("Newsgroups", "$rooturl/newsgroup-mailing-list.php", "_self", 2);
-$Nav->addCustomNav("Modeling Corner", "http://wiki.eclipse.org/Modeling_Corner", "_self", 2);
 
-$bugcoms = array(); foreach ($projects as $l => $p){ $bugcoms[$p] = $p; }
-$bugcoms["emf"] = implode("%26component=", array("Core", "Doc", "Edit", "Mapping", "Tools", "XML/XMI")); /* for emf, show all the emf (sub)components */
-$collist = "&columnlist=changeddate%2Cbug_severity%2Cpriority%2Crep_platform%2Cbug_status%2Cproduct%2Ccomponent%2Cversion%2Ctarget_milestone%2short_desc";
-$Nav->addCustomNav("Open Bugs", "$bugurl/bugs/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&product=" . $projectName . (isset ($bugcoms[$proj]) ? "&component=$bugcoms[$proj]" : "") . "&query_format=advanced&order=bug_status%2Ctarget_milestone%2Cbug_id$collist", "_self", 2);
+$Nav->addNavSeparator("Downloads", "/modeling/emf/downloads/");
+
+$Nav->addNavSeparator("Community", "http://wiki.eclipse.org/Modeling_Corner");
+
+$Nav->addCustomNav("Newsgroups", "$rooturl/newsgroup-mailing-list.php", "_self", 2);
 $Nav->addCustomNav("Submit A Bug", "$bugurl/bugs/enter_bug.cgi?product=" . $projectName . (isset ($bugcoms[$proj]) ? "&amp;component=$bugcoms[$proj]" : ""), "_self", 2);
-$Nav->addCustomNav("Contributors", "http://www.eclipse.org/$PR/project-info/team.php", "_self", 2);
-unset ($bugcoms);
+
+$Nav->addCustomNav("About This Project", "/projects/project_summary.php?projectid=emf");
 
 $App->AddExtraHtmlHeader("<link rel=\"stylesheet\" type=\"text/css\" href=\"/modeling/includes/common.css\"/>\n");
 addGoogleAnalyticsTrackingCodeToHeader();
diff --git a/emf/_projectCommonold.php b/emf/_projectCommonold.php
new file mode 100644
index 0000000..7941031
--- /dev/null
+++ b/emf/_projectCommonold.php
@@ -0,0 +1,106 @@
+<?php
+$Nav->setLinkList(null);
+
+$PR = "modeling/emf";
+$projectName = "EMF";
+$defaultProj = "/emf";
+
+$isEMFserver = (preg_match("/^emf(?:\.torolab\.ibm\.com)$/", $_SERVER["SERVER_NAME"])) || (preg_match("/^(emft|modeling)\.eclipse\.org$/", $_SERVER["SERVER_NAME"]));
+$isBuildServer = (preg_match("/^(emft|modeling|build)\.eclipse\.org$/", $_SERVER["SERVER_NAME"])) || $isEMFserver;
+$isBuildDotEclipseServer = $_SERVER["SERVER_NAME"] == "build.eclipse.org";
+$isWWWserver = (preg_match("/^(?:www.|)eclipse.org$/", $_SERVER["SERVER_NAME"]));
+$isEclipseCluster = (preg_match("/^(?:www.||download.|download1.|build.)eclipse.org$/", $_SERVER["SERVER_NAME"]));
+$debug = (isset ($_GET["debug"]) && preg_match("/^\d+$/", $_GET["debug"]) ? $_GET["debug"] : -1);
+$writableRoot = ($isBuildServer ? $_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/" : "/home/data/httpd/writable/www.eclipse.org/");
+$writableBuildRoot = $isBuildDotEclipseServer ? "/opt/public/modeling" : "/home/www-data";
+
+$rooturl = "http://" . $_SERVER["HTTP_HOST"] . "/$PR";
+$downurl = ($isBuildServer ? "" : "http://www.eclipse.org");
+$bugurl = "https://bugs.eclipse.org";
+
+if (isset ($_GET["skin"]) && preg_match("/^(Blue|EclipseStandard|Industrial|Lazarus|Miasma|Modern|OldStyle|Phoenix|PhoenixTest|PlainText|Nova)$/", $_GET["skin"], $regs))
+{
+	$theme = $regs[1];
+}
+else
+{
+	$theme = "solstice";
+}
+
+/* projects/components in cvs */
+/* "proj" => "cvsname" */
+$cvsprojs = array (); /* should always be empty */
+
+/* sub-projects/components in cvs for projects/components above (if any) */
+/* "cvsname" => array("shortname" => "cvsname") */
+$cvscoms = array(
+	"org.eclipse.emf" => array (
+		"emf" => "org.eclipse.emf",
+
+		"cdo" => "org.eclipse.emf.cdo",
+		"compare" => "org.eclipse.emf.compare",
+		"query" => "org.eclipse.emf.query",
+		"query2" => "org.eclipse.emf.query",
+		"transaction" => "org.eclipse.emf.transaction",
+		"emfqtv" => "org.eclipse.emf.emfqtv",
+		"net4j" => "org.eclipse.emf.net4j",
+		"sdo" => "org.eclipse.emf.ecore.sdo",
+		"teneo" => "org.eclipse.emf.teneo",
+		"validation" => "org.eclipse.emf.validation",
+
+	)
+);
+
+
+
+
+$extraprojects = array("QTV All-In-One" => "emfqtv"); //components with only downloads, no info yet, "prettyname" => "directory"
+$nodownloads =   array("emfqtv"); //components with only information, no downloads, or no builds available yet, "projectkey"
+$nonewsgroup =   array("query","query2","transaction","validation","emfqtv", "net4j","teneo","cdo","compare", "sdo"); //components without newsgroup
+$nomailinglist = array("query","query2","transaction","validation","emfqtv", "net4j","teneo","cdo", "compare", "sdo"); //components without mailinglist
+$incubating =    array("query2"); // components which are incubating - EMF will never have incubating components -- see EMFT
+$nomenclature = "Component"; //are we dealing with "components" or "projects"?
+
+include_once $_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/scripts.php";
+
+$regs = null;
+$proj = (isset($_GET["project"]) && preg_match("/^(" . join("|", $projects) . ")$/", $_GET["project"], $regs) ? $regs[1] : getProjectFromPath($PR));
+$projct= preg_replace("#^/#", "", $proj);
+
+$buildtypes = array(
+	"R" => "Release",
+	"S" => "Stable",
+	"I" => "Integration",
+	"M" => "Maintenance",
+	"N" => "Nightly"
+);
+
+$Nav->addCustomNav("About This Project", "/projects/project_summary.php?projectid=" . str_replace("/", ".", $PR), "", 1);
+$Nav->addNavSeparator($projectName, "$rooturl/");
+
+
+
+$Nav->addNavSeparator("Downloads", "$downurl/$PR/downloads/?project=$proj");
+$Nav->addCustomNav("Installation", "http://wiki.eclipse.org/EMF/Installation", "_self", 2);
+$Nav->addCustomNav("Update Manager", "$rooturl/updates/", "_self", 2);
+
+$Nav->addNavSeparator("Documentation", "$rooturl/docs/");
+$Nav->addCustomNav("Getting Started", "http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.emf.doc/references/overview/EMF.html", "_self", 2);
+$Nav->addCustomNav("FAQ", "http://wiki.eclipse.org/index.php/EMF/FAQ", "_self", 2);
+$Nav->addCustomNav("Plan", "http://www.eclipse.org/projects/project-plan.php?projectid=modeling.emf", "_self", 2);
+
+$Nav->addNavSeparator("Community", "http://wiki.eclipse.org/Modeling_Corner");
+$Nav->addCustomNav("Wiki", "http://wiki.eclipse.org/" . $projectName, "_self", 2);
+$Nav->addCustomNav("Newsgroups", "$rooturl/newsgroup-mailing-list.php", "_self", 2);
+
+
+
+$Nav->addCustomNav("Open Bugs", "$bugurl/bugs/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&product=" . $projectName . (isset ($bugcoms[$proj]) ? "&component=$bugcoms[$proj]" : "") . "&query_format=advanced&order=bug_status%2Ctarget_milestone%2Cbug_id$collist", "_self", 2);
+$Nav->addCustomNav("Submit A Bug", "$bugurl/bugs/enter_bug.cgi?product=" . $projectName . (isset ($bugcoms[$proj]) ? "&amp;component=$bugcoms[$proj]" : ""), "_self", 2);
+$Nav->addCustomNav("Contributors", "http://www.eclipse.org/$PR/project-info/team.php", "_self", 2);
+unset ($bugcoms);
+
+$App->AddExtraHtmlHeader("<link rel=\"stylesheet\" type=\"text/css\" href=\"/modeling/includes/common.css\"/>\n");
+addGoogleAnalyticsTrackingCodeToHeader();
+$App->Promotion = TRUE; # set true to enable current eclipse.org site-wide promo
+?>
diff --git a/emf/docs/index.php b/emf/docs/index.php
index de92cfd..b8e9210 100755
--- a/emf/docs/index.php
+++ b/emf/docs/index.php
@@ -10,7 +10,8 @@
 
 <h1>EMF Documentation</h1>
 
-<p>New to EMF? Start with an <a href="#overviews">overview</a> or a <a href="#tutorials">tutorial</a>. See also links and categories at right.
+<p>New to EMF? Start with <b><a href="http://eclipsesource.com/blogs/tutorials/emf-tutorial/">this tutorial</a></b> and learn <b><a href="http://eclipsesource.com/blogs/tutorials/emf-tutorial/">"What every Eclipse developer should know about EMF"</a></b>. Have a look at <a href="#overviews">overview</a> or a <a href="#tutorials">tutorial</a>.
+ Also browser the help system of your Eclipse IDE (Help => Help Contents => EMF Developer Guide) and the <b><a href="newsgroup-mailing-list.php">EMF Newsgroup</a></b> Please report broken links and suggest new content.
 </p>
 
 <div class="homeitem3col">
@@ -18,27 +19,22 @@
 	<h3>EMF Overview Papers</h3>
 
 	<ul>
+	<li><div>September 9 2014</div><a href="http://eclipsesource.com/blogs/tutorials/emf-tutorial/">What every Eclipse developer should know about EMF</a><br/>
+			Contributed by Maximilian Koegel and Jonas Helming
+		</li>
 		<li>
 			<div>July 27 2009</div>EMF Book: <a target="_out" href="http://www.informit.com/title/9780321331885">Eclipse Modeling Framework</a>, Second Edition<br/>
 			<a target="_out" href="http://wiki.eclipse.org/EMF_Book_Errata">Errata</a>
 		</li>
 
-		<li>
-			<div>July 03 2008</div><a href="http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.emf.doc/references/overview/EMF.html">The Eclipse Modeling Framework Overview</a>
-		</li>
+		
 
 		<li>
 			<div>August 12 2004</div>EMF Book: <a target="_out" href="http://www.awprofessional.com/titles/0131425420">Eclipse Modeling Framework</a>, First Edition<br/>
 			<a target="_out" href="http://www.awprofessional.com/content/images/0131425420/samplechapter/budinskych02.pdf">Chapter 2 Sample</a> (PDF)
 		</li>
 
-		<li>
-			<div>June 1 2004</div><a href="http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.emf.doc/references/overview/EMF.Edit.html">The EMF Edit Framework Overview</a>
-		</li>
-
-		<li>
-			<div>June 23 2005</div><a href="http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.emf.doc/references/overview/EMF.Validation.html">The EMF Validation Framework Overview</a>
-		</li>
+		
 
 		<li>
 			<div>June 28 2004</div><a href="http://www.eclipse.org/modeling/emf/docs/overviews/FeatureMap.pdf">EMF Feature Maps</a> (PDF)
@@ -60,31 +56,14 @@
 	<h3>EMF Tutorials</h3>
 
 	<ul>
+	<li><div>September 9 2014</div><a href="http://eclipsesource.com/blogs/tutorials/emf-tutorial/">What every Eclipse developer should know about EMF</a><br/>
+			Contributed by Maximilian Koegel and Jonas Helming
+		</li>
 		<li><div>March 3 2010</div><a href="http://www.vogella.de/articles/EclipseEMF/article.html">A Tour of the Eclipse Modeling Framework</a><br/>
 			Contributed by Lars Vogel
 		</li>
 		
-		<li>
-			<div>May 31 2006</div><a href="http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.emf.doc/tutorials/clibmod/clibmod.html">Tutorial: Generating an EMF Model</a>
-		</li>
-
-		<li>
-			<div>May 31 2006</div><a href="http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.emf.doc/tutorials/slibmod/slibmod.html">Tutorial: Generating an Extended EMF Model</a>
-		</li>
-
-		<li>
-			<div>May 31 2006</div><a href="http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.emf.doc/tutorials/xlibmod/xlibmod.html">Tutorial: Generating an EMF Model using XML Schema</a>
-		</li>
-
-		<li>
-			<div>Jan 3 2007</div><a target="_out" href="http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.emf.doc/tutorials/jet1/jet_tutorial1.html">JET Tutorial Part 1 (Introduction to JET)</a><br/>
-			Contributed by Remko Popma
-		</li>
-
-		<li>
-			<div>Jan 3 2007</div><a target="_out" href="http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.emf.doc/tutorials/jet2/jet_tutorial2.html">JET Tutorial Part 2 (Write Code that Writes Code)</a><br/>
-			Contributed by Remko Popma
-		</li>
+		
 
 		<li>
 			<div>August 8 2006</div><a target="_out" href="http://www-128.ibm.com/developerworks/java/library/os-ecl-jet/index.html?ca=drs">Create more -- better -- code in Eclipse with JET</a><br/>
@@ -95,19 +74,7 @@
 			<div>Oct 12 2004</div><a target="_out" href="http://www.eclipse.org/articles/Article-EMF-goes-RCP/rcp.html">Tutorial: Generating a Rich Client Platform (RCP) Application Using EMF</a>
 		</li>
 
-		<li>
-			<div>June 2 2004</div><a href="http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.emf.doc/tutorials/rosepkg/rosepkg.html">Specifying Package Information in Rose</a>
-		</li>
-
-		<li>
-			<div>Dec 5 2006</div>Getting EMF Source Files from CVS: <a href="http://wiki.eclipse.org/EMF/Getting_Source">Using Eclipse</a> and <a href="http://wiki.eclipse.org/index.php/CVS_Source_From_Mapfile">For A Given Build's Mapfile</a> (commandline)
-
-
-		</li>
-
-		<li>
-			<div>June 13 2005</div><a href="http://www.eclipse.org/modeling/emf/docs/misc/UsingUpdateManager/UsingUpdateManager.html">Using Eclipse Update Manager to Update EMF, SDO &amp; XSD</a>
-		</li>
+		
 	</ul>
 </div>
 
@@ -149,16 +116,7 @@
 			<div><i><a href="http://wiki.eclipse.org/index.php?title=EMF-FAQ&action=history">history</a></i></div><a href="http://wiki.eclipse.org/index.php/EMF-FAQ">Frequently Asked Questions (FAQ)</a>
 		</li>
 
-		<li>
-			<div>Sept 23  2004</div>Eclipse.org Newsgroups - Offline Searching with
-				<a href="http://www.eclipse.org/modeling/emf/docs/misc/SearchingNewsgroups/SearchingNewsgroupsMozilla.html">Mozilla</a> or
-				<a href="http://www.eclipse.org/modeling/emf/docs/misc/SearchingNewsgroups/SearchingNewsgroupsOutlook.html">Outlook Express</a>
-		</li>
-
-		<li>
-			<div>Feb 27  2006</div>Eclipse.org Newsgroups - <a href="http://www.eclipse.org/modeling/emf/newsgroup-mailing-list.php">Online Searching</a> with
-				<a href="http://wiki.eclipse.org/index.php/Searching_Eclipse_Newsgroups_With_Firefox">Firefox</a>
-		</li>
+		
 	</ul>
 </div>
 
@@ -211,6 +169,20 @@
 	<h3>Presentations &amp; Workshops</h3>
 
 	<ul>
+	
+		<li>
+			<div>Mar 2014</div>What every Eclipse Developer should know about EMF
+			<ul>
+				<li><a href="https://www.eclipsecon.org/na2014/session/what-every-eclipse-developer-should-know-about-emf">Tutorial (Jonas Helming)</a></li>
+			</ul>
+		</li>
+		<li>
+			<div>Mar 2014</div>Getting married with EMF
+			<ul>
+				<li><a href="https://www.eclipsecon.org/na2014/session/getting-married-emf">Talks (Jonas Helming)</a></li>
+			</ul>
+		</li>
+		
 		<li>
 			<div>Jan 30 2009</div>Scale, Share and Store your Models with CDO 2.0
 			<ul>
@@ -338,46 +310,7 @@
 	</ul>
 </div>
 
-<div class="homeitem3col">
-	<a name="sdo"></a>
-	<h3>Service Data Objects (SDO)</h3>
 
-	<ul>
-		<li>
-			<div>Sep 28 2004</div><a target="_out" href="http://www-106.ibm.com/developerworks/java/library/j-sdo/">Introduction to Service Data Objects</a>
-		</li>
-
-		<li>
-			<div>Oct 12 2004</div><a href="http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.emf.ecore.sdo.doc/tutorials/datagraph/datagraph.html">Tutorial: Using the SDO Data Graph Editor</a>
-		</li>
-
-		<li>
-			<div>June 29 2005</div>SDO Reference:
-			<ul>
-				<li><a target="_out" href="http://www.ibm.com/developerworks/java/library/j-commonj-sdowmt/">Announcement</a>, <a target="_out" href="ftp://www6.software.ibm.com/software/developer/library/j-commonj-sdowmt/Next-Gen-Data-Programming-Whitepaper.doc">Whitepaper</a></li>
-				<li><a target="_out" href="ftp://www6.software.ibm.com/software/developer/library/j-commonj-sdowmt/Commonj-SDO-Specification-v1.0.pdf">1.0 specification</a>, <a target="_out" href="ftp://www6.software.ibm.com/software/developer/library/j-commonj-sdowmt/Commonj-SDO-Specification-v2.0.pdf">2.0 specification</a></li>
-				<li><a target="_out" href="http://www.eclipse.org/modeling/emf/javadoc/">Javadoc</a></li>
-			</ul>
-		</li>
-
-		<li>
-			<div>June 7 2006</div><a target="_out" href="http://incubator.apache.org/tuscany/sdo_index.html">Apache Tuscany Project</a>
-		</li>
-
-
-		<li>
-			<div>July 1 2004</div><a target="_out" href="http://www.redbooks.ibm.com/redbooks/pdfs/sg246361.pdf">Redbook: WebSphere Studio 5.1.2 JavaServer Faces and Service Data Objects</a>
-		</li>
-
-		<li>
-			<div>July 1 2004</div><a target="_out" href="http://www-128.ibm.com/developerworks/db2/library/techarticle/dm-0407saracco/index.html">Enterprise Information Integration Technology</a> (usage)
-		</li>
-
-		<li>
-			<div>Oct 6 2004</div><a target="_out" href="http://www.sys-con.com/story/?storyid=46652&amp;DE=1">Integrating relational data into Web applications</a> (an introduction to SDO)
-		</li>
-	</ul>
-</div>
 
 <div class="homeitem3col">
 	<a name="contributions"></a>
@@ -480,160 +413,31 @@
 	</ul>
 </div>
 
-<div class="homeitem3col">
-	<a name="emf21xdocs"></a>
-	<h3>EMF 2.1</h3>
-	<ul>
-		<li>
-			<div>July 6 2005</div><a href="http://www.eclipse.org/modeling/emf/docs/performance/EMFPerformanceTestsResults.html">EMF 2.1.0 vs. 2.0.1 Performance Report</a>
-		</li>
 
-		<li>
-			<div>July 6 2005</div><a href="http://www.eclipse.org/modeling/emf/docs/performance/EMFPerformanceTestsFAQ.html">EMF 2.1.0 vs. 2.0.1 Performance FAQ</a>
-		</li>
-		<li>
-			<div>May 19 2005</div><a href="http://www.eclipse.org/modeling/emf/docs/2.x/whatsnew/tools2.1.html">What's New In EMF <u>Tools</u>? (2.1.0.I200505191347)</a>
-		</li>
-	</ul>
+
+
 </div>
-
-<div class="homeitem3col">
-	<a name="emf20xdocs"></a>
-	<h3>EMF 2.0</h3>
-
-	<ul>
-		<li>
-			<div>June 29 2004</div><a href="http://www.eclipse.org/modeling/emf/docs/2.x/tutorials/clibmod/clibmod_emf2.0.html">Tutorial: Generating an EMF 2.0 Model</a>
-		</li>
-
-		<li>
-			<div>June 29 2004</div><a href="http://www.eclipse.org/modeling/emf/docs/2.x/tutorials/slibmod/slibmod_emf2.0.html">Tutorial: Generating an Extended EMF 2.0 Model</a>
-		</li>
-
-		<li>
-			<div>June 29 2004</div><a href="http://www.eclipse.org/modeling/emf/docs/2.x/tutorials/xlibmod/xlibmod_emf2.0.html">Tutorial: Generating an EMF 2.0 Model using XML Schema</a>
-		</li>
-
-		<li>
-			<div>May 31 2004</div><a target="_out" href="http://www.eclipse.org/modeling/emf/docs/2.x/tutorials/jet1/jet_tutorial1_emf2.0.html">JET Tutorial Part 1 (Introduction to JET)</a><br/>
-			Contributed by Remko Popma [EMF 2.0]
-		</li>
-
-		<li>
-			<div>May 31 2004</div><a target="_out" href="http://www.eclipse.org/modeling/emf/docs/2.x/tutorials/jet2/jet_tutorial2_emf2.0.html">JET Tutorial Part 2 (Write Code that Writes Code)</a><br/>
-			Contributed by Remko Popma [EMF 2.0]
-		</li>
-	</ul>
-</div>
-
-<div class="homeitem3col">
-	<a name="emf1xdocs"></a>
-	<h3>EMF 1.x</h3>
-
-	<ul>
-		<li>
-			<div>May 27 2004</div><a href="http://www.eclipse.org/modeling/emf/docs/1.x/UG/EMF_v1.0_Users_Guide.html">EMF 1.0 Users' Guide</a>
-		</li>
-
-		<li>
-			<div>May 27 2004</div><a href="http://www.eclipse.org/modeling/emf/docs/1.x/JarDepsExternal/JarDepsExternal.html">EMF 1.0 Jar Dependencies for Running Standalone as a Java Application Outside Eclipse</a>
-		</li>
-
-		<li>
-			<div>May 19 2003</div><a href="http://www.eclipse.org/modeling/emf/docs/1.x/tutorials/clibmod/clibmod_emf1.1.html">Tutorial: Generating an EMF 1.1 Model</a>
-		</li>
-
-		<li>
-			<div>May 1 2003</div><a href="http://www.eclipse.org/modeling/emf/docs/1.x/tutorials/slibmod/slibmod_emf1.1.html">Tutorial: Generating an Extended EMF 1.1 Model</a>
-		</li>
-
-		<li>
-			<div>May 22 2003</div><a href="http://www.eclipse.org/modeling/emf/docs/1.x/tutorials/xlibmod/xlibmod_emf1.1.html">Tutorial: Generating an EMF 1.1 Model using XML Schema</a>
-		</li>
-
-		<li>
-			<div>August 20 2003</div><a href="http://www.eclipse.org/modeling/emf/docs/1.x/tutorials/glibmod/glibmod_emf1.1.html">Tutorial: Creating an EMF 1.1 Model using a GraphicalEditor</a>
-		</li>
-	</ul>
-</div>
-
-<div class="homeitem3col">
-	<a name="plandocs"></a>
-	<h3>Project Management</h3>
-	<ul>
-		<li><a href="http://wiki.eclipse.org/Eclipse_Modeling_Framework#Plans">EMF &amp; QTV Project Plans</a></li>
-		<li><div>(<a href="http://www.eclipse.org/projects/dev_process/release-review.php">?</a>)</div><a href="http://www.eclipse.org/projects/previous-release-reviews.php">Past Reviews</a></li>
-		<li><a href="http://wiki.eclipse.org/Eclipse_Modeling_Framework#New_.26_Noteworthy">New &amp; Noteworthy</a></li>
-		<li><a href="http://www.eclipse.org/modeling/emf/eclipse-project-ip-log.php">Project IP Log</a> (CSV)</li>
-		<li><a href="http://www.eclipse.org/projects/timeline/">Master Timeline</a></li>
-		<li>
-			<div>August 26, 2005</div><a href="http://www.eclipse.org/modeling/emf/docs/architecture/jet2/jet2.html">JET Enhancement Proposal (JET2)</a>
-		</li>
-	</ul>
-</div>
-EOHTML;
-
-echo "</div>\n";
-
-print "<div id=\"rightcolumn\">\n";
-
-print '<div class="sideitem">' . "\n" . '<h6>New Docs</h6>';
-getNews(3, "docs");
-print ' <ul>
-			<li><a href="/' . $PR . '/news-whatsnew.php">Older news</a></li>
-		</ul>
-	</div>
-';
-
-print <<<EOHTML
-<div class="sideitem">
-	<h6>Documentation</h6>
-	<ul>
-		<li><a href="#overviews">EMF Overview Papers</a></li>
-		<li><a href="#tutorials">EMF Tutorials</a></li>
-		<li><a href="#references">Books, Guides, and References</a></li>
-		<li><a href="#whatsnew">The Bleeding Edge</a></li>
-		<li><a href="#presentations">Presentations &amp; Workshops</a></li>
-	</ul>
-</div>
-
-<div class="sideitem">
-	<h6>Other Resources</h6>
-	<ul>
-		<li><a href="#xsd">XML Schema (XSD)</a></li>
-		<li><a href="#sdo">Service Data Objects (SDO)</a></li>
-		<li><a href="#contributions">Contributed Articles</a></li>
-		<li><a href="#emf21xdocs">EMF 2.1</a>, <a href="#emf20xdocs">EMF 2.0</a>, <a href="#emf1xdocs">EMF 1.x</a></li>
-		<li><a href="#plandocs">Project Management</a></li>
-		<li><a target="_dw" href="http://www-128.ibm.com/developerworks/search/searchResults.jsp?searchType=1&amp;searchSite=dW&amp;searchScope=dW&amp;query=emf">Search developerWorks</a></li>
-	</ul>
-</div>
-
-        <div class="sideitem">
+<div id="rightcolumn">
+	<div class="sideitem">
                 <h6>Buy The Book</h6>
 
                 <p align="center">
                         <a href="http://www.informit.com/title/9780321331885"><img src="/modeling/emf/images/book/EMF-2nd-Ed-Cover-Small.jpg"/></a>
                 </p>
                 <ul>
-                <li><a href="http://www.informit.com/title/9780321331885">View Details &amp; Order</a>
-                <li><a href="/modeling/emf/images/book/EMF-2nd-Ed-Covers-Large.jpg">View Front &amp; Back Covers</a>
-                <li><a href="http://wiki.eclipse.org/EMF_Book_Errata">View &amp; Add Errata</a>
+                
                 </ul>
         </div>
-
-<!-- <div class="sideitem">
-	<h6>Eclipse Wiki</h6>
-	<ul>
-EOHTML;
-$wikiContents = wikiCategoryToListItems("EMF");
-print $wikiContents;
-print <<<EOHTML
-	</ul>
-</div> -->
+		<div class="sideitem">
+			<h6>News on Twitter</h6>
+		<a class="twitter-timeline" href="https://twitter.com/hashtag/eclipsemf" data-widget-id="503883842478809088">#eclipsemf Tweets</a>
+<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+		</div>
+	</div>
+</div>
 EOHTML;
 
-print "</div>\n";
+
 
 $html = ob_get_contents();
 ob_end_clean();
diff --git a/emf/gettingstarted.php b/emf/gettingstarted.php
new file mode 100644
index 0000000..7a21345
--- /dev/null
+++ b/emf/gettingstarted.php
@@ -0,0 +1,65 @@
+<?php  																														
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	
+if (is_file($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php")) 
+{
+	require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php");
+}
+$App = new App(); $Nav = new Nav(); $Menu = new Menu(); 
+if (class_exists("ProjectInfo"))
+{
+	$projectInfo = new ProjectInfo("modeling");
+	$projectInfo->generate_common_nav( $Nav );
+}		
+include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
+
+	#*****************************************************************************
+	#
+	# index.php
+	#
+	# Author: 		Richard Gronback (with edits by Nick Boldt)
+	# Date:			2006-05-11
+	#
+	# Description: Modeling project homepage
+	#
+	#
+	#****************************************************************************
+	
+	#
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle 		= "Eclipse Modeling Project";
+	$pageKeywords	= "modeling, UML, UML2, MDD, MDA, model-driven";
+	$pageAuthor		= "Richard Gronback";
+	
+	# Paste your HTML content between the EOHTML markers!	
+	$html = <<<EOHTML
+
+<div id="maincontent">
+	<div id="midcolumn">
+		<h1>Getting started</h1>
+		<h2>1. Download</h2>
+		<p>Download the latest <a href="http://eclipse.org/downloads/packages/eclipse-modeling-tools/lunar"><b>Eclipse Luna Release - Modeling Tools</a></b></p>
+		<h2>2. Learn about it</h2>
+		<p>Follow <b><a href="http://eclipsesource.com/blogs/tutorials/emf-tutorial/">this tutorial</a></b> and learn <b><a href="http://eclipsesource.com/blogs/tutorials/emf-tutorial/">"What every Eclipse developer should know about EMF"</a></b>. Additionally have a look at the <a href="docs/">documentation</a></p>
+		<h2>3. Explore</h2>
+		<p>EMF (core) is a common standard for data models, many technologies and frameworks are based on. This includes <b><a href=../server.php>server solutions</a></b>, <b><a href=../server.php>persistence frameworks</a></b>, <b><a href=../ui.php>UI frameworks</a></b> and <b><a href=../transformation.php>support for transformations</a></b>. Please have a look at the <b><a href="../">modeling project for an overview of EMF technologies</a></b>.</p>
+	</div>
+</div>
+
+<div id="rightcolumn">
+	
+		<div class="sideitem">
+			<h6>News on Twitter</h6>
+		<a class="twitter-timeline" href="https://twitter.com/hashtag/eclipsemf" data-widget-id="503883842478809088">#eclipsemf Tweets</a>
+<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+		</div>
+	</div>
+
+
+EOHTML;
+
+
+	# Generate the web page
+	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
diff --git a/emf/index.php b/emf/index.php
index eca930e..a419494 100644
--- a/emf/index.php
+++ b/emf/index.php
@@ -1,127 +1,145 @@
-<?php
-
-require_once ("../includes/buildServer-common.php");
-require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); $App = new App(); $Nav = new Nav(); $Menu = new Menu(); include($App->getProjectCommon());
-
-/* redirect for emf projects */
-if (isset($_GET["project"]) && isset($emf_home_redirects) && is_array($emf_home_redirects) && array_key_exists($_GET["project"],$emf_home_redirects))
+<?php  																														
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	
+if (is_file($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php")) 
 {
-    header("Location: " . $emf_home_redirects[$_GET["project"]]);
-	/*header("Location: http://www.eclipse.org/emft/projects/?project=" . $_GET["project"]);*/
-	exit;
+	require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php");
 }
-
-include($_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/db.php");
-
-/*if ($isWWWserver && class_exists("Poll"))
+$App = new App(); $Nav = new Nav(); $Menu = new Menu(); 
+if (class_exists("ProjectInfo"))
 {
-	# Enable polls on this page: Polls are good for 3 months!
-	$App->usePolls();
+	$projectInfo = new ProjectInfo("modeling");
+	$projectInfo->generate_common_nav( $Nav );
+}		
+include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
 
-	$Poll = new Poll(1, "What do you think of our new look?");
-	$Poll->addOption(1, "Phoen-tast-ix!");
-	$Poll->addOption(2, "Easier to use");
-	$Poll->addOption(3, "Too purple!");
-	$Poll->addOption(4, "Meh.");
-	# $Poll->noGraph();  # uncomment to disable bar graph
-	$pollHTML = $Poll->getHTML();
-} */   
+	#*****************************************************************************
+	#
+	# index.php
+	#
+	# Author: 		Richard Gronback (with edits by Nick Boldt)
+	# Date:			2006-05-11
+	#
+	# Description: Modeling project homepage
+	#
+	#
+	#****************************************************************************
+	
+	#
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle 		= "Eclipse Modeling Project";
+	$pageKeywords	= "modeling, UML, UML2, MDD, MDA, model-driven";
+	$pageAuthor		= "Richard Gronback";
+	
+	# Paste your HTML content between the EOHTML markers!	
+	$html = <<<EOHTML
 
-ob_start();
-?>
-
-<div id="midcolumn">
-	<h1>Eclipse Modeling Framework Project (EMF)</h1>
+<div id="maincontent">
+	<div id="midcolumn">
+		<h1>Eclipse Modeling Framework (EMF)</h1>
 	<img style="float:right" src="/modeling/emf/images/emf_logo.png" alt=""/>
-	<?php
-	include($_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/index-common.php");
-	?>
-</div>
+	<p>
+The EMF project is a modeling framework and code generation facility for building 
+tools and other applications based on a structured data model. From a model 
+specification described in XMI, EMF provides tools and runtime support to 
+produce a set of Java classes for the model, along with a set of adapter 
+classes that enable viewing and command-based editing of the model, and 
+a basic editor.</p>
+<p>EMF (core) is a common standard for data models, many technologies and frameworks are based on. This includes <b><a href=../server.php>server solutions</a></b>, <b><a href=../server.php>persistence frameworks</a></b>, <b><a href=../ui.php>UI frameworks</a></b> and <b><a href=../transformation.php>support for transformations</a></b>. Please have a look at the <b><a href="../">modeling project for an overview of EMF technologies</a></b>.</p>
 
-<div id="rightcolumn">
 
-	<div class="sideitem">
-		<h6>Buy The Book</h6>
-		
-		<p align="center">
-			<a href="http://www.informit.com/title/9780321331885"><img src="/modeling/emf/images/book/EMF-2nd-Ed-Cover-Small.jpg"/></a>
-		</p>
+ 
+
+
+
+<h3>EMF (Core)</h3>
+<p>EMF consists of three fundamental pieces:</p>
+
+<ul>
+	<li><b>EMF</b> - The core EMF framework includes a <a href="http://download.eclipse.org/modeling/emf/emf/javadoc?org/eclipse/emf/ecore/package-summary.html#details">meta
+	model (Ecore)</a> for describing models and runtime support for the
+	models including change notification, persistence support with
+	default XMI serialization, and a very efficient reflective API for
+	manipulating EMF objects generically.</li>
+
+	<li class="outerli"><b>EMF.Edit -</b> The EMF.Edit framework includes generic
+	reusable classes for building editors for EMF models. It
+	provides
 		<ul>
-		<li><a href="http://www.informit.com/title/9780321331885">View Details &amp; Order</a>
-		<li><a href="/modeling/emf/images/book/EMF-2nd-Ed-Covers-Large.jpg">View Front &amp; Back Covers</a>
-		<li><a href="http://wiki.eclipse.org/EMF_Book_Errata">View &amp; Add Errata</a>
+			<li>Content and label provider classes, property source support,
+			and other convenience classes that allow EMF models to be displayed
+			using standard desktop (JFace) viewers and property sheets.</li>
+
+			<li>A command framework, including a set of generic command
+			implementation classes for building editors that support fully
+			automatic undo and redo.</li>
 		</ul>
-	</div>
+	</li>
 
+	<li><b>EMF.Codegen</b> - The EMF code generation facility is
+	capable of generating everything needed to build a complete editor
+	for an EMF model. It includes a GUI from which generation options
+	can be specified, and generators can be invoked. The generation
+	facility leverages the JDT (Java Development Tooling) component of
+	Eclipse.</li>
+</ul>
 
+<p>Three levels of code generation are supported:</p>
+
+<ul>
+	<li><b>Model</b> - provides Java interfaces and implementation
+	classes for all the classes in the model, plus a factory and
+	package (meta data) implementation class.</li>
+
+	<li><b>Adapters</b> - generates implementation classes (called
+	ItemProviders) that adapt the model classes for editing and
+	display.</li>
+
+	<li><b>Editor</b> - produces a properly structured editor that
+	conforms to the recommended style for Eclipse EMF model editors and
+	serves as a starting point from which to start customizing.</li>
+</ul>
+
+<p>All generators support regeneration of code while preserving user
+modifications. The generators can be invoked either through the GUI
+or headless from a command line.</p>
+
+<p>Want to learn more about how easy it is to use this exciting new
+technology to help you boost your Java programming productivity,
+application compatibility and integration? Start by reading the <a
+href="gettingstarted.html">getting started</a>,
+followed by <a href="docs/">more documentation</a>,
+and then sit back and watch your applications write themselves!
+Well, not completely, but this wouldn't be a sales pitch if there
+weren't a little bit of exaggeration.</p>
+
+</div>
+	
+	
+	<div id="rightcolumn">
 	<div class="sideitem">
-		<h6>News on Twitter</h6>
+                <h6>Buy The Book</h6>
+
+                <p align="center">
+                        <a href="http://www.informit.com/title/9780321331885"><img src="/modeling/emf/images/book/EMF-2nd-Ed-Cover-Small.jpg"/></a>
+                </p>
+                <ul>
+                
+                </ul>
+        </div>
+		<div class="sideitem">
+			<h6>News on Twitter</h6>
 		<a class="twitter-timeline" href="https://twitter.com/hashtag/eclipsemf" data-widget-id="503883842478809088">#eclipsemf Tweets</a>
 <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+		</div>
 	</div>
-
-	<div class="sideitem">
-		<h6><a href="/modeling/emf/feeds/"><img style="float:right" alt="Build Feeds" src="/modeling/images/rss-atom10.gif"/></a>
-		<?php echo $tmp && array_key_exists($proj,$tmp) && $tmp[$proj] ? $tmp[$proj] . " " : ""; ?>Build News</h6>
-		<?php /* suppress SDO events */
-			  build_news(array_diff($cvsprojs,array("org.eclipse.emf.ecore.sdo")), $cvscoms, $projct); ?>
-		<ul>
-			<li><a href="/<?php print $PR; ?>/news-whatsnew.php#build">Other build news</a></li>
-		</ul>
-	</div>
-
-<?php if ($isWWWserver && class_exists("Poll")) { ?>
-	<div class="sideitem">
-	<h6>Poll</h6>
-	<?php echo $pollHTML; ?>
-	</div>
-<?php } ?>
-
-	<div class="sideitem">
-		<h6>Modeling Corner</h6>
-		<p>Want to <a href="http://wiki.eclipse.org/index.php/Modeling_Corner">contribute</a> models, projects, files, ideas, utilities, or code to 
-		<a href="http://www.eclipse.org/modeling/emf/">EMF</a> or any other part of the <a href="http://www.eclipse.org/modeling/">Modeling Project</a>? 
-		Now you can!</p>
-		<p>Have a look, post your comments, submit a link, or just read what others have written. <a href="http://wiki.eclipse.org/index.php/Modeling_Corner">Details here</a>.</p>
-	</div>
-
-	<a name="related"></a>
-	<div class="sideitem">
-		<h6>Related links</h6>
-		<ul>
-			<li><a href="http://www.eclipse.org/modeling">Eclipse Modeling</a></li>
-			<li>Web: <a href="http://www.eclipse.org/emft/">EMFT</a>, 
-			<a href="http://www.eclipse.org/modeling/mdt/">MDT</a>, 
-			<a href="http://www.eclipse.org/modeling/m2t/">M2T</a></li>
-			<li>Wiki: <a href="http://wiki.eclipse.org/index.php/Category:EMFT">EMFT</a>, 
-			<a href="http://wiki.eclipse.org/index.php/Category:MDT">MDT</a>, 
-			<a href="http://wiki.eclipse.org/index.php/Category:M2T">M2T</a></li>
-			<li><a href="http://www.eclipse.org/modeling/emf/docs/misc/UsingUpdateManager/UsingUpdateManager.html">Using Update Manager</a></li>
-			<li><a href="http://www.eclipse.org/newsgroups">Eclipse newsgroups</a></li>
-		</ul>
-	</div>
-	
-	<?php
-	if ($isEMFserver)
-	{
-		include_once($_SERVER["DOCUMENT_ROOT"] . "/$PR/build/sideitems-common.php");
-	}
-	?>
-
 </div>
-<?php
-$html = ob_get_contents();
-ob_end_clean();
 
-$trans = array_flip($projects);
-$pageTitle = "Eclipse Modeling - EMF - Home";
-$pageKeywords = ""; // TODO: add something here
-$pageAuthor = "Neil Skrypuch";
 
-$App->AddExtraHtmlHeader("<link rel=\"stylesheet\" type=\"text/css\" href=\"/modeling/includes/index.css\"/>\n");
-if ($projct) 
-{
-    $App->AddExtraHtmlHeader('<link type="application/rss+xml" rel="alternate" title="EMF '.$trans[$projct].' Build Feed" href="http://www.eclipse.org/modeling/download.php?file=/'.$PR.'/feeds/builds-'.$projct.'.xml"/>' . "\n");
-}
-$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+EOHTML;
+
+
+	# Generate the web page
+	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
 ?>
diff --git a/emf/indexold.php b/emf/indexold.php
new file mode 100644
index 0000000..84f9812
--- /dev/null
+++ b/emf/indexold.php
@@ -0,0 +1,97 @@
+<?php
+
+require_once ("../includes/buildServer-common.php");
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); $App = new App(); $Nav = new Nav(); $Menu = new Menu(); include($App->getProjectCommon());
+
+/* redirect for emf projects */
+if (isset($_GET["project"]) && isset($emf_home_redirects) && is_array($emf_home_redirects) && array_key_exists($_GET["project"],$emf_home_redirects))
+{
+    header("Location: " . $emf_home_redirects[$_GET["project"]]);
+	/*header("Location: http://www.eclipse.org/emft/projects/?project=" . $_GET["project"]);*/
+	exit;
+}
+
+include($_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/db.php");
+
+/*if ($isWWWserver && class_exists("Poll"))
+{
+	# Enable polls on this page: Polls are good for 3 months!
+	$App->usePolls();
+
+	$Poll = new Poll(1, "What do you think of our new look?");
+	$Poll->addOption(1, "Phoen-tast-ix!");
+	$Poll->addOption(2, "Easier to use");
+	$Poll->addOption(3, "Too purple!");
+	$Poll->addOption(4, "Meh.");
+	# $Poll->noGraph();  # uncomment to disable bar graph
+	$pollHTML = $Poll->getHTML();
+} */   
+
+ob_start();
+?>
+
+<div id="midcolumn">
+	<h1>Eclipse Modeling Framework Project (EMF)</h1>
+	<img style="float:right" src="/modeling/emf/images/emf_logo.png" alt=""/>
+	<?php
+	include($_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/index-common.php");
+	?>
+</div>
+
+<div id="rightcolumn">
+
+	<div class="sideitem">
+		<h6>Buy The Book</h6>
+		
+		<p align="center">
+			<a href="http://www.informit.com/title/9780321331885"><img src="/modeling/emf/images/book/EMF-2nd-Ed-Cover-Small.jpg"/></a>
+		</p>
+		<ul>
+		<li><a href="http://www.informit.com/title/9780321331885">View Details &amp; Order</a>
+		<li><a href="/modeling/emf/images/book/EMF-2nd-Ed-Covers-Large.jpg">View Front &amp; Back Covers</a>
+		<li><a href="http://wiki.eclipse.org/EMF_Book_Errata">View &amp; Add Errata</a>
+		</ul>
+	</div>
+
+
+	<div class="sideitem">
+		<h6>News on Twitter</h6>
+		<a class="twitter-timeline" href="https://twitter.com/hashtag/eclipsemf" data-widget-id="503883842478809088">#eclipsemf Tweets</a>
+<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+	</div>
+
+	
+
+<?php if ($isWWWserver && class_exists("Poll")) { ?>
+	<div class="sideitem">
+	<h6>Poll</h6>
+	<?php echo $pollHTML; ?>
+	</div>
+<?php } ?>
+
+	
+	
+	<?php
+	if ($isEMFserver)
+	{
+		include_once($_SERVER["DOCUMENT_ROOT"] . "/$PR/build/sideitems-common.php");
+	}
+	?>
+
+</div>
+<?php
+$html = ob_get_contents();
+ob_end_clean();
+
+$trans = array_flip($projects);
+$pageTitle = "Eclipse Modeling - EMF - Home";
+$pageKeywords = ""; // TODO: add something here
+$pageAuthor = "Neil Skrypuch";
+
+$App->AddExtraHtmlHeader("<link rel=\"stylesheet\" type=\"text/css\" href=\"/modeling/includes/index.css\"/>\n");
+if ($projct) 
+{
+    $App->AddExtraHtmlHeader('<link type="application/rss+xml" rel="alternate" title="EMF '.$trans[$projct].' Build Feed" href="http://www.eclipse.org/modeling/download.php?file=/'.$PR.'/feeds/builds-'.$projct.'.xml"/>' . "\n");
+}
+$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
diff --git a/graphical.php b/graphical.php
new file mode 100644
index 0000000..b4b3e6e
--- /dev/null
+++ b/graphical.php
@@ -0,0 +1,106 @@
+<?php  																														
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	
+if (is_file($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php")) 
+{
+	require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php");
+}
+$App = new App(); $Nav = new Nav(); $Menu = new Menu(); 
+if (class_exists("ProjectInfo"))
+{
+	$projectInfo = new ProjectInfo("modeling");
+	$projectInfo->generate_common_nav( $Nav );
+}		
+include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
+
+	#*****************************************************************************
+	#
+	# index.php
+	#
+	# Author: 		Richard Gronback (with edits by Nick Boldt)
+	# Date:			2006-05-11
+	#
+	# Description: Modeling project homepage
+	#
+	#
+	#****************************************************************************
+	
+	#
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle 		= "Graphical Modeling";
+	$pageKeywords	= "modeling, UML, UML2, MDD, MDA, model-driven";
+	$pageAuthor		= "Richard Gronback";
+	
+	# Paste your HTML content between the EOHTML markers!	
+	$html = <<<EOHTML
+
+
+<div id="maincontent">
+	<div id="midcolumn">
+		<h1>$pageTitle</h1>
+		<table>
+		<tr>
+		<td><p>The domain model often needs to be visualized in a graphical way, such as in a diagram editor.  This is especially true when implementing tools. The following frameworks provide support to implement graphical views for your EMF-based domain model that can be embedded into your tool or application.</p>
+		</td>
+		<td align="right"><img src="http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg">
+		</td>
+		</table>
+		<div class="container-fluid">
+		<div id="content"></div>
+  </div>
+<script type="text/javascript" src="ejs_production.js"></script>
+	<script>
+(function () {
+	// Render the template using the specified data.
+    var html = new EJS({url: "projects.ejs"}).render({projects: [
+	{Title:'GMF Tooling', 
+		Description:'GMF Tooling is a Model Driven Architecture approach to domain of graphical editors. By defining a tooling, graphical and mapping model definition, one can generate a fully functional graphical editor in Eclipse.',
+		URL:'http://eclipse.org/gmf-tooling/',
+		Logo:'http://wiki.eclipse.org/images/3/3d/Gmf_logo_banner.png'
+	},
+	{Title:'GMF Runtime', 
+		Description:'The GMF Runtime is an industry proven application framework for creating graphical editors using EMF and GEF. The GMF Runtime provides many features that one would have to code by hand if using EMF and GMF directly.',
+		URL:'http://www.eclipse.org/modeling/gmp/',
+		Logo:'http://wiki.eclipse.org/images/3/3d/Gmf_logo_banner.png'
+	},
+	{Title:'GMF Notation', 
+		Description:'The GMF Notation Project provides a standard EMF notational meta model.',
+		URL:'http://www.eclipse.org/modeling/gmp/',
+		Logo:'http://wiki.eclipse.org/images/3/3d/Gmf_logo_banner.png'
+	},
+	{Title:'Graphiti', 
+		Description:'Eclipse provides a modeling infrastructure evolving around the Eclipse Modeling Framework (EMF) for which offering graphical representations and editing possibilities is essential. Graphiti is an Eclipse-based graphics framework that enables rapid development of state-of-the-art diagram editors for domain models. Graphiti can use EMF-based domain models very easily but can deal with any Java-based objects on the domain side as well.',
+		URL:'http://eclipse.org/graphiti/',
+		Logo:'http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg'
+	}
+]});
+    document.getElementById("content").innerHTML = html;
+}());
+</script>
+		
+		
+		
+		
+		
+
+	</div>
+	
+	
+	<div id="rightcolumn">
+		<div class="sideitem">
+			<h6>News on Twitter</h6>
+		<a class="twitter-timeline" href="https://twitter.com/hashtag/eclipsemf" data-widget-id="503883842478809088">#eclipsemf Tweets</a>
+<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+		</div>
+	</div>
+</div>
+
+
+
+EOHTML;
+
+
+	# Generate the web page
+	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
diff --git a/includes/common.css b/includes/common.css
index 511247e..3ec8b6d 100644
--- a/includes/common.css
+++ b/includes/common.css
@@ -12,3 +12,25 @@
 	list-style-image: url('/eclipse.org-common/themes/Nova/images/separator.png');	
 	padding: 5px 10px 5px 5px;
 }
+
+.technologyGroup {
+	
+}
+.projectEntry {
+	background-color: #0B0528;
+	color: white;
+	padding: 0.2em;
+	border-radius: 0.2em;
+}
+
+.projectLogo {
+	width: 25%;
+	float: left;
+}
+
+.projectDescription {
+	float: left;
+	width: 73%;
+	padding-left: 0.3em;
+	padding-right: 0.2em;
+}
diff --git a/includes/downloads-common.php b/includes/downloads-common.php
index 210e7e4..594b0b2 100644
--- a/includes/downloads-common.php
+++ b/includes/downloads-common.php
@@ -247,96 +247,29 @@
 
 print "</div>\n";
 
-print "<div id=\"rightcolumn\">\n";
 
-$extras = array("doBleedingEdge");
 
-foreach ($extras as $z)
-{
-	if (function_exists($z))
-	{
-		call_user_func($z);
-	}
-}
 
-print "<div class=\"sideitem\">\n";
-print "<h6>Additional Info</h6>\n";
-print "<ul>\n";
-print "<li><a href=\"http://www.eclipse.org/$PR/faq.php\">FAQs</a></li>\n";
-print "<li><a href=\"#archives\">Archived Releases</a></li>\n";
-print "<li><a href=\"http://www.eclipse.org/modeling/downloads/build-types.php\">About Build Types</a></li>\n";
-print "<li><a href=\"http://www.eclipse.org/modeling/downloads/verifyMD5.php\">Using md5 Files</a></li>\n";
-
-print "<li><a href=\"https://bugs.eclipse.org/bugs/buglist.cgi?" . 
-	($parentProj != "NONE" && $parentProj != "" && $parentProj != $projct ? "product=$parentProj&amp;component=$projct" : "product=$projct") . 
-	"&amp;bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED\">Open Bugs</a></li>\n";
-print "<li><a href=\"http://www.eclipse.org/$PR/news/relnotes.php?project=$projct&amp;version=HEAD\">Release Notes</a></li>\n";
-print "</ul>\n";
-print "</div>\n";
-
-print "<div class=\"sideitem\">\n";
-print "<h6>Getting Sources</h6>\n";
-print "<ul>\n";
-print "<li><a href=\"http://wiki.eclipse.org/EMF/Getting_Source\">CVS + Eclipse</a></li>\n";
-print "<li><a href=\"http://wiki.eclipse.org/index.php/CVS_Source_From_Mapfile\">CVS + Map File + Script</a></li>\n";
-print "<li><a href=\"http://www.eclipse.org/$PR/downloads/?project=$projct\">SDK zip</a> or <a href=\"http://www.eclipse.org/$PR/updates/\">Update Manager</a> (org.*.source_x.y.z.*/*src.zip)</li>\n";
-print "</ul>\n";
-print "</div>\n";
-
-if (isset($NLpacks) && is_array($NLpacks))
-{
-	print "<div class=\"sideitem\">\n";
-	print "<h6>Language Packs</h6>\n";
-	print "<ul>\n";
-	foreach (array_keys($NLpacks) as $z)
-	{
-		print "<li><a href=\"#$NLpacks[$z]\">$z</a></li>\n";
-	}
-	print "</ul>\n";
-	print "</div>\n";
-}
-
-print "<div class=\"sideitem\">\n";
-print "<h6>Sort</h6>\n";
-$newsort = ($sortBy == "date" ? "type" : "date");
-print "<ul>\n";
-print "<li><a href=\"?project=$projct&amp;showAll=$showAll&amp;showMax=$showMax&amp;sortBy=$newsort\">By " . ucfirst($newsort) . "</a></li>\n";
-print "</ul>\n";
-print "</div>\n";
-
-$f = $_SERVER["DOCUMENT_ROOT"] . "/$PR/build/sideitems-common.php";
-if (file_exists($f))
-{
-	include_once($f);
-}
-
-if (function_exists("sidebar"))
-{
-	sidebar();
-}
-
-if (isset($incubating) && in_array($projct, $incubating))
-{
 ?>
-<div class="sideitem">
-   <h6>Incubation</h6>
-   <p>This component is currently in its <a href="http://www.eclipse.org/projects/dev_process/validation-phase.php">Validation (Incubation) Phase</a>.</p>
-   <div align="center"><a href="http://www.eclipse.org/projects/what-is-incubation.php"><img
-        align="center" src="http://www.eclipse.org/images/egg-incubation.png"
-        border="0" /></a></div>
- </div>
+<div id="rightcolumn">
+		<div class="sideitem">
+			<h6>News on Twitter</h6>
+		<a class="twitter-timeline" href="https://twitter.com/hashtag/eclipsemf" data-widget-id="503883842478809088">#eclipsemf Tweets</a>
+<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+		</div>
+	</div>
+	</div>
 <?php
-}
 
-if (is_file($_SERVER['DOCUMENT_ROOT'] . "/$PR/eclipse-project-ip-log.php"))
-{
+
+
 print<<<EOHTML
 <div class="sideitem">
 	<h6>IP Log</h6>
 	<p>See committer/contributor <a href="/$PR/eclipse-project-ip-log.php">IP log</a>.</p>
 </div>
 EOHTML;
-}
+
 
 print "</div>\n";
 
diff --git a/index.php b/index.php
index 3e2ae32..d40e911 100644
--- a/index.php
+++ b/index.php
@@ -48,101 +48,20 @@
 		</td>
 		</table>
 		<div class="homeitem3col">
-			<h3>Abstract Syntax Development</h3>
-			<ul>
-				<li><a href="http://www.eclipse.org/modeling/emf/">Eclipse Modeling Framework</a> (EMF) : a modeling framework and code generation facility for building tools and other applications based on a structured data model.</li>
+			<h2>Modeling: Faster, Smarter, Better</h2>
+				<p>The bewildering complexity of modern software begs for a fresh approach focusing on high-level design, delegating menial tasks to tools and frameworks.  From a concise description of your problem domain, a complete solution can be inferred.</p>
+			<h2>What is Eclipse Modeling?</h2>
+				<p>Eclipse Modeling is an integrated assortment of extensible tools and frameworks for solving everyday problems.  At its core lies the Eclipse Modeling Framework, a rich abstraction for describing, composing, and manipulating structured information. Around this core, onion-like technology layers provide powerful facilities to address most everything you need.</p>
+			<h2>Why use Modeling?</h2>
+			<p>
 				<ul>
-					<li><a href="http://www.eclipse.org/modeling/emft/?project=cdo">CDO</a> : a technology for distributed shared EMF models and a fast server-based O/R mapping solution. With CDO you can easily enhance your existing models in such a way that saving a resource transparently commits the applied changes to a relational database.</li>
-					<li><a href="http://www.eclipse.org/modeling/emft/?project=net4j">Net4j</a> : an extensible client-server system based on the Eclipse Runtime and the Spring Framework. You can easily extend the protocol stack with Eclipse plugins that provide new transport or application protocols.</li>
-					<li><a href="http://www.eclipse.org/modeling/emft/?project=teneo">Teneo</a> : a database persistency solution for EMF using Hibernate or EclipseLink. It supports automatic creation of EMF to Relational Mappings and the related database schemas.</li>
-					<li><a href="http://www.eclipse.org/modeling/emf/?project=query">Model Query</a> (MQ) : facilitates the process of search and retrieval of model elements of interest in a flexible yet controlled and structured manner.</li>
-					<li><a href="http://www.eclipse.org/modeling/emf/?project=transaction">Model Transaction</a> (MT) : provides a model management layer built on top of EMF for managing EMF resources.</li>
-					<li><a href="http://www.eclipse.org/modeling/emf/?project=validation">Validation Framework</a> (VF) : provides model constraint definition, traversal, and evaluation for EMF model validation.</li>
-				</ul>
-			</ul>
-		</div>
-		<div class="homeitem3col">
-			<h3>Concrete Syntax Development</h3>
-			<ul>
-				<li><a href="/modeling/gmp">Graphical Modeling Project</a> (GMP) : provides a generative components and runtime infrastructures for developing graphical editors based on <a href="/modeling/emf/" target="_top"><b>EMF</b></a> and <a href="/gef" target="_top"><b>GEF</b></a>.</li>
-				<ul>
-					<li><a href="/modeling/gmp/gmf-tooling">GMF Tooling</a> : provides a model-driven approach to generating graphical editors in Eclipse..</li>
-					<li><a href="/modeling/gmp/gmf-runtime">GMF Runtime</a> : an industry proven application framework for creating graphical editors using EMF and GEF.</li>
-					<li><a href="/modeling/gmp/gmf-notation">GMF Notation</a> : provides a standard EMF notational meta model.</li>
-					<li><a href="/modeling/gmp/graphiti">Graphiti</a> : Graphiti is an Eclipse-based graphics framework to enable easy development of state-of-the-art diagram editors for domain models.</li>
-				</ul>
-				<li><a href="/modeling/tmf/">Textual Modeling Framework</a> (TMF) : provides tools and frameworks for developing textual syntaxes and corresponding editors based on <a href="/modeling/emf/" target="_top"><b>EMF</b></a>.</li>
-				<ul>
-					<li><a href="http://www.eclipse.org/modeling/tmf/?project=xtext">Xtext</a> : a powerful framework/tool for developing external textual DSLs based on <a href="http://www.eclipse.org/modeling/emf/" target="_top"><b>EMF</b></a>.</li>
-					<li><a href="http://www.eclipse.org/gmt/tcs/">TCS</a> : a component that enables the specification of textual concrete syntaxes for Domain-Specific Languages (DSLs) by attaching syntactic information to metamodels.</li>
-				</ul>
-			</ul>
-		</div>
-		<div class="homeitem3col">
-			<h3><a href="http://www.eclipse.org/modeling/mdt/">Model Development Tools</a> (MDT)</h3>
-			<ul>
-				<li><a href="http://www.eclipse.org/modeling/mdt/?project=bpmn2">Business Process Metamodel and Notation 2.x</a> (BPMN2) : 
-						an EMF-based implementation of the BPMN 2.x metamodel for the Eclipse platform.</li>
-				<li><a href="http://www.eclipse.org/etrice/">eTrice</a> : 
-						provides an implementation of the ROOM modeling language together with editors, code generator for Java, C++ and C code and exemplary target middleware.</li>
-				<li><a href="http://www.eclipse.org/modeling/mdt/?project=modisco">MoDisco</a> : 
-						provides an extensible framework to develop model-driven tools to support use-cases of existing software modernization.</li>
-				<li><a href="http://www.eclipse.org/modeling/mdt/?project=ocl">Object Constraint Language</a> (OCL) : 
-						defines APIs for OCL expression syntax for implementing queries and constraints.</li>
-				<li><a href="http://www.eclipse.org/modeling/mdt/papyrus/">Papyrus</a> : 
-						provides an integrated and user-consumable environment for editing any kind of EMF model and particularly supporting UML and related modeling languages such as SysML and MARTE.</li>
-				<li><a href="http://www.eclipse.org/sphinx/">Sphinx</a> : 
-						provides an extensible platform that eases the creation of integrated modeling tool environments supporting individual or multiple modeling languages (which can be UML-based or native DSLs) and has a particular focus on industrial strength and interoperability.</li>
-				<li><a href="http://www.eclipse.org/modeling/mdt/?project=uml2">Unified Modeling Language 2.x</a> (UML2) : 
-						an EMF-based implementation of the UML 2.x metamodel for the Eclipse platform.</li>
-				<li><a href="http://www.eclipse.org/modeling/mdt/?project=uml2tools">UML2 Tools</a> : 
-						a set of GMF-based editors for viewing and editing UML models.</li>
-				<li><a href="http://www.eclipse.org/modeling/mdt/?project=xsd">XML Schema Definition</a> (XSD) : 
-						a reference library that provides an <a href="http://www.eclipse.org/modeling/mdt/javadoc/?project=xsd&page=org/eclipse/xsd/package-summary.html&anchor=details">API</a> 
-						for use with any code that examines, creates or modifies <a href="http://www.w3.org/TR/XMLSchema-0">W3C XML Schema</a>.</li>
-			</ul>
-		</div>
-		<div class="homeitem3col">
-			<h3>Model Transformation</h3>
-			<ul>
-				<li><a href="http://www.eclipse.org/m2m/">Model to Model Transformation</a> (M2M) : will deliver an extensible framework for model-to-model transformation languages, with an exemplary implementation of the <a href="http://www.omg.org/technology/documents/modeling_spec_catalog.htm#MOF_QVT">QVT</a> Core language.</li>
-				<ul>
-					<li><a href="http://www.eclipse.org/m2m/atl/">Atlas Transformation Language (ATL)</a> : a model transformation language and toolkit.</li>
-				</ul>
-				<li><a href="http://www.eclipse.org/modeling/m2t/">Model to Text Transformation</a> (M2T) : focuses on technologies for transforming models into text (typically language source code and the resources it consumes)</li>
-				<ul>
-				    <li><a href="http://www.eclipse.org/acceleo">Acceleo</a> : a template based code generation framework with high quality tooling : complete Editor, Debugger and Profiler.</li>
-					<li><a href="http://www.eclipse.org/modeling/m2t/?project=jet">Java Emitter Templates</a> (JET) : provides code generation framework & facilities that are used by EMF. Includes an editor which provides features like syntax coloring, error highlighting and code completion.</li>
-					<li><a href="http://www.eclipse.org/modeling/m2t/?project=xpand">Xpand</a> : a statically-typed template language featuring polymorphic template invocation, aspect oriented programming, functional extensions, a flexible type system abstraction, model transformation and validation. Includes an editor which provides features like syntax coloring, error highlighting, navigation, refactoring and code completion.</li>
-				</ul>
-			</ul>
-		</div>
-		<div class="homeitem3col">
-			<h3>Technology and Research</h3>
-			<ul>
-				<li><a href="http://www.eclipse.org/gmt">Generative Modeling Technologies</a> (GMT) : research-oriented project focused on producing prototypes in the area of Model Driven Engineering (MDE).</li>
-				<ul>
-					<li><a href="http://www.eclipse.org/gmt/am3/">Atlas MegaModel Management (AM3)</a> : the goal is to provide a practical support for modeling in the large. The objective is to deal with global resource management in a model-engineering environment. We base this activity on the concept of a "megamodel".</li>
-					<li><a href="http://www.eclipse.org/gmt/amw/">Atlas Model Weaver (AMW)</a> : a tool for representing correspondences between models. The correspondences are stored in a model, called weaving model. It is created conforming to a weaving metamodel.</li>
-					<li><a href="http://www.eclipse.org/gmt/mofscript/">MOFScript</a> : aims at developing tools and frameworks for supporting model to text transformations, e.g., to support generation of implementation code or documentation from models.</li>
-					<li><a href="http://www.eclipse.org/gmt">UMLX</a> : concrete graphical syntax to complement the OMG QVT model transformation language.</li>
-					<li><a href="http://www.eclipse.org/gmt">VIATRA2</a> : aims to provide a general-purpose support for the entire life-cycle of engineering model transformations including the specification, design, execution, validation and maintenance of transformations within and between various modeling languages and domains.</li>
-					<li><a href="http://www.eclipse.org/gmt/epsilon/">Epsilon</a> : a metamodel-agnostic component for supporting model navigation, creation, and modification operations.</li>
-					<li><a href="http://www.eclipse.org/gmt/gems">GEMS</a> : aims to bridge the gap between the communities experienced with visual metamodeling tools, such as the Generic Modeling Environment (GME), and those built around the Eclipse modeling technologies, such as the Eclipse Modeling Framework (EMF) and Graphical Modeling Framework (GMF).</li>
-					<li><a href="http://www.eclipse.org/gmt/modisco">MoDisco</a> : an Eclipse GMT component for model-driven reverse engineering. The objective is to allow practical extractions of models from legacy systems. As a GMT component, MoDisco will make good use of other GMT components or solutions available in the Eclipse Modeling Project (EMF, M2M, GMF, TMF, etc), and more generally of any plugin available in the Eclipse environment.</li>
-				</ul>
-			</ul>
-		</div>
-		<div class="homeitem3col">
-			<h3>Amalgam</h3>
-			<ul>
-				<li><a href="http://www.eclipse.org/modeling/amalgam">Modeling Amalgamation Project</a> (Amalgam) : provides improved packaging, integration, and usability of Modeling project components.</li>
-				<ul>
-					<li><a href="http://www.eclipse.org/downloads/packages/eclipse-modeling-tools-includes-incubating-components/galileosr1">
-					<img alt="All-In-One Bundle including Eclipse and required dependencies" src="/modeling/images/dl-icon-aio-bundle.gif"/> 
-					<b style="color:green">All-In-One</b> Galileo SR1 Modeling Tools Package</a> : an <a href="http://www.eclipse.org/epp">Eclipse Packaging Project</a> that includes most Modeling SDKs.</li>
-				</ul>
-			</ul>
+					<li>To produce high-quality results quickly.</li>
+					<li>To reuse tried, tested, and true solutions effectively.</li>
+        			<li>To specify complex structured information concisely.</li>
+        			<li>To design rich textual and graphical notations easily.</li>
+        			<li>To implement powerful runtime solutions efficiently.</li>
+        			<li>To exploit industrial standards interoperably.</li>
+   
 		</div>
 		
 		<hr class="clearer" />
@@ -160,30 +79,13 @@
 		</ol>
 -->
 	</div>
-	<div id="rightcolumn">
-		<div class="sideitem">
-			<h6>Related links</h6>
-			<ul>
-				<li><a href="http://wiki.eclipse.org/index.php/Modeling_Project">Modeling Project Wiki</a></li>
-				<li><a href="http://wiki.eclipse.org/index.php/Modeling_Corner">Modeling Corner</a></li>
-				<li>
-				<a href="http://wiki.eclipse.org/Helios">Helios</a>, <a href="http://wiki.eclipse.org/Galileo">Galileo</a>, 
-				<a href="http://wiki.eclipse.org/Ganymede">Ganymede</a>, <a href="http://wiki.eclipse.org/Europa">Europa</a>, <a href="http://www.eclipse.org/callisto">Callisto</a> - 
-				see 'Models and Model Development Tools' category.</li>
-				<li><a href="http://www.eclipse.org/modeling/project-info/team.php">Who`s Who in Modeling?</a></li>
-			</ul>
-		</div>
-	</div>
+	
 	
 	<div id="rightcolumn">
 		<div class="sideitem">
-			<h6>News</h6>
-			<ul>
-				<li><a href="http://www.eclipse.org/downloads/packages/eclipse-modeling-tools-includes-incubating-components/galileosr1">
-				<img alt="All-In-One Bundle including Eclipse and required dependencies" src="/modeling/images/dl-icon-aio-bundle.gif"/> 
-				<b style="color:green">All-In-One</b> Galileo SR1 Modeling Tools Package</a> is available</a>.</li>
-				<li>Domain Specific Modeling <a href="http://eclipsesummit.org/summiteurope2007/index.php?page=detail/&id=32">demo</a> viewlets from <a href="http://eclipsesummit.org/summiteurope2007/index.php">Eclipse Summit Europe 2007</a> are <a href="http://www.eclipse.org/modeling/presentations/ese2007/index.php">posted</a>.</li>
-			</ul>
+			<h6>News on Twitter</h6>
+		<a class="twitter-timeline" href="https://twitter.com/hashtag/eclipsemf" data-widget-id="503883842478809088">#eclipsemf Tweets</a>
+<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
 		</div>
 	</div>
 </div>
diff --git a/more.php b/more.php
new file mode 100644
index 0000000..1c3ff37
--- /dev/null
+++ b/more.php
@@ -0,0 +1,107 @@
+<?php  																														
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	
+if (is_file($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php")) 
+{
+	require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php");
+}
+$App = new App(); $Nav = new Nav(); $Menu = new Menu(); 
+if (class_exists("ProjectInfo"))
+{
+	$projectInfo = new ProjectInfo("modeling");
+	$projectInfo->generate_common_nav( $Nav );
+}		
+include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
+
+	#*****************************************************************************
+	#
+	# index.php
+	#
+	# Author: 		Richard Gronback (with edits by Nick Boldt)
+	# Date:			2006-05-11
+	#
+	# Description: Modeling project homepage
+	#
+	#
+	#****************************************************************************
+	
+	#
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle 		= "Addtional Modeling Frameworks";
+	$pageKeywords	= "modeling, UML, UML2, MDD, MDA, model-driven";
+	$pageAuthor		= "Richard Gronback";
+	
+	# Paste your HTML content between the EOHTML markers!	
+	$html = <<<EOHTML
+
+
+<div id="maincontent">
+	<div id="midcolumn">
+		<h1>$pageTitle</h1>
+		<table>
+		<tr>
+		<td><p>Some technologies do not fit into a certain category or are a category unto themselves. These technologies provide great features for a variety of use cases, such as comparing model instances, querying models or applying reverse engineering (the extraction of models from code). The following list of technologies is a great proof of the variety and power of the EMF ecosystem. </p>
+		</td>
+		<td align="right"><img src="http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg">
+		</td>
+		</table>
+		<div class="container-fluid">
+		<div id="content"></div>
+  </div>
+<script type="text/javascript" src="ejs_production.js"></script>
+	<script>
+(function () {
+	// Render the template using the specified data.
+    var html = new EJS({url: "projects.ejs"}).render({projects: [
+	{Title:'EMF Compare', 
+		Description:'EMF Compare brings model comparison to the EMF framework, this tool provides generic support for any kind of metamodel in order to compare and merge models. The objectives of this component are to provide a stable and efficient generic implementation of model comparison and to provide an extensible framework for specific needs.', 
+		URL:'http://www.eclipse.org/emf/compare/#compare',
+		Logo:'http://www.eclipse.org/emf/compare/images/logos/logo.png'
+	},
+	
+	{Title:'Dawn', 
+		Description:'Dawn is a sub-component of Connected Data Objects project and achieves to create collaborative network solutions for user interfaces basing on CDO. E.g. it provides collaborative access for GMF diagrams. Beside the real time shared editing Dawn provides conflict visualisation and handling and other useful feature for collaborative modeling. In addition to this, Dawn will also provide a Web-Viewer which allows to view every diagram change online.', 
+		URL:'http://wiki.eclipse.org/Dawn',
+		Logo:'http://www.eclipse.org/cdo/images/Logo-Dawn.png'
+	},
+	{Title:'Amalgam', 
+		Description:'The Amalgamation project provides improved packaging, integration, and usability of Modeling project components. The project is focused on providing a consumable and integrated Eclipse Modeling Tools package and ease the discovery of the modeling technologies through specific code and examples.', 
+		URL:'http://www.eclipse.org/modeling/amalgam/',
+		Logo:'http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg'
+	},
+	{Title:'Validation Framework', 
+		Description:'The validation component provides the following capabilities: Constraint Definition - Provides API for defining constraints for any EMF meta-model (batch and live constraints), Customizable model traversal algorithms - Extensibility API to support meta-models that require custom strategies for model traversal, Constraint parsing for languages - Provides support for parsing the content of constraint elements defined in specific languages. The validation framework provides support for two languages: Java and OCL, Configurable constraint bindings to application contexts - API support to define "client contexts" that describe the objects that need to be validated and to bind them to constraints that need to be enforced on these objects, Validation listeners - Support for listening to validation events.', 
+		URL:'http://www.eclipse.org/modeling/emf/downloads/?project=validation',
+		Logo:'http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg'
+	}
+]});
+    document.getElementById("content").innerHTML = html;
+}());
+</script>
+		
+		
+		
+		
+		
+
+	</div>
+	
+	
+	<div id="rightcolumn">
+		<div class="sideitem">
+			<h6>News on Twitter</h6>
+		<a class="twitter-timeline" href="https://twitter.com/hashtag/eclipsemf" data-widget-id="503883842478809088">#eclipsemf Tweets</a>
+<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+		</div>
+	</div>
+</div>
+
+
+
+EOHTML;
+
+
+	# Generate the web page
+	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
diff --git a/projects.ejs b/projects.ejs
new file mode 100644
index 0000000..31c6d1e
--- /dev/null
+++ b/projects.ejs
@@ -0,0 +1,12 @@
+
+<% for(var i=0; i< projects.length; i++) {%>
+   <div class="row">
+		<a href="<%= projects[i].URL %>"><h2 class="projectEntry"><%= projects[i].Title %></h2></a>
+		<img class="projectLogo col-xs-3 img-rounded" src="<%= projects[i].Logo %>">
+		<p class="projectDescription col-xs-9">
+			<%= projects[i].Description %>
+		<a href="<%= projects[i].URL %>">Learn more...</a>
+		</p>
+		</div>
+<% } %>
+
diff --git a/server.php b/server.php
new file mode 100644
index 0000000..4d53573
--- /dev/null
+++ b/server.php
@@ -0,0 +1,111 @@
+<?php  																														
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	
+if (is_file($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php")) 
+{
+	require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php");
+}
+$App = new App(); $Nav = new Nav(); $Menu = new Menu(); 
+if (class_exists("ProjectInfo"))
+{
+	$projectInfo = new ProjectInfo("modeling");
+	$projectInfo->generate_common_nav( $Nav );
+}		
+include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
+
+	#*****************************************************************************
+	#
+	# index.php
+	#
+	# Author: 		Richard Gronback (with edits by Nick Boldt)
+	# Date:			2006-05-11
+	#
+	# Description: Modeling project homepage
+	#
+	#
+	#****************************************************************************
+	
+	#
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle 		= "Server and Storage";
+	$pageKeywords	= "modeling, UML, UML2, MDD, MDA, model-driven";
+	$pageAuthor		= "Richard Gronback";
+	
+	# Paste your HTML content between the EOHTML markers!	
+	$html = <<<EOHTML
+
+
+<div id="maincontent">
+	<div id="midcolumn">
+		<h1>$pageTitle</h1>
+		<table>
+		<tr>
+		<td><p><a href="/emf/">EMF (Core)</a> EMF (Core) allows you to generate classes based on a data model, a.k.a. the domain model. In many applications - no matter whether it is a tool or a business application - instances of the domain model need to be  stored efficiently and versioned. Moreover, such applications often have to enable multiple users to access and modify domain model instances concurrently and hence require a client-server architecture as well as support for transactions. The following technologies provide the necessary infrastructure to cater for such scenarios in your project.</p>
+		</td>
+		<td align="right"><img src="http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg">
+		</td>
+		</table>
+		<div class="container-fluid">
+		<div id="content"></div>
+  </div>
+<script type="text/javascript" src="ejs_production.js"></script>
+	<script>
+(function () {
+	// Render the template using the specified data.
+    var html = new EJS({url: "projects.ejs"}).render({projects: [
+	{Title:'CDO', 
+		Description:'The CDO (Connected Data Objects) Model Repository is a distributed shared model framework for EMF models and meta models. CDO is also a model runtime environment with a focus on orthogonal aspects like model scalability, transactionality, persistence, distribution, queries and more. 		CDO has a 3-tier architecture supporting EMF-based client applications, featuring a central model repository server and leveraging different types of pluggable data storage back-ends like relational databases, object databases and file systems. The default client/server communication protocol is implemented with the Net4j Signalling Platform.',
+		URL:'http://eclipse.org/cdo',
+		Logo:'https://projects.eclipse.org/sites/default/files/Logo-CDO.png'
+	},
+	{Title:'EMFStore', 
+		Description:'EMFStore is a model repository for the Eclipse Modeling Framework (EMF) and features collaborative editing and versioning of models. Existing versioning systems such as git or SVN are focused on textual artifacts and do not work well for models. EMFStore is specifically designed for models and allows semantic versioning of models. As a result, it supports merging and conflict detection more effectively. EMFStore can be used for EMF Model instances and can be integrated into any kind of existing application too.',
+		URL:'http://eclipse.org/emfstore',
+		Logo:'http://projects.eclipse.org/sites/default/files/emfstoreSmall.png'
+	},
+	{Title:'Net4j', 
+		Description:'Net4j is an extensible client-server system based on the Eclipse Runtime and the Spring Framework. You can easily extend the protocol stack with Eclipse plugins that provide new transport or application protocols. Net4js focus on performance and scalability is featured by non-blocking I/O, zero-copy signals and multiplexed binary protocols. Net4j was originally developed to support the CDO technology for distributed shared and persistent EMF models but can also multiplex your own user-supplied application protocols through the same socket connection.',
+		URL:'http://wiki.eclipse.org/Net4j',
+		Logo:'http://www.eclipse.org/cdo/images/Logo-Net4j.png'
+	},
+	{Title:'Teneo', 
+		Description:'Teneo is a database persistency solution for EMF using Hibernate or EclipseLink. It supports automatic creation of EMF to Relational Mappings. EMF Objects can be stored and retrieved using advanced queries (HQL or EJB-QL).',
+		URL:'http://wiki.eclipse.org/Teneo#teneo',
+		Logo:'http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg'
+	},
+	{Title:'Model Transaction', 
+		Description:'The transaction component provides a model management layer built on top of EMF for managing EMF resources. It provides API that include extensions to the EditingDomain and related APIs of the EMF.Edit framework, and an internal model of transactions. It consists of two layers: a non-Eclipse core, providing primarily the "transaction model", and an Eclipse workspace integration layer.',
+		URL:'http://eclipse.org/modeling/emf/downloads/?project=transaction',
+		Logo:'http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg'
+	}
+]});
+    document.getElementById("content").innerHTML = html;
+}());
+</script>
+		
+		
+		
+		
+		
+
+	</div>
+	
+	
+	<div id="rightcolumn">
+		<div class="sideitem">
+			<h6>News on Twitter</h6>
+		<a class="twitter-timeline" href="https://twitter.com/hashtag/eclipsemf" data-widget-id="503883842478809088">#eclipsemf Tweets</a>
+<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+		</div>
+	</div>
+</div>
+
+
+
+EOHTML;
+
+
+	# Generate the web page
+	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
diff --git a/textual.php b/textual.php
new file mode 100644
index 0000000..4fe7df8
--- /dev/null
+++ b/textual.php
@@ -0,0 +1,91 @@
+<?php  																														
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	
+if (is_file($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php")) 
+{
+	require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php");
+}
+$App = new App(); $Nav = new Nav(); $Menu = new Menu(); 
+if (class_exists("ProjectInfo"))
+{
+	$projectInfo = new ProjectInfo("modeling");
+	$projectInfo->generate_common_nav( $Nav );
+}		
+include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
+
+	#*****************************************************************************
+	#
+	# index.php
+	#
+	# Author: 		Richard Gronback (with edits by Nick Boldt)
+	# Date:			2006-05-11
+	#
+	# Description: Modeling project homepage
+	#
+	#
+	#****************************************************************************
+	
+	#
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle 		= "Textual Modeling";
+	$pageKeywords	= "modeling, UML, UML2, MDD, MDA, model-driven";
+	$pageAuthor		= "Richard Gronback";
+	
+	# Paste your HTML content between the EOHTML markers!	
+	$html = <<<EOHTML
+
+
+<div id="maincontent">
+	<div id="midcolumn">
+		<h1>$pageTitle</h1>
+		<table>
+		<tr>
+		<td><p>When using models in tools, textual notations of modeling languages are often a great fit for describing behavior or algorithms (e.g., expressions). Textual modeling frameworks allow you to easily define domain-specific languages (DSLs) based on given EMF models. They provide support for creating tooling for these DSLs, including editors with syntax highlighting, auto-completion, etc.</p>
+		</td>
+		<td align="right"><img src="http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg">
+		</td>
+		</table>
+		<div class="container-fluid">
+		<div id="content"></div>
+  </div>
+<script type="text/javascript" src="ejs_production.js"></script>
+	<script>
+(function () {
+	// Render the template using the specified data.
+    var html = new EJS({url: "projects.ejs"}).render({projects: [
+	{Title:'Xtext', 
+		Description:'Xtext is a framework for development of external textual DSLs. Just describe your very own DSL using Xtexts simple EBNF grammar language and the generator will create a parser, an AST-meta model (implemented in EMF) as well as a full-featured Eclipse Text Editor from that. The Framework integrates with technology from Eclipse Modeling such as EMF, GMF, M2T and parts of EMFT. Development with Xtext is optimized for short turn-arounds, so that adding new features to an existing DSL can be done in seconds. Still with the new version more sophisticated programming languages can be implemented.',
+		URL:'http://eclipse.org/Xtext',
+		Logo:'http://wiki.eclipse.org/images/thumb/d/db/Xtext_logo.png/450px-Xtext_logo.png'
+	}
+]});
+    document.getElementById("content").innerHTML = html;
+}());
+</script>
+		
+		
+		
+		
+		
+
+	</div>
+	
+	
+	<div id="rightcolumn">
+		<div class="sideitem">
+			<h6>News on Twitter</h6>
+		<a class="twitter-timeline" href="https://twitter.com/hashtag/eclipsemf" data-widget-id="503883842478809088">#eclipsemf Tweets</a>
+<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+		</div>
+	</div>
+</div>
+
+
+
+EOHTML;
+
+
+	# Generate the web page
+	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
diff --git a/tools.php b/tools.php
new file mode 100644
index 0000000..72c7ecd
--- /dev/null
+++ b/tools.php
@@ -0,0 +1,132 @@
+<?php  																														
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	
+if (is_file($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php")) 
+{
+	require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php");
+}
+$App = new App(); $Nav = new Nav(); $Menu = new Menu(); 
+if (class_exists("ProjectInfo"))
+{
+	$projectInfo = new ProjectInfo("modeling");
+	$projectInfo->generate_common_nav( $Nav );
+}		
+include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
+
+	#*****************************************************************************
+	#
+	# index.php
+	#
+	# Author: 		Richard Gronback (with edits by Nick Boldt)
+	# Date:			2006-05-11
+	#
+	# Description: Modeling project homepage
+	#
+	#
+	#****************************************************************************
+	
+	#
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle 		= "Modeling Tools";
+	$pageKeywords	= "modeling, UML, UML2, MDD, MDA, model-driven";
+	$pageAuthor		= "Richard Gronback";
+	
+	# Paste your HTML content between the EOHTML markers!	
+	$html = <<<EOHTML
+
+
+<div id="maincontent">
+	<div id="midcolumn">
+		<h1>$pageTitle</h1>
+		<table>
+		<tr>
+		<td><p><a href="/emf/">EMF (Core)</a> and many related frameworks are designed to support the creation of applications and tools based on a given data model. However, there are also ready-to-use tools based on those technologies targeted to end-users rather than to framework users. The following tools cover a variety of use cases, including UML Modeling and languages for embedded development, and support the creation and editing of  EMF models.</p>
+		</td>
+		<td align="right"><img src="http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg">
+		</td>
+		</table>
+		<div class="container-fluid">
+		<div id="content"></div>
+  </div>
+<script type="text/javascript" src="ejs_production.js"></script>
+	<script>
+(function () {
+	// Render the template using the specified data.
+    var html = new EJS({url: "projects.ejs"}).render({projects: [
+	{Title:'Business Process Metamodel and Notation', 
+		Description:'BPMN2 is an EMF-based implementation of the BPMN 2.x metamodel for the Eclipse platform.',
+		URL:'http://wiki.eclipse.org/MDT-BPMN2',
+		Logo:'http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg'
+	},
+	{Title:'eTrice', 
+		Description:'eTrice provides an implementation of the ROOM modeling language together with editors, code generator for Java, C++ and C code and exemplary target middleware.',
+		URL:'http://www.eclipse.org/etrice/',
+		Logo:'http://projects.eclipse.org/sites/default/files/eTRICE-logo_200x200.jpg'
+	},
+	{Title:'MoDisco', 
+		Description:'provides an extensible framework to develop model-driven tools to support use-cases of existing software modernization.',
+		URL:'http://www.eclipse.org/MoDisco/',
+		Logo:'http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg'
+	},
+	{Title:'Object Constraint Language (OCL)', 
+		Description:'OCL defines APIs for OCL expression syntax for implementing queries and constraints.',
+		URL:'http://www.eclipse.org/modeling/mdt/?project=ocl',
+		Logo:'http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg'
+	},
+	{Title:'Papyrus', 
+		Description:'Papyrus provides an integrated and user-consumable environment for editing any kind of EMF model and particularly supporting UML and related modeling languages such as SysML and MARTE.',
+		URL:'http://www.eclipse.org/etrice/',
+		Logo:'http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg'
+	},
+	{Title:'Sphinx', 
+		Description:'provides an extensible platform that eases the creation of integrated modeling tool environments supporting individual or multiple modeling languages (which can be UML-based or native DSLs) and has a particular focus on industrial strength and interoperability.',
+		URL:'http://www.eclipse.org/sphinx/',
+		Logo:'http://www.eclipse.org/sphinx/images/sphinx_logo_300.png'
+	},
+	{Title:'Unified Modeling Language 2.x', 
+		Description:'(UML2) is an EMF-based implementation of the UML 2.x metamodel for the Eclipse platform.',
+		URL:'http://www.eclipse.org/modeling/mdt/?project=uml2',
+		Logo:'http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg'
+	},
+	{Title:'UML 2 Tools', 
+		Description:'UML 2 Tools is a set of GMF-based editors for viewing and editing UML models.',
+		URL:'http://www.eclipse.org/modeling/mdt/?project=uml2tools',
+		Logo:'http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg'
+	},
+	{Title:'XML Schema Definition (XSD)', 
+		Description:'(XSD) is a reference library that provides an API for use with any code that examines, creates or modifies W3C XML Schema.',
+		URL:'http://www.eclipse.org/modeling/mdt/?project=xsd',
+		Logo:'http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg'
+	}
+	
+]});
+    document.getElementById("content").innerHTML = html;
+}());
+</script>
+		
+		
+		
+		
+		
+
+	</div>
+	
+	
+	<div id="rightcolumn">
+		<div class="sideitem">
+			<h6>News on Twitter</h6>
+		<a class="twitter-timeline" href="https://twitter.com/hashtag/eclipsemf" data-widget-id="503883842478809088">#eclipsemf Tweets</a>
+<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+		</div>
+	</div>
+</div>
+
+
+
+EOHTML;
+
+
+	# Generate the web page
+	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
diff --git a/transformation.php b/transformation.php
new file mode 100644
index 0000000..66e39ff
--- /dev/null
+++ b/transformation.php
@@ -0,0 +1,106 @@
+<?php  																														
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	
+if (is_file($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php")) 
+{
+	require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php");
+}
+$App = new App(); $Nav = new Nav(); $Menu = new Menu(); 
+if (class_exists("ProjectInfo"))
+{
+	$projectInfo = new ProjectInfo("modeling");
+	$projectInfo->generate_common_nav( $Nav );
+}		
+include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
+
+	#*****************************************************************************
+	#
+	# index.php
+	#
+	# Author: 		Richard Gronback (with edits by Nick Boldt)
+	# Date:			2006-05-11
+	#
+	# Description: Modeling project homepage
+	#
+	#
+	#****************************************************************************
+	
+	#
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle 		= "Model Transformation";
+	$pageKeywords	= "modeling, UML, UML2, MDD, MDA, model-driven";
+	$pageAuthor		= "Richard Gronback";
+	
+	# Paste your HTML content between the EOHTML markers!	
+	$html = <<<EOHTML
+
+
+<div id="maincontent">
+	<div id="midcolumn">
+		<h1>$pageTitle</h1>
+		<table>
+		<tr>
+		<td><p>In several scenarios, instances of domain models in EMF need to be transformed into other models or into a textual representation. Therefore, there are dedicated  frameworks and tools that allow you to develop <b>model-to-model transformations</b> on the one hand and, on the other hand, <b>model-to-text transformations</b>. With <b>model-to-model transformation</b< data/model instances, conforming to one EMF Model can be transformed to data/model instances conforming to another EMF Model. This is useful for data import/export and data exchange or for deriving data from existing data for use in a different context. The following list contains several frameworks supporting this use case for EMF. With <b>model-to-text transformations</b>, models can be transformed into a textual representation, e.g., source code of a specific language. In EMF, a number of frameworks is available to support this use case</p>
+		</td>
+		<td align="right"><img src="http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg">
+		</td>
+		</table>
+		<div class="container-fluid">
+		<div id="content"></div>
+  </div>
+<script type="text/javascript" src="ejs_production.js"></script>
+	<script>
+(function () {
+	// Render the template using the specified data.
+    var html = new EJS({url: "projects.ejs"}).render({projects: [
+	{Title:'Acceleo', 
+		Description:'Acceleo is a pragmatic implementation of the Object Management Group (OMG) MOF Model to Text Language (MTL) standard. You do not need to be an expert to start using the plug-ins and create your first code generator : using the provided example projects and the powerful completion feature of the Acceleo editor, it is very easy to get started and understand the basic principles.',
+		URL:'http://www.eclipse.org/acceleo/',
+		Logo:'http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg'
+	},
+	{Title:'ATL', 
+		Description:'ATL (ATL Transformation Language) is a model transformation language and toolkit. In the field of Model-Driven Engineering (MDE), ATL provides ways to produce a set of target models from a set of source models.',
+		URL:'http://eclipse.org/atl/',
+		Logo:'http://projects.eclipse.org/sites/default/files/logoATL-transparent.png'
+	},
+	{Title:'JET', 
+		Description:'JET is typically used in the implementation of a "code generator". A code-generator is an important component of Model Driven Development (MDD). The goal of MDD is to describe a software system using abstract models (such as EMF/ECORE models or UML models), and then refine and transform these models into code. Although is possible to create abstract models, and manually transform them into code, the real power of MDD comes from automating this process. Such transformations accelerate the MDD process, and result in better code quality. The transformations can capture the "best practices" of experts, and can ensure that a project consistently employes these practices.',
+		URL:'http://www.eclipse.org/modeling/m2t/?project=jet',
+		Logo:'http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg'
+	},
+	{Title:'Xpand', 
+		Description:'Xpand is a statically-typed template language featuring: polymorphic template invocation, aspect oriented programming, functional extensions, a flexible type system abstraction, model transformation, model validation and much more',
+		URL:'http://wiki.eclipse.org/Xpand',
+		Logo:'http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg'
+	}
+]});
+    document.getElementById("content").innerHTML = html;
+}());
+</script>
+		
+		
+		
+		
+		
+
+	</div>
+	
+	
+	<div id="rightcolumn">
+		<div class="sideitem">
+			<h6>News on Twitter</h6>
+		<a class="twitter-timeline" href="https://twitter.com/hashtag/eclipsemf" data-widget-id="503883842478809088">#eclipsemf Tweets</a>
+<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+		</div>
+	</div>
+</div>
+
+
+
+EOHTML;
+
+
+	# Generate the web page
+	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
diff --git a/ui.php b/ui.php
new file mode 100644
index 0000000..537b0f4
--- /dev/null
+++ b/ui.php
@@ -0,0 +1,101 @@
+<?php  																														
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	
+if (is_file($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php")) 
+{
+	require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php");
+}
+$App = new App(); $Nav = new Nav(); $Menu = new Menu(); 
+if (class_exists("ProjectInfo"))
+{
+	$projectInfo = new ProjectInfo("modeling");
+	$projectInfo->generate_common_nav( $Nav );
+}		
+include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
+
+	#*****************************************************************************
+	#
+	# index.php
+	#
+	# Author: 		Richard Gronback (with edits by Nick Boldt)
+	# Date:			2006-05-11
+	#
+	# Description: Modeling project homepage
+	#
+	#
+	#****************************************************************************
+	
+	#
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle 		= "User Interface";
+	$pageKeywords	= "emf, UI, forms, modeling, UML, UML2, MDD, MDA, model-driven";
+	$pageAuthor		= "Richard Gronback";
+	
+	# Paste your HTML content between the EOHTML markers!	
+	$html = <<<EOHTML
+
+
+<div id="maincontent">
+	<div id="midcolumn">
+		<h1>$pageTitle</h1>
+		<table>
+		<tr>
+		<td><p>In an application, no matter whether it is a tool or a business application, end-users need to be enabled to conveniently display and modify instances of the domain model. Typical representations of the data are forms or property sheets. The following technologies provide support to efficiently implement user interfaces for EMF domain models in your project. If you prefer a graphical visualization, please take a look at the graphical modeling frameworks.</p>
+		</td>
+		<td align="right"><img src="http://www.eclipse.org/modeling/images/modeling_pos_logo_fc_med.jpg">
+		</td>
+		</table>
+		<div class="container-fluid">
+		<div id="content"></div>
+  </div>
+<script type="text/javascript" src="ejs_production.js"></script>
+	<script>
+(function () {
+	// Render the template using the specified data.
+    var html = new EJS({url: "projects.ejs"}).render({projects: [
+	{Title:'EMF Client Platform', 
+		Description:'The EMF Client Platform is a framework for building EMF-based client applications. The goal is to provide reusable, adaptable and extensible UI components to develop applications based on a given EMF model. All components can be used stand-alone and be embedded into your own application. To get started, ECP provides a demo application, which integrates all provided components. This demo application allows you to get started by only providing your EMF model. ',
+		URL:'http://eclipse.org/ecp',
+		Logo:'http://eclipse.org/ecp/public/images/ecp.png'
+	},
+	{Title:'EMF Forms', 
+		Description:'EMF Forms provides a new way of developing form-based UIs. Instead of manually coding form-based layouts, it allows you to describe the UI with a simple model instead of with code. The approach allows you to more efficiently produce and iteratively refine form-based UIs that conform to a uniform look and feel. EMF Forms also lowers the technical entry barrier to creating form-based UIs. The UI description is interpreted by a rendering engine and allows you to switch between the UI technology stack to Swing, SWT, JavaFX or Web just by replacing the renderer. EMF Forms is a new subcomponent of the EMF Client Platform.',
+		URL:'http://eclipse.org/ecp/emfforms',
+		Logo:'http://eclipse.org/ecp/emfforms/public/images/logo.png'
+	},
+	{Title:'Extended Editing Framework', 
+		Description:'The Extended Editing Framework is a presentation framework for the Eclipse Modeling Framework. It allows user to create rich user interfaces to edit EMF models. ',
+		URL:'http://eclipse.org/eef/',
+		Logo:'http://projects.eclipse.org/sites/default/files/eefv2-resized.png'
+	}
+]});
+    document.getElementById("content").innerHTML = html;
+}());
+</script>
+		
+		
+		
+		
+		
+
+	</div>
+	
+	
+	<div id="rightcolumn">
+		<div class="sideitem">
+			<h6>News on Twitter</h6>
+		<a class="twitter-timeline" href="https://twitter.com/hashtag/eclipsemf" data-widget-id="503883842478809088">#eclipsemf Tweets</a>
+<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+		</div>
+	</div>
+</div>
+
+
+
+EOHTML;
+
+
+	# Generate the web page
+	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
