diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/ScheduleTemplateDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/ScheduleTemplateDao.java
index 7a3e59da8d..2dc107d44b 100644
--- a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/ScheduleTemplateDao.java
+++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/ScheduleTemplateDao.java
@@ -8,4 +8,5 @@ import se.su.dsv.scipro.data.dataobjects.User;
 
 public interface ScheduleTemplateDao extends Dao<ScheduleTemplate>{
 	public List<ScheduleTemplate> getScheduleTemplates(final User creator, final Boolean isSysAdminTemplate, final ProjectClass projectClass);
+    public List<ScheduleTemplate> getScheduleTemplatesForModel(final User creator, final Boolean isSysAdminTemplate, final ProjectClass projectClass);
 }
diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/ScheduleTemplateDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/ScheduleTemplateDaoJPAImp.java
index 524c75b34e..da3b998746 100644
--- a/src/main/java/se/su/dsv/scipro/data/dao/jpa/ScheduleTemplateDaoJPAImp.java
+++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/ScheduleTemplateDaoJPAImp.java
@@ -80,4 +80,57 @@ public class ScheduleTemplateDaoJPAImp extends AbstractDaoJPAImp<ScheduleTemplat
 		});
 	}
 
+    @Transactional
+    public List<ScheduleTemplate> getScheduleTemplatesForModel(final User creator, final Boolean isSysAdminTemplate, final ProjectClass projectClass) {
+        return getJpaTemplate().execute(new JpaCallback<List<ScheduleTemplate>>() {
+            public List<ScheduleTemplate> doInJpa(EntityManager em)
+                    throws PersistenceException {
+                String selectClause = "select distinct st ";
+                String fromClause = "from ScheduleTemplate st ";
+                String joinClause = "";
+                List<String> conditions = new ArrayList<String>();
+
+                if(isSysAdminTemplate != null){
+                    conditions.add("st.isSysAdminTemplate = :isSysAdminTemplate ");
+                }
+                if(creator != null){
+                    fromClause += ", User u ";
+                    conditions.add("st.creator = :user");
+                }
+                if(projectClass != null){
+                    conditions.add("st.projectClass = :projectClass ");
+                }
+                String cond = "";
+                for(String c : conditions){
+                    if(conditions.indexOf(c) == 0)
+                        cond += "where " + c;
+                    else
+                        cond += "and " + c;
+                }
+
+                String q = selectClause + fromClause + joinClause + cond;
+
+                q += " order by st.templateName asc";
+
+                TypedQuery<ScheduleTemplate> query = em.createQuery(q, ScheduleTemplate.class);
+
+                if(isSysAdminTemplate != null){
+                    query.setParameter("isSysAdminTemplate", isSysAdminTemplate);
+                }
+                if(creator != null){
+                    query.setParameter("user", creator);
+                }
+                if(projectClass != null){
+                    query.setParameter("projectClass", projectClass);
+                }
+
+                try {
+                    return query.getResultList();
+                } catch (NoResultException e) {
+                    return new ArrayList<ScheduleTemplate>();
+                }
+            }
+        });
+    }
+
 }
diff --git a/src/main/java/se/su/dsv/scipro/schedule/templates/panels/ScheduleTemplateFilterPanel.java b/src/main/java/se/su/dsv/scipro/schedule/templates/panels/ScheduleTemplateFilterPanel.java
index 13b7c0552f..1f86a11a3c 100644
--- a/src/main/java/se/su/dsv/scipro/schedule/templates/panels/ScheduleTemplateFilterPanel.java
+++ b/src/main/java/se/su/dsv/scipro/schedule/templates/panels/ScheduleTemplateFilterPanel.java
@@ -1,9 +1,7 @@
 package se.su.dsv.scipro.schedule.templates.panels;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
-
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.extensions.ajax.markup.html.autocomplete.DefaultCssAutocompleteTextField;
@@ -12,24 +10,19 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.IModel;
+
 import org.apache.wicket.model.Model;
 import org.apache.wicket.spring.injection.annot.SpringBean;
-import org.wicketstuff.objectautocomplete.AutoCompletionChoicesProvider;
-import org.wicketstuff.objectautocomplete.ObjectAutoCompleteBuilder;
-import org.wicketstuff.objectautocomplete.ObjectAutoCompleteField;
-import org.wicketstuff.objectautocomplete.ObjectAutoCompleteRenderer;
-import org.wicketstuff.objectautocomplete.ObjectAutoCompleteSelectionChangeListener;
-
 import se.su.dsv.scipro.SciProSession;
 import se.su.dsv.scipro.data.dao.interfaces.UserDao;
-import se.su.dsv.scipro.data.dataobjects.User;
-import se.su.dsv.scipro.icons.ImageIcon;
+import se.su.dsv.scipro.data.dataobjects.Employee;
+
+import se.su.dsv.scipro.reusable.EmployeeAutoComplete;
 import se.su.dsv.scipro.schedule.templates.panels.models.ScheduleTemplatesModel;
 import se.su.dsv.scipro.security.auth.roles.Roles;
 import se.su.dsv.scipro.util.SelectOption;
 
