added client loader

Jonathan Bell [2011-10-11 04:19:12]
added client loader
Filename
halo-EJB/ejbModule/edu/columbia/cs/psl/halo/server/AdminService.java
halo-EJB/ejbModule/edu/columbia/cs/psl/halo/server/UserService.java
halo-se-admin/META-INF/MANIFEST.MF
halo-se-admin/MyMailServer.txt
halo-se-admin/lib/halo-common.jar
halo-se-admin/src/edu/columbia/cs/psl/halo/admin/UserLoader.java
halo-se-admin/students.csv
halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AddUser.java
halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AddUserResponse.java
halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AdminService.java
halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AdminServiceService.java
halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/CourseServiceService.java
halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/LogServiceService.java
halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/UserServiceService.java
halo-se-feature/feature.xml
halo-se/src/edu/columbia/cs/psl/halo/client/views/QuestHUD.java
halo-update-site/artifacts.jar
halo-update-site/content.jar
halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.0.0.jar
halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.0.1.jar
halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.0.2.jar
halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.0.3.jar
halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.0.jar
halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.1.jar
halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.2.jar
halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.3.jar
halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.4.jar
halo-update-site/install.html
halo-update-site/next.jpg
halo-update-site/plugins/edu.columbia.cs.psl.halo.client_1.0.0.201110101523.jar
halo-update-site/plugins/edu.columbia.cs.psl.halo.client_1.0.0.201110101716.jar
halo-update-site/plugins/edu.columbia.cs.psl.halo.client_1.0.0.201110101719.jar
halo-update-site/plugins/edu.columbia.cs.psl.halo.client_1.0.0.201110102242.jar
halo-update-site/select-install.png
halo-update-site/site.xml
halo-update-site/untitled.jpg
halo-update-site/update site.jpg
diff --git a/halo-EJB/ejbModule/edu/columbia/cs/psl/halo/server/AdminService.java b/halo-EJB/ejbModule/edu/columbia/cs/psl/halo/server/AdminService.java
index 4f6891d..3fe7399 100644
--- a/halo-EJB/ejbModule/edu/columbia/cs/psl/halo/server/AdminService.java
+++ b/halo-EJB/ejbModule/edu/columbia/cs/psl/halo/server/AdminService.java
@@ -1,5 +1,6 @@
 package edu.columbia.cs.psl.halo.server;

+import java.util.Date;
 import java.util.List;

 import javax.annotation.security.RolesAllowed;
@@ -10,7 +11,9 @@ import javax.persistence.criteria.CriteriaQuery;
 import edu.columbia.cs.psl.halo.entity.Assignment;
 import edu.columbia.cs.psl.halo.entity.Course;
 import edu.columbia.cs.psl.halo.entity.Enrollment;
+import edu.columbia.cs.psl.halo.entity.EnrollmentType;
 import edu.columbia.cs.psl.halo.entity.Quest;
+import edu.columbia.cs.psl.halo.entity.QuestProgress;
 import edu.columbia.cs.psl.halo.entity.Task;
 import edu.columbia.cs.psl.halo.entity.User;

