diff --git a/bundles/org.eclipse.e4.tools/.jetproperties b/bundles/org.eclipse.e4.tools/.jetproperties
deleted file mode 100644
index 2907c83..0000000
--- a/bundles/org.eclipse.e4.tools/.jetproperties
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<jet-settings>
-	<template-container>templates</template-container>	<source-container>src</source-container>
-</jet-settings>
diff --git a/bundles/org.eclipse.e4.tools/.project b/bundles/org.eclipse.e4.tools/.project
index 62db1d2..f67161b 100644
--- a/bundles/org.eclipse.e4.tools/.project
+++ b/bundles/org.eclipse.e4.tools/.project
@@ -6,11 +6,6 @@
 	</projects>
 	<buildSpec>
 		<buildCommand>
-			<name>org.eclipse.emf.codegen.JETBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
 			<name>org.eclipse.jdt.core.javabuilder</name>
 			<arguments>
 			</arguments>
@@ -27,7 +22,6 @@
 		</buildCommand>
 	</buildSpec>
 	<natures>
-		<nature>org.eclipse.emf.codegen.jet.IJETNature</nature>
 		<nature>org.eclipse.pde.PluginNature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 	</natures>
diff --git a/bundles/org.eclipse.e4.tools/templates/addon.txtjet b/bundles/org.eclipse.e4.tools/templates/addon.txtjet
deleted file mode 100644
index 7404b0a..0000000
--- a/bundles/org.eclipse.e4.tools/templates/addon.txtjet
+++ /dev/null
@@ -1,25 +0,0 @@
-<%@ jet package="org.eclipse.e4.internal.tools.wizards.classes.templates" class="AddonTemplate" imports="org.eclipse.e4.internal.tools.wizards.classes.AbstractNewClassPage.JavaClass" %>
-<% JavaClass domainClass = (JavaClass)argument; %> 
-<% if( domainClass.getPackageFragment() != null && domainClass.getPackageFragment().getElementName().trim().length() > 0 ) { %>
-package <%= domainClass.getPackageFragment().getElementName() %>;
-<% } %>
-
-import javax.inject.Inject;
-
-import org.eclipse.e4.core.di.annotations.Optional;
-import org.eclipse.e4.core.di.extensions.EventTopic;
-import org.eclipse.e4.ui.workbench.UIEvents;
-import org.osgi.service.event.Event;
-
-import org.eclipse.e4.core.services.events.IEventBroker;
-
-public class <%= domainClass.getName() %> {
-
-	@Inject
-	@Optional
-	public void applicationStarted(
-			@EventTopic(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE) Event event) {
-		// TODO Modify the UIEvents.UILifeCycle.APP_STARTUP_COMPLETE EventTopic to a certain event you want to listen to.
-	}
-
-}
diff --git a/bundles/org.eclipse.e4.tools/templates/dynamicMenuContribution.txtjet b/bundles/org.eclipse.e4.tools/templates/dynamicMenuContribution.txtjet
deleted file mode 100644
index 3567f49..0000000
--- a/bundles/org.eclipse.e4.tools/templates/dynamicMenuContribution.txtjet
+++ /dev/null
@@ -1,28 +0,0 @@
-<%@ jet package="org.eclipse.e4.internal.tools.wizards.classes.templates" class="DynamicMenuContributionTemplate" imports="org.eclipse.e4.internal.tools.wizards.classes.NewDynamicMenuContributionClassWizard.DynamicMenuContributionClass" %>
-<% DynamicMenuContributionClass domainClass = (DynamicMenuContributionClass)argument; %> 
-<% if( domainClass.getPackageFragment() != null && domainClass.getPackageFragment().getElementName().trim().length() > 0 ) { %>
-package <%= domainClass.getPackageFragment().getElementName() %>;
-<% } %>
-
-import java.util.List;
-
-import org.eclipse.e4.ui.di.AboutToShow;
-<% if( domainClass.isUseAboutToHide() )  { %>
-import org.eclipse.e4.ui.di.AboutToHide;
-<% } %>
-
-import org.eclipse.e4.ui.model.application.ui.menu.MMenuElement;
-
-public class <%= domainClass.getName() %> {
-	@AboutToShow
-	public void <%= domainClass.getAboutToShowMethodName() %>(List<MMenuElement> items) {
-		
-	}
-	<% if( domainClass.isUseAboutToHide() )  { %>
-	
-	@AboutToHide
-	public void <%= domainClass.getAboutToHideMethodName() %>(List<MMenuElement> items) {
-		
-	}
-	<% } %>	
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools/templates/handler.txtjet b/bundles/org.eclipse.e4.tools/templates/handler.txtjet
deleted file mode 100644
index cd2f820..0000000
--- a/bundles/org.eclipse.e4.tools/templates/handler.txtjet
+++ /dev/null
@@ -1,25 +0,0 @@
-<%@ jet package="org.eclipse.e4.internal.tools.wizards.classes.templates" class="HandlerTemplate" imports="org.eclipse.e4.internal.tools.wizards.classes.NewHandlerClassWizard.HandlerClass" %>
-<% HandlerClass domainClass = (HandlerClass)argument; %> 
-<% if( domainClass.getPackageFragment() != null && domainClass.getPackageFragment().getElementName().trim().length() > 0 ) { %>
-package <%= domainClass.getPackageFragment().getElementName() %>;
-<% } %>
-
-import org.eclipse.e4.core.di.annotations.Execute;
-<% if( domainClass.isUseCanExecute() )  { %>
-import org.eclipse.e4.core.di.annotations.CanExecute;
-<% } %>
-
-public class <%= domainClass.getName() %> {
-	@Execute
-	public void <%= domainClass.getExecuteMethodName() %>() {
-		
-	}
-	<% if( domainClass.isUseCanExecute() )  { %>
-	
-	@CanExecute
-	public boolean <%= domainClass.getCanExecuteMethodName() %>() {
-		
-		return true;
-	}
-	<% } %>	
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools/templates/part.txtjet b/bundles/org.eclipse.e4.tools/templates/part.txtjet
deleted file mode 100644
index a51b59d..0000000
--- a/bundles/org.eclipse.e4.tools/templates/part.txtjet
+++ /dev/null
@@ -1,51 +0,0 @@
-<%@ jet package="org.eclipse.e4.internal.tools.wizards.classes.templates" class="PartTemplate" imports="org.eclipse.e4.internal.tools.wizards.classes.NewPartClassWizard.PartClass" %>
-<% PartClass domainClass = (PartClass)argument; %> 
-<% if( domainClass.getPackageFragment() != null && domainClass.getPackageFragment().getElementName().trim().length() > 0 ) { %>
-package <%= domainClass.getPackageFragment().getElementName() %>;
-<% } %>
-
-import javax.inject.Inject;
-<% if( domainClass.isUsePostConstruct() ) { %>
-import javax.annotation.PostConstruct;
-import org.eclipse.swt.widgets.Composite;
-<% } %>
-<% if( domainClass.isUsePredestroy() ) { %>
-import javax.annotation.PreDestroy;
-<% } %>
-<% if( domainClass.isUseFocus() ) { %>
-import org.eclipse.e4.ui.di.Focus;
-<% } %>
-<% if( domainClass.isUsePersist() ) { %>
-import org.eclipse.e4.ui.di.Persist;
-<% } %>
-
-public class <%= domainClass.getName() %> {
-	@Inject
-	public <%= domainClass.getName() %>() {
-		
-	}
-	<% if( domainClass.isUsePostConstruct() ) { %>
-	@PostConstruct
-	public void <%= domainClass.getPostConstructMethodName()  %>(Composite parent) {
-		
-	}
-	<% } %>
-	<% if( domainClass.isUsePredestroy() ) { %>
-	@PreDestroy
-	public void <%= domainClass.getPreDestroyMethodName()  %>() {
-		
-	}
-	<% } %>
-	<% if( domainClass.isUseFocus() ) { %>
-	@Focus
-	public void <%= domainClass.getFocusMethodName() %>() {
-		
-	}
-	<% } %>
-	<% if( domainClass.isUsePersist() ) { %>
-	@Persist
-	public void <%= domainClass.getPersistMethodName() %>() {
-		
-	}
-	<% } %>
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools/templates/toolControl.txtjet b/bundles/org.eclipse.e4.tools/templates/toolControl.txtjet
deleted file mode 100644
index 524631c..0000000
--- a/bundles/org.eclipse.e4.tools/templates/toolControl.txtjet
+++ /dev/null
@@ -1,23 +0,0 @@
-<%@ jet package="org.eclipse.e4.internal.tools.wizards.classes.templates" class="ToolControlTemplate" imports="org.eclipse.e4.internal.tools.wizards.classes.NewToolControlClassWizard.ToolControlClass" %>
-<% ToolControlClass domainClass = (ToolControlClass)argument; %>
-<% if( domainClass.getPackageFragment() != null && domainClass.getPackageFragment().getElementName().trim().length() > 0 ) { %>
-package <%= domainClass.getPackageFragment().getElementName() %>;
-<% } %>
-
-import javax.annotation.PostConstruct;
-<% if( domainClass.isCreateDefaultConstructor() )  { %>
-import javax.inject.Inject;
-<% } %>
-
-public class <%= domainClass.getName() %> {
-	<% if( domainClass.isCreateDefaultConstructor() )  { %>
-	@Inject
-	public <%= domainClass.getName() %>() {
-		
-	}
-	<% } %>
-	@PostConstruct
-	public void <%= domainClass.getCreateGuiMethodName() %>() {
-		
-	}
-}
\ No newline at end of file