-import com.mysql.jdbc.StringUtils;
+
 
 public abstract class ScheduleTemplateFilterPanel extends Panel {
 	
@@ -54,7 +47,8 @@ public abstract class ScheduleTemplateFilterPanel extends Panel {
 	public abstract void onFilterChanged(AjaxRequestTarget target);
 	
 	@SuppressWarnings("unchecked")
-	public ScheduleTemplateFilterPanel(String id, final ScheduleTemplatesModel templateModel, final boolean showSysAdminOptions){
+	public
+    ScheduleTemplateFilterPanel(String id, final ScheduleTemplatesModel templateModel, final boolean showSysAdminOptions){
 		super(id);
 				
 
@@ -147,68 +141,22 @@ public abstract class ScheduleTemplateFilterPanel extends Panel {
 		});
 		sysAdminOptionsContainer.add(sysAdminDD);
 		add(sysAdminOptionsContainer);
-		
-		final AutoCompletionChoicesProvider<User> provider = new AutoCompletionChoicesProvider<User>() {
 
-			private static final long serialVersionUID = 1L;
+        EmployeeAutoComplete sField = new EmployeeAutoComplete("searchCreator") {
 
-			public Iterator<User> getChoices(String input) {
-				List<User> result = new ArrayList<User>();
-				if(input.length() > 2){
-					//TODO: potentially change so that the relevant users are collected page creation
-					for(User u : userDao.findUserQuery(input, false, true, true, 10)) {
-						String fName = u.getFirstName();
-						String lName = u.getLastName();
-	
-						if (StringUtils.startsWithIgnoreCase(fName, input)
-								|| StringUtils.startsWithIgnoreCase(lName,
-										input)) {
-							result.add(u);
-						}
-				}
-				}
-				return result.iterator();
-			}
-		};
+            private static final long serialVersionUID = 7817534289202704322L;
 
-		final ObjectAutoCompleteRenderer<User> renderer = new ObjectAutoCompleteRenderer<User>() {
+            @Override
+            protected void action(AjaxRequestTarget pTarget, Employee newSelection) {
+                templateModel.setCreator(newSelection.getUser());
+                onFilterChanged(pTarget);
+            }
+        };
 
-			private static final long serialVersionUID = 1L;
 
-			protected String getIdValue(User u) {
-				return u.getId().toString();
-			}
-
-			protected String getTextValue(User u) {
-				return u.getFirstName() + " " + u.getLastName();
-			}
-		};
-
-		final ObjectAutoCompleteBuilder<User, Long> builder = new ObjectAutoCompleteBuilder<User, Long>(
-				provider);
-		
-		builder.updateOnSelectionChange(new ObjectAutoCompleteSelectionChangeListener<Long>(){
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void selectionChanged(AjaxRequestTarget pTarget, IModel<Long> pModel) {
-				//TODO: Bug, the loading div does not disappear...
-				Long id = pModel.getObject();	
-				if(id != null || (id == null && templateModel.getCreator() != null)){
-					templateModel.setCreatorId(id);
-					onFilterChanged(pTarget);
-				}
-			}
-		});
-		builder.idType(Long.class);
-		builder.autoCompleteRenderer(renderer);
-		builder.searchLinkImage(ImageIcon.getImage(ImageIcon.ICON_DELETE, ""));
-		final ObjectAutoCompleteField<User, Long> sField = builder.build(
-				"searchCreator");
-		
         add(CSSPackageResource.getHeaderContribution(DefaultCssAutocompleteTextField.class,
 			"DefaultCssAutocompleteTextField.css"));
-		
+
 		add(sField);
 	}
 }
diff --git a/src/main/java/se/su/dsv/scipro/schedule/templates/panels/models/ScheduleTemplatesModel.java b/src/main/java/se/su/dsv/scipro/schedule/templates/panels/models/ScheduleTemplatesModel.java
index ad4c586c33..15d9450e25 100644
--- a/src/main/java/se/su/dsv/scipro/schedule/templates/panels/models/ScheduleTemplatesModel.java
+++ b/src/main/java/se/su/dsv/scipro/schedule/templates/panels/models/ScheduleTemplatesModel.java
@@ -34,12 +34,13 @@ public class ScheduleTemplatesModel extends LoadableDetachableModel<List<Schedul
 		InjectorHolder.getInjector().inject(this);
 	}
 	
-	@Override
-	protected List<ScheduleTemplate> load() {
-		return scheduleTemplateDao.getScheduleTemplates(creator, onlySysAdminTemplates, projectClass);
-	}
-	
-	public void reloadModel(){
+
+    @Override
+    protected List<ScheduleTemplate> load() {
+        return scheduleTemplateDao.getScheduleTemplatesForModel(creator, onlySysAdminTemplates, projectClass);
+    }
+
+    public void reloadModel(){
 		setObject(load());
 	}