@@ -19,6 +22,40 @@ import edu.columbia.cs.psl.halo.entity.User;
 @RolesAllowed("ADMIN")
 public class AdminService extends AbstractFacade<User> {

+	public void addUser(String first, String last, String email, String password)
+	{
+		Course c = getEntityManager().find(Course.class, 1);
+
+		User u = new User();
+		u.setFirstName(first);
+		u.setLastName(last);
+		u.setEmail(email);
+		u.setPassword(UserService.getEncryptedPassword(password));
+		u.setXp(0);
+		getEntityManager().persist(u);
+
+		Enrollment e = new Enrollment();
+		e.setUser(u);
+		e.setCourse(c);
+		e.setType(EnrollmentType.STUDENT);
+
+		getEntityManager().persist(e);
+
+		javax.persistence.criteria.CriteriaQuery<Task> cq = getEntityManager().getCriteriaBuilder().createQuery(Task.class);
+        cq.select(cq.from(Task.class));
+        for(Task t : getEntityManager().createQuery(cq).getResultList())
+		{
+			QuestProgress p = new QuestProgress();
+			p.setUser(u);
+			p.setTask(t);
+			p.setQuest(t.getQuest());
+			p.setUpdated(new Date());
+			p.setCompleted(false);
+			getEntityManager().persist(p);
+
+
+		}
+	}
 	@SuppressWarnings({ "rawtypes", "unchecked" })
 	public List<Course> getCourses()
 	{
diff --git a/halo-EJB/ejbModule/edu/columbia/cs/psl/halo/server/UserService.java b/halo-EJB/ejbModule/edu/columbia/cs/psl/halo/server/UserService.java
index ff244eb..b79f35f 100644
--- a/halo-EJB/ejbModule/edu/columbia/cs/psl/halo/server/UserService.java
+++ b/halo-EJB/ejbModule/edu/columbia/cs/psl/halo/server/UserService.java
@@ -84,13 +84,29 @@ public class UserService extends AbstractFacade<User> implements UserServiceRemo
     	getEntityManager().merge(qp);
     	String ret = handleResults(t.getResultsIn());
     	User me = getUser();
-    	me.setXp(me.getXp() + t.getQuest().getExperiencePoints());
-    	if(t.getQuest().getExperiencePoints() > 0)
-    		ret += "You've received " + t.getQuest().getExperiencePoints() + " XP\n";
-    	if(me.getLevel().getXpMax() <= me.getXp())
+    	List<QuestProgress> done = me.getProgress();
+    	boolean allDone = true;
+    	for(Task tz : t.getQuest().getTasks())
     	{
-    		me.setLevel(getLevel(me.getLevel().getLevel() + 1));
-    		ret += "You've reached level " + me.getLevel().getLevel()+", hooray!\n";
+    		boolean found = false;
+    		for(QuestProgress qpz : done)
+    		{
+    			if(qpz.getTask().getId()==tz.getId())
+    				found = true;
+    		}
+    		if(!found)
+    			allDone = false;
+    	}
+    	if(allDone)
+    	{
+	    	me.setXp(me.getXp() + t.getQuest().getExperiencePoints());
+	    	if(t.getQuest().getExperiencePoints() > 0)
+	    		ret += "You've received " + t.getQuest().getExperiencePoints() + " XP\n";
+	    	if(me.getLevel().getXpMax() <= me.getXp())
+	    	{
+	    		me.setLevel(getLevel(me.getLevel().getLevel() + 1));
+	    		ret += "You've reached level " + me.getLevel().getLevel()+", hooray!\n";
+	    	}
     	}
     	getEntityManager().merge(me);

@@ -321,7 +337,7 @@ public class UserService extends AbstractFacade<User> implements UserServiceRemo
     }
     private final static String HEX_DIGITS = "0123456789abcdef";

-	private String getEncryptedPassword(String plaintext) {
+	public static String getEncryptedPassword(String plaintext) {

 		java.security.MessageDigest d =null;
 				try {
@@ -461,7 +477,16 @@ public class UserService extends AbstractFacade<User> implements UserServiceRemo
 	@WebMethod
 	public String getLeadersStr()
 	{
-		return "(By XP points; top 10)\n1. Jon Bell (300) \n2. Swapneel Sheth (200) \n3. Nipun Arora (150)";
+		String r = "(By XP points; top 10)\n";
+		Query q = getEntityManager().createNativeQuery("SELECT * from h_user order by XP DESC, ID ASC LIMIT 10",User.class);
+		List<User> res = q.getResultList();
+		int i = 1;
+		for(User u : res)
+		{
+			r+=i+": " + u.getFirstName() + " " + u.getLastName() + " (" + u.getXp()+")\n";
+			i++;
+		}
+		return r;
 	}
 	public static void reportError(Exception ex, String message)
 	{
diff --git a/halo-se-admin/META-INF/MANIFEST.MF b/halo-se-admin/META-INF/MANIFEST.MF
index bde12ae..02d0e3d 100644
--- a/halo-se-admin/META-INF/MANIFEST.MF
+++ b/halo-se-admin/META-INF/MANIFEST.MF
@@ -14,7 +14,8 @@ Require-Bundle: org.eclipse.ui,
  javax.xml.soap;bundle-version="1.2.0",
  org.eclipse.swt,
  org.eclipse.jface,
- org.eclipse.ui.workbench
+ org.eclipse.ui.workbench,
+ javax.mail;bundle-version="1.4.0"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ClassPath: .,
diff --git a/halo-se-admin/MyMailServer.txt b/halo-se-admin/MyMailServer.txt
new file mode 100644
index 0000000..3f8c63d
--- /dev/null
+++ b/halo-se-admin/MyMailServer.txt
@@ -0,0 +1,20 @@
+# Configuration file for javax.mail
+# If a value for an item is not provided, then
+# system defaults will be used. These items can
+# also be set in code.
+
+# Host whose mail services will be used
+# (Default value : localhost)
+mail.host=mx.columbia.edu
+
+# Return address to appear on emails
+# (Default value : username@host)
+mail.from=jbell@cs.columbia.edu
+
+# Other possible items include:
+# mail.user=
+# mail.store.protocol=
+# mail.transport.protocol=
+# mail.smtp.host=
+# mail.smtp.user=
+# mail.debug=
\ No newline at end of file
diff --git a/halo-se-admin/lib/halo-common.jar b/halo-se-admin/lib/halo-common.jar
index 0973dc6..98196bb 100644
Binary files a/halo-se-admin/lib/halo-common.jar and b/halo-se-admin/lib/halo-common.jar differ
diff --git a/halo-se-admin/src/edu/columbia/cs/psl/halo/admin/UserLoader.java b/halo-se-admin/src/edu/columbia/cs/psl/halo/admin/UserLoader.java
new file mode 100644
index 0000000..f083519
--- /dev/null
+++ b/halo-se-admin/src/edu/columbia/cs/psl/halo/admin/UserLoader.java
@@ -0,0 +1,108 @@
+package edu.columbia.cs.psl.halo.admin;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+import java.util.Scanner;
+
+import javax.mail.Message;
+import javax.mail.Message.RecipientType;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+
+import edu.columbia.cs.psl.halo.HALOServiceFactory;
+import edu.columbia.cs.psl.halo.server.stubs.AdminService;
+import edu.columbia.cs.psl.halo.server.stubs.AdminServiceService;
+
+public class UserLoader {
+	public static void main(String[] args) throws Exception{
+//		HALOServiceFactory.getInstance().login("jon", "test123");
+		File f = new File("students.csv");
+		Scanner s = new Scanner(f);
+		while(s.hasNextLine())
+		{
+			String l = s.nextLine();
+			String[] a = l.split(",");
+//			HALOServiceFactory.getInstance().getAdminSvc().addUser(a[1],a[0],a[2],a[3]);
+			String msg = "Dear FIRST_N LAST_N,\n"+
+"Please find your login for HALO-SE below, as well as a link to installation instructions. While it is not mandatory that you use HALO to help with your upcoming assignment, we would encourage you to give it a try - it is designed to help you ensure that you fully accomplish the requirements of the assignment and receive full credit.\n\n"+
+
+"Your username is: UNI\n"+
+"Your password is: PASSWORD\n"+
+"(Note that once you login, you can change your password to whatever you like)\n\n"+
+
+"You can find detailed installation instructions here:Êhttp://ase.cs.columbia.edu/halo-update/install.html\n\n"+
+
+"If you have any problems using HALO-SE, please do not hesitate to contact me directly.\n\n"+
+
+"Best,\nJon Bell";
+			msg  = msg.replace("FIRST_N", a[1]).replace("LAST_N", a[0]).replace("UNI", a[2]).replace("PASSWORD", a[3]);
+//			System.out.println(msg);
+			sendEmail("jbell@cs.columbia.edu", a[2]+"@columbia.edu", "COMS 3134: HALO Installation Info & Login Credentials", msg);
+//			System.exit(0);
+		}
+	}
+	  private static Properties fMailServerConfig = new Properties();
+
+	  static {
+		    fetchConfig();
+		  }
+
+		  /**
+		  * Open a specific text file containing mail server
+		  * parameters, and populate a corresponding Properties object.
+		  */
+		  private static void fetchConfig() {
+		    InputStream input = null;
+		    try {
+		      //If possible, one should try to avoid hard-coding a path in this
+		      //manner; in a web application, one should place such a file in
+		      //WEB-INF, and access it using ServletContext.getResourceAsStream.
+		      //Another alternative is Class.getResourceAsStream.
+		      //This file contains the javax.mail config properties mentioned above.
+		      input = new FileInputStream( "/Users/jon/Documents/PSL/Projects/halo-eclipse/halo-se-admin/MyMailServer.txt" );
+		      fMailServerConfig.load( input );
+		    }
+		    catch ( IOException ex ){
+		      System.err.println("Cannot open and load mail server properties file.");
+		    }
+		    finally {
+		      try {
+		        if ( input != null ) input.close();
+		      }
+		      catch ( IOException ex ){
+		        System.err.println( "Cannot close mail server properties file." );
+		      }
+		    }
+		  }
+	public static void sendEmail(
+		    String aFromEmailAddr, String aToEmailAddr,
+		    String aSubject, String aBody
+		  ){
+		    //Here, no Authenticator argument is used (it is null).
+		    //Authenticators are used to prompt the user for user
+		    //name and password.
+		    Session session = Session.getDefaultInstance( fMailServerConfig, null );
+		    MimeMessage message = new MimeMessage( session );
+		    try {
+		      //the "from" address may be set in code, or set in the
+		      //config file under "mail.from" ; here, the latter style is used
+		      //message.setFrom( new InternetAddress(aFromEmailAddr) );
+		      message.addRecipient(
+		        Message.RecipientType.TO, new InternetAddress(aToEmailAddr)
+		      );
+		      message.addRecipient(Message.RecipientType.BCC, new InternetAddress("jbell@cs.columbia.edu"));
+		      message.setSubject( aSubject );
+		      message.setText( aBody );
+		      Transport.send( message );
+		    }
+		    catch (MessagingException ex){
+		      System.err.println("Cannot send email. " + ex);
+		    }
+		  }
+}
diff --git a/halo-se-admin/students.csv b/halo-se-admin/students.csv
new file mode 100644
index 0000000..9318534
--- /dev/null
+++ b/halo-se-admin/students.csv
@@ -0,0 +1 @@
+Al-Syed,Abdullah,aza2105,dEPer8fa
Artemiou,Vasilios,va2265,28ECuZus
Becker,Joseph,jmb2297,phEn8trA
Bell,Daniel,dpb2121,tHu7ajAz
Benitez,Jamie,jab2314,F52SWuju
Bleuel,Nicole,nkb2115,MecHe2e3
Bose,Koel,kab2186,P5WuPE8p
Cao,Jeff,jhc2154,stekEz3K
Castellucci,Francis,fvc2105,TrAs9e9r
Chang,Victor,vc2281,WRuKa44u
Chao,David,dkc2110,sW8CRega
Chen,Sitian,sc3235,kasAtuQ7
Chong,Hahn,hc2361,Ke2eC2fR
Cohen,David,Dec-43,qej8QeDr
Damian,Mijael,mad2222,PHa4EsP2
Davis,Wesley,wbd2103,gEstat2x
Dong,James,jpd2152,chUv6pet
Erkilic,Mehmet,me2419,SwustEd3
Eum,Julianna,jme2134,fR97reXA
Evans,Benjamin,bse2105,zUsw56uf
Fells,Johnny,jf2608,4ut8eSpe
Guo,Hong,hg2269,6H9tachU
Jacobs,Ernesto,ewj2110,sTab7nun
Jung,SeungJun,sj2453,9ruchAvE
Kim,Bora,bk2380,S4EDrux2
Kim,SungHwan,sk3408,2r2yUsWu
Kolodzinski,Anthony,aak2166,c6SPeSte
Kotliar,Dylan,dak2135,naTH7fUP
Lee,Albert,akl2140,3axa5edR
Lee,Connie,cfl2119,bAWra8E4
Lee,Jin,jl3455,2REmuj3b
Lee,Kevin,kwl2116,7rE6utre
Lubat,Jonathan,jil2124,heb4ehA2
Marsocci,Michael,mkm2154,puXaF5Ek
Narayan,Ram,rsn2115,2eSWAwru
Nertomb,Leslie,ln2250,wr9bRUSt
Ramachandran,Abhimanyu,ar3015,fUwagE8P
Rastogi,Sumit,sar2161,B26raswU
Shin,SooHyun,ss3751,PEva4uBr
Stappenbeck,Corey,ccs2135,vE7eCaZu
Sun,Jerry,js4016,ruraDR9w
Taku,Maria,mat2185,chugARe4
Tay,QiXiu,qt2106,PhESwe9h
Vel,Ponni,pvv2001,dREPr9Ph
Wang,Qiurui,qw2128,9espEvU3
Wu,Kelly,kjw2130,3UH3wRuS
Xu,Xin,xx2135,tRAnep6e
Yang,LingKai,ly2243,dA4r6cuq
Yoon,Richard,ry2201,quX4gexe
Zech,John,jrz2111,BrEB9pR4
Zhu,Yuexin,yz2362,stekEz3K
\ No newline at end of file
diff --git a/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AddUser.java b/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AddUser.java
new file mode 100644
index 0000000..90920c2
--- /dev/null
+++ b/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AddUser.java
@@ -0,0 +1,147 @@
+
+package edu.columbia.cs.psl.halo.server.stubs;
+
+import java.io.Serializable;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import edu.columbia.cs.psl.halo.server.wrapper.EqualsHashCodeProvider;
+
+
+/**
+ * <p>Java class for addUser complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="addUser">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="arg0" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="arg1" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="arg2" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="arg3" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "addUser", propOrder = {
+    "arg0",
+    "arg1",
+    "arg2",
+    "arg3"
+})
+public class AddUser
+    extends EqualsHashCodeProvider
+    implements Serializable
+{
+
+    private final static long serialVersionUID = 100L;
+    protected String arg0;
+    protected String arg1;
+    protected String arg2;
+    protected String arg3;
+
+    /**
+     * Gets the value of the arg0 property.
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getArg0() {
+        return arg0;
+    }
+
+    /**
+     * Sets the value of the arg0 property.
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setArg0(String value) {
+        this.arg0 = value;
+    }
+
+    /**
+     * Gets the value of the arg1 property.
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getArg1() {
+        return arg1;
+    }
+
+    /**
+     * Sets the value of the arg1 property.
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setArg1(String value) {
+        this.arg1 = value;
+    }
+
+    /**
+     * Gets the value of the arg2 property.
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getArg2() {
+        return arg2;
+    }
+
+    /**
+     * Sets the value of the arg2 property.
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setArg2(String value) {
+        this.arg2 = value;
+    }
+
+    /**
+     * Gets the value of the arg3 property.
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getArg3() {
+        return arg3;
+    }
+
+    /**
+     * Sets the value of the arg3 property.
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setArg3(String value) {
+        this.arg3 = value;
+    }
+
+}
diff --git a/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AddUserResponse.java b/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AddUserResponse.java
new file mode 100644
index 0000000..39890a5
--- /dev/null
+++ b/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AddUserResponse.java
@@ -0,0 +1,38 @@
+
+package edu.columbia.cs.psl.halo.server.stubs;
+
+import java.io.Serializable;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import edu.columbia.cs.psl.halo.server.wrapper.EqualsHashCodeProvider;
+
+
+/**
+ * <p>Java class for addUserResponse complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="addUserResponse">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "addUserResponse")
+public class AddUserResponse
+    extends EqualsHashCodeProvider
+    implements Serializable
+{
+
+    private final static long serialVersionUID = 100L;
+
+}
diff --git a/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AdminService.java b/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AdminService.java
index f1d8805..8beb6d3 100644
--- a/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AdminService.java
+++ b/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AdminService.java
@@ -40,6 +40,40 @@ public interface AdminService {

     /**
      *
+     * @param arg3
+     * @param arg2
+     * @param arg1
+     * @param arg0
+     */
+    @WebMethod
+    @RequestWrapper(localName = "addUser", targetNamespace = "http://server.halo.psl.cs.columbia.edu/", className = "edu.columbia.cs.psl.halo.server.stubs.AddUser")
+    @ResponseWrapper(localName = "addUserResponse", targetNamespace = "http://server.halo.psl.cs.columbia.edu/", className = "edu.columbia.cs.psl.halo.server.stubs.AddUserResponse")
+    public void addUser(
+        @WebParam(name = "arg0", targetNamespace = "")
+        String arg0,
+        @WebParam(name = "arg1", targetNamespace = "")
+        String arg1,
+        @WebParam(name = "arg2", targetNamespace = "")
+        String arg2,
+        @WebParam(name = "arg3", targetNamespace = "")
+        String arg3);
+
+    /**
+     *
+     * @param arg0
+     * @return
+     *     returns edu.columbia.cs.psl.halo.server.stubs.User
+     */
+    @WebMethod
+    @WebResult(targetNamespace = "")
+    @RequestWrapper(localName = "updateUser", targetNamespace = "http://server.halo.psl.cs.columbia.edu/", className = "edu.columbia.cs.psl.halo.server.stubs.UpdateUser")
+    @ResponseWrapper(localName = "updateUserResponse", targetNamespace = "http://server.halo.psl.cs.columbia.edu/", className = "edu.columbia.cs.psl.halo.server.stubs.UpdateUserResponse")
+    public User updateUser(
+        @WebParam(name = "arg0", targetNamespace = "")
+        User arg0);
+
+    /**
+     *
      * @return
      *     returns java.util.List<edu.columbia.cs.psl.halo.server.stubs.Course>
      */
@@ -162,20 +196,6 @@ public interface AdminService {
      *
      * @param arg0
      * @return
-     *     returns edu.columbia.cs.psl.halo.server.stubs.User
-     */
-    @WebMethod
-    @WebResult(targetNamespace = "")
-    @RequestWrapper(localName = "updateUser", targetNamespace = "http://server.halo.psl.cs.columbia.edu/", className = "edu.columbia.cs.psl.halo.server.stubs.UpdateUser")
-    @ResponseWrapper(localName = "updateUserResponse", targetNamespace = "http://server.halo.psl.cs.columbia.edu/", className = "edu.columbia.cs.psl.halo.server.stubs.UpdateUserResponse")
-    public User updateUser(
-        @WebParam(name = "arg0", targetNamespace = "")
-        User arg0);
-
-    /**
-     *
-     * @param arg0
-     * @return
      *     returns boolean
      */
     @WebMethod
diff --git a/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AdminServiceService.java b/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AdminServiceService.java
index 68942d1..58e1b4f 100644
--- a/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AdminServiceService.java
+++ b/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/AdminServiceService.java
@@ -17,7 +17,7 @@ import javax.xml.ws.WebServiceFeature;
  * Generated source version: 2.1
  *
  */
-@WebServiceClient(name = "AdminServiceService", targetNamespace = "http://server.halo.psl.cs.columbia.edu/", wsdlLocation = "http://amos.cs.columbia.edu:18585/AdminServiceService/AdminService?wsdl")
+@WebServiceClient(name = "AdminServiceService", targetNamespace = "http://server.halo.psl.cs.columbia.edu/", wsdlLocation = "http://127.0.0.1:8080/AdminServiceService/AdminService?wsdl")
 public class AdminServiceService
     extends Service
 {
@@ -30,9 +30,9 @@ public class AdminServiceService
         try {
             URL baseUrl;
             baseUrl = edu.columbia.cs.psl.halo.server.stubs.AdminServiceService.class.getResource(".");
-            url = new URL(baseUrl, "http://amos.cs.columbia.edu:18585/AdminServiceService/AdminService?wsdl");
+            url = new URL(baseUrl, "http://127.0.0.1:8080/AdminServiceService/AdminService?wsdl");
         } catch (MalformedURLException e) {
-            logger.warning("Failed to create URL for the wsdl Location: 'http://amos.cs.columbia.edu:18585/AdminServiceService/AdminService?wsdl', retrying as a local file");
+            logger.warning("Failed to create URL for the wsdl Location: 'http://127.0.0.1:8080/AdminServiceService/AdminService?wsdl', retrying as a local file");
             logger.warning(e.getMessage());
         }
         ADMINSERVICESERVICE_WSDL_LOCATION = url;
diff --git a/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/CourseServiceService.java b/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/CourseServiceService.java
index 85b6b5d..c8c8e71 100644
--- a/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/CourseServiceService.java
+++ b/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/CourseServiceService.java
@@ -17,7 +17,7 @@ import javax.xml.ws.WebServiceFeature;
  * Generated source version: 2.1
  *
  */
-@WebServiceClient(name = "CourseServiceService", targetNamespace = "http://server.halo.psl.cs.columbia.edu/", wsdlLocation = "http://amos.cs.columbia.edu:18585/CourseServiceService/CourseService?wsdl")
+@WebServiceClient(name = "CourseServiceService", targetNamespace = "http://server.halo.psl.cs.columbia.edu/", wsdlLocation = "http://127.0.0.1:8080/CourseServiceService/CourseService?wsdl")
 public class CourseServiceService
     extends Service
 {
@@ -30,9 +30,9 @@ public class CourseServiceService
         try {
             URL baseUrl;
             baseUrl = edu.columbia.cs.psl.halo.server.stubs.CourseServiceService.class.getResource(".");
-            url = new URL(baseUrl, "http://amos.cs.columbia.edu:18585/CourseServiceService/CourseService?wsdl");
+            url = new URL(baseUrl, "http://127.0.0.1:8080/CourseServiceService/CourseService?wsdl");
         } catch (MalformedURLException e) {
-            logger.warning("Failed to create URL for the wsdl Location: 'http://amos.cs.columbia.edu:18585/CourseServiceService/CourseService?wsdl', retrying as a local file");
+            logger.warning("Failed to create URL for the wsdl Location: 'http://127.0.0.1:8080/CourseServiceService/CourseService?wsdl', retrying as a local file");
             logger.warning(e.getMessage());
         }
         COURSESERVICESERVICE_WSDL_LOCATION = url;
diff --git a/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/LogServiceService.java b/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/LogServiceService.java
index a58640b..f6fd872 100644
--- a/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/LogServiceService.java
+++ b/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/LogServiceService.java
@@ -17,7 +17,7 @@ import javax.xml.ws.WebServiceFeature;
  * Generated source version: 2.1
  *
  */
-@WebServiceClient(name = "LogServiceService", targetNamespace = "http://server.halo.psl.cs.columbia.edu/", wsdlLocation = "http://amos.cs.columbia.edu:18585/LogServiceService/LogService?wsdl")
+@WebServiceClient(name = "LogServiceService", targetNamespace = "http://server.halo.psl.cs.columbia.edu/", wsdlLocation = "http://127.0.0.1:8080/LogServiceService/LogService?wsdl")
 public class LogServiceService
     extends Service
 {
@@ -30,9 +30,9 @@ public class LogServiceService
         try {
             URL baseUrl;
             baseUrl = edu.columbia.cs.psl.halo.server.stubs.LogServiceService.class.getResource(".");
-            url = new URL(baseUrl, "http://amos.cs.columbia.edu:18585/LogServiceService/LogService?wsdl");
+            url = new URL(baseUrl, "http://127.0.0.1:8080/LogServiceService/LogService?wsdl");
         } catch (MalformedURLException e) {
-            logger.warning("Failed to create URL for the wsdl Location: 'http://amos.cs.columbia.edu:18585/LogServiceService/LogService?wsdl', retrying as a local file");
+            logger.warning("Failed to create URL for the wsdl Location: 'http://127.0.0.1:8080/LogServiceService/LogService?wsdl', retrying as a local file");
             logger.warning(e.getMessage());
         }
         LOGSERVICESERVICE_WSDL_LOCATION = url;
diff --git a/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/UserServiceService.java b/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/UserServiceService.java
index 6b52a76..4e8905b 100644
--- a/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/UserServiceService.java
+++ b/halo-se-common/src/edu/columbia/cs/psl/halo/server/stubs/UserServiceService.java
@@ -17,7 +17,7 @@ import javax.xml.ws.WebServiceFeature;
  * Generated source version: 2.1
  *
  */
-@WebServiceClient(name = "UserServiceService", targetNamespace = "http://server.halo.psl.cs.columbia.edu/", wsdlLocation = "http://amos.cs.columbia.edu:18585/UserServiceService/UserService?wsdl")
+@WebServiceClient(name = "UserServiceService", targetNamespace = "http://server.halo.psl.cs.columbia.edu/", wsdlLocation = "http://127.0.0.1:8080/UserServiceService/UserService?wsdl")
 public class UserServiceService
     extends Service
 {
@@ -30,9 +30,9 @@ public class UserServiceService
         try {
             URL baseUrl;
             baseUrl = edu.columbia.cs.psl.halo.server.stubs.UserServiceService.class.getResource(".");
-            url = new URL(baseUrl, "http://amos.cs.columbia.edu:18585/UserServiceService/UserService?wsdl");
+            url = new URL(baseUrl, "http://127.0.0.1:8080/UserServiceService/UserService?wsdl");
         } catch (MalformedURLException e) {
-            logger.warning("Failed to create URL for the wsdl Location: 'http://amos.cs.columbia.edu:18585/UserServiceService/UserService?wsdl', retrying as a local file");
+            logger.warning("Failed to create URL for the wsdl Location: 'http://127.0.0.1:8080/UserServiceService/UserService?wsdl', retrying as a local file");
             logger.warning(e.getMessage());
         }
         USERSERVICESERVICE_WSDL_LOCATION = url;
diff --git a/halo-se-feature/feature.xml b/halo-se-feature/feature.xml
index ac9ae0d..7dc7563 100644
--- a/halo-se-feature/feature.xml
+++ b/halo-se-feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="edu.columbia.cs.psl.halo.client"
       label="HALO SE Client Environment"
-      version="1.0.1.3">
+      version="1.0.1.4">

    <description url="http://www.example.com/description">
       [Enter Feature Description here.]
diff --git a/halo-se/src/edu/columbia/cs/psl/halo/client/views/QuestHUD.java b/halo-se/src/edu/columbia/cs/psl/halo/client/views/QuestHUD.java
index 6bed3c7..99c207c 100644
--- a/halo-se/src/edu/columbia/cs/psl/halo/client/views/QuestHUD.java
+++ b/halo-se/src/edu/columbia/cs/psl/halo/client/views/QuestHUD.java
@@ -150,88 +150,6 @@ public class QuestHUD extends ViewPart {
 				}
 			return true;
 		}
-//		@Override
-//		public void sort(Viewer viewer, Object[] elements) {
-//			System.out.println("running sort");
-//			if(elements.length > 0)
-//			{
-//				if(elements[0] instanceof Assignment)
-//				{
-//					ArrayList<Assignment> sorted = new ArrayList<Assignment>(elements.length);
-//					for(Object o : elements)
-//						sorted.add((Assignment) o);
-//					Collections.sort(sorted, new Comparator<Assignment>() {
-//
-//						@Override
-//						public int compare(Assignment o1, Assignment o2) {
-//							boolean o1Done = assignmentCompleted(o1);
-//							boolean o2Done = assignmentCompleted(o2);
-//
-//							if(o1Done && ! o2Done)
-//								return 1;
-//							else if(o2Done && ! o1Done)
-//								return -1;
-//							else if(o1.getDueOn() != null && o2.getDueOn() != null)
-//								return o1.getDueOn().compare(o2.getDueOn());
-//							else
-//								return (o1.getId() < o2.getId() ? -1 : 1);
-//						}
-//					});
-//					for(Assignment a : sorted)
-//					{
-//						System.out.println(a.getTitle());
-//					}
-//					elements = sorted.toArray();
-//				}
-//				else if (elements[0] instanceof Quest) {
-//					ArrayList<Quest> sorted = new ArrayList<Quest>(elements.length);
-//					for(Object o : elements)
-//						sorted.add((Quest) o);
-//					Collections.sort(sorted, new Comparator<Quest>() {
-//
-//						@Override
-//						public int compare(Quest o1, Quest o2) {
-//							boolean o1Done = questCompleted(o1);
-//							boolean o2Done = questCompleted(o2);
-//
-//							if(o1Done && ! o2Done)
-//								return 1;
-//							else if(o2Done && ! o1Done)
-//								return -1;
-//							else
-//								return (o1.getId() < o2.getId() ? -1 : 1);
-//						}
-//					});
-//					System.out.println(sorted);
-//					elements = sorted.toArray();
-//				}
-//				else if(elements[0] instanceof Task)
-//				{
-//					ArrayList<Task> sorted = new ArrayList<Task>(elements.length);
-//					for(Object o : elements)
-//						sorted.add((Task) o);
-//					Collections.sort(sorted, new Comparator<Task>() {
-//
-//						@Override
-//						public int compare(Task o1, Task o2) {
-//							if(!cachedProgress.containsKey(o1) || !cachedProgress.containsKey(o2))
-//								return 0;
-//							boolean o1Done = cachedProgress.get(o1).isCompleted();
-//							boolean o2Done = cachedProgress.get(o2).isCompleted();
-//
-//							if(o1Done && ! o2Done)
-//								return -1;
-//							else if(o2Done && ! o1Done)
-//								return 1;
-//							else
-//								return (o1.getId() < o2.getId() ? -1 : 1);
-//						}
-//					});
-//					System.out.println(sorted);
-//					elements = sorted.toArray();
-//				}
-//			}
-//		}
 	}

 	class QuestDetails extends Composite {
@@ -306,9 +224,8 @@ public class QuestHUD extends ViewPart {
 			backgroundHeader.setText("Task Details");
 			questDueDate.setText("(Part of " + ((Quest) t.getQuest().getRef()).getName() +")");

-			String objectives = "";
-			objectivesHeader.setText("Quest Background");
-			objectivesBody.setText(((Quest) t.getQuest().getRef()).getDescription());
+			objectivesHeader.setText("");
+			objectivesBody.setText("");
 			refreshLayout();
 		}
 		private void refreshLayout()
@@ -319,16 +236,16 @@ public class QuestHUD extends ViewPart {
 					SWT.DEFAULT));
 			getParent().layout(true,true);
 		}
-		public void setQuest(QuestWrapper w) {
-			questTitle.setText(w.getQuest().getName());
-			questDueDate.setText("(Part of " + w.getAssignment().getTitle()
-					+ ", due " + w.getDueStrHuman() + ")");
-			questBackground.setText(w.getQuest().getDescription());
+		public void setQuest(Quest w) {
+			questTitle.setText(w.getName());
+			questDueDate.setText("(Part of " + ((Assignment) w.getAssignment().getRef()).getTitle()
+					+ ", due " + QuestWrapper.getDueStrHuman((Assignment) w.getAssignment().getRef()) + ")");
+			questBackground.setText(w.getDescription() + "\nCompleting this quest will reward you with " + w.getExperiencePoints() + " XP");
 			backgroundHeader.setText("Background");

 			String objectives = "";

-			for (Task t : w.getQuest().getTasks()) {
+			for (Task t : w.getTasks()) {
 				objectives += t.getName() + "\n";
 			}
 			objectivesHeader.setText("Objectives");
@@ -710,18 +627,18 @@ public class QuestHUD extends ViewPart {
 						if (event.getSelection() instanceof IStructuredSelection) {
 							IStructuredSelection selection = (IStructuredSelection) event
 									.getSelection();
-							QuestWrapper qw = null;
+//							QuestWrapper qw = null;
 							if ((selection.getFirstElement()) instanceof Quest) {
 //								System.out.println(((Quest) selection.getFirstElement()).getId());
-								qw = quests.get(((Quest) selection.getFirstElement()).getId());
-								if(qw == null)
-								{
-									questsViewer.setSelection(null);
-									return;
-								}
-								Activator.logBackground("QuestHUDQuestOrTaskSelected", "" + qw.getQuest().getId());
+								Quest q = ((Quest) selection.getFirstElement());
+//								if(qw == null)
+//								{
+//									questsViewer.setSelection(null);
+//									return;
+//								}
+								Activator.logBackground("QuestHUDQuestOrTaskSelected", "" + q.getId());
 								detailsLayout.topControl = questDetailsScroller;
-								questDetails.setQuest(qw);
+								questDetails.setQuest(q);
 								refreshLayout();
 							}
 							else if((selection.getFirstElement()) instanceof Task) {
diff --git a/halo-update-site/artifacts.jar b/halo-update-site/artifacts.jar
index 003708c..7db8b6c 100644
Binary files a/halo-update-site/artifacts.jar and b/halo-update-site/artifacts.jar differ
diff --git a/halo-update-site/content.jar b/halo-update-site/content.jar
index 56ba54b..07f0bad 100644
Binary files a/halo-update-site/content.jar and b/halo-update-site/content.jar differ
diff --git a/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.0.0.jar b/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.0.0.jar
deleted file mode 100644
index 1511b88..0000000
Binary files a/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.0.0.jar and /dev/null differ
diff --git a/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.0.1.jar b/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.0.1.jar
deleted file mode 100644
index 17c5516..0000000
Binary files a/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.0.1.jar and /dev/null differ
diff --git a/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.0.2.jar b/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.0.2.jar
deleted file mode 100644
index ae609c9..0000000
Binary files a/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.0.2.jar and /dev/null differ
diff --git a/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.0.3.jar b/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.0.3.jar
deleted file mode 100644
index 6076a01..0000000
Binary files a/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.0.3.jar and /dev/null differ
diff --git a/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.0.jar b/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.0.jar
deleted file mode 100644
index 5ff920e..0000000
Binary files a/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.0.jar and /dev/null differ
diff --git a/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.1.jar b/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.1.jar
deleted file mode 100644
index 9cda8f7..0000000
Binary files a/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.1.jar and /dev/null differ
diff --git a/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.2.jar b/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.2.jar
deleted file mode 100644
index fc738a1..0000000
Binary files a/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.2.jar and /dev/null differ
diff --git a/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.3.jar b/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.3.jar
deleted file mode 100644
index b6fa1a6..0000000
Binary files a/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.3.jar and /dev/null differ
diff --git a/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.4.jar b/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.4.jar
new file mode 100644
index 0000000..af26617
Binary files /dev/null and b/halo-update-site/features/edu.columbia.cs.psl.halo.client_1.0.1.4.jar differ
diff --git a/halo-update-site/install.html b/halo-update-site/install.html
new file mode 100644
index 0000000..b399bcc
--- /dev/null
+++ b/halo-update-site/install.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>HALO SE Installation Instructions</title>
+<style type="text/css">
+<!--
+body {
+	font: 100% Verdana, Arial, Helvetica, sans-serif;
+	background: #666666;
+	margin: 0; /* it's good practice to zero the margin and padding of the body element to account for differing browser defaults */
+	padding: 0;
+	text-align: center; /* this centers the container in IE 5* browsers. The text is then set to the left aligned default in the #container selector */
+	color: #000000;
+}
+.oneColElsCtr #container {
+	width: 46em;
+	background: #FFFFFF;
+	margin: 0 auto; /* the auto margins (in conjunction with a width) center the page */
+	border: 1px solid #000000;
+	text-align: left; /* this overrides the text-align: center on the body element. */
+}
+.oneColElsCtr #mainContent {
+	padding: 0 20px; /* remember that padding is the space inside the div box and margin is the space outside the div box */
+}
+-->
+</style></head>
+
+<body class="oneColElsCtr">
+
+<div id="container">
+  <div id="mainContent">
+    <h1>Installing HALO-SE</h1>
+    <p>Follow these simple steps to get started using HALO-SE</p>
+    <ol>
+      <li>Start eclipse.</li>
+      <li>Open the &quot;Help&quot; menu, then select &quot;Install new software...&quot;
+        <ol>
+          <li><img src="select-install.png" alt="" width="641" height="239" /></li>
+        </ol>
+      </li>
+      <li>Click on &quot;Add...&quot; next to &quot;Work with&quot;</li>
+      <li>Enter &quot;HALO&quot; for name, and &quot;http://ase.cs.columbia.edu/halo-update&quot; for Location
+        <ol>
+          <li><img src="update site.jpg" alt="" width="468" height="91" /></li>
+        </ol>
+      </li>
+      <li>Click &quot;OK&quot;, and then click the checkbox next to &quot;HALO-SE&quot;, and &quot;Next &gt;&quot;
+        <ol>
+          <li><img src="next.jpg" alt="" width="551" height="385" /></li>
+        </ol>
+      </li>
+      <li>Click &quot;Next&quot; again, and then accept the license agreement, and select &quot;Finish&quot;</li>
+      <li>Click &quot;OK&quot; through the security warning</li>
+      <li>Select &quot;Restart Now&quot; once the installation completes</li>
+      <li>When Eclipse restarts, you should see a &quot;HALO Dashboard&quot; tab on the bottom, and a &quot;HALO Quests&quot; tab on the right. If you do not see these, go to the &quot;Window&quot; menu, and select &quot;Reset Perspective&quot;</li>
+      <li>Login with your UNI for username, and the password that was emailed to you.</li>
+    </ol>
+    <p>If you have any problems or general feedback for HALO, please email <a href="mailto:jbell@cs.columbia.edu">Jon Bell</a>.</p>
+  </div>
+</div>
+</body>
+</html>
diff --git a/halo-update-site/next.jpg b/halo-update-site/next.jpg
new file mode 100644
index 0000000..3987471
Binary files /dev/null and b/halo-update-site/next.jpg differ
diff --git a/halo-update-site/plugins/edu.columbia.cs.psl.halo.client_1.0.0.201110101523.jar b/halo-update-site/plugins/edu.columbia.cs.psl.halo.client_1.0.0.201110101523.jar
deleted file mode 100644
index 776200d..0000000
Binary files a/halo-update-site/plugins/edu.columbia.cs.psl.halo.client_1.0.0.201110101523.jar and /dev/null differ
diff --git a/halo-update-site/plugins/edu.columbia.cs.psl.halo.client_1.0.0.201110101716.jar b/halo-update-site/plugins/edu.columbia.cs.psl.halo.client_1.0.0.201110101716.jar
deleted file mode 100644
index dbb88ce..0000000
Binary files a/halo-update-site/plugins/edu.columbia.cs.psl.halo.client_1.0.0.201110101716.jar and /dev/null differ
diff --git a/halo-update-site/plugins/edu.columbia.cs.psl.halo.client_1.0.0.201110101719.jar b/halo-update-site/plugins/edu.columbia.cs.psl.halo.client_1.0.0.201110101719.jar
deleted file mode 100644
index 01e7a8c..0000000
Binary files a/halo-update-site/plugins/edu.columbia.cs.psl.halo.client_1.0.0.201110101719.jar and /dev/null differ
diff --git a/halo-update-site/plugins/edu.columbia.cs.psl.halo.client_1.0.0.201110102242.jar b/halo-update-site/plugins/edu.columbia.cs.psl.halo.client_1.0.0.201110102242.jar
new file mode 100644
index 0000000..93a7232
Binary files /dev/null and b/halo-update-site/plugins/edu.columbia.cs.psl.halo.client_1.0.0.201110102242.jar differ
diff --git a/halo-update-site/select-install.png b/halo-update-site/select-install.png
new file mode 100644
index 0000000..d59f8f1
Binary files /dev/null and b/halo-update-site/select-install.png differ
diff --git a/halo-update-site/site.xml b/halo-update-site/site.xml
index a942e6f..529cef9 100644
--- a/halo-update-site/site.xml
+++ b/halo-update-site/site.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <site>
-   <feature url="features/edu.columbia.cs.psl.halo.client_1.0.1.3.jar" id="edu.columbia.cs.psl.halo.client" version="1.0.1.3">
+   <feature url="features/edu.columbia.cs.psl.halo.client_1.0.1.4.jar" id="edu.columbia.cs.psl.halo.client" version="1.0.1.4">
       <category name="HALO"/>
    </feature>
    <category-def name="HALO" label="HALO SE"/>
diff --git a/halo-update-site/untitled.jpg b/halo-update-site/untitled.jpg
new file mode 100644
index 0000000..2ea8eb5
Binary files /dev/null and b/halo-update-site/untitled.jpg differ
diff --git a/halo-update-site/update site.jpg b/halo-update-site/update site.jpg
new file mode 100644
index 0000000..b23c033
Binary files /dev/null and b/halo-update-site/update site.jpg differ