diff --git a/erpnext/hr/doctype/appraisal/appraisal.js b/erpnext/hr/doctype/appraisal/appraisal.js
index ed53141..b2683d8 100644
--- a/erpnext/hr/doctype/appraisal/appraisal.js
+++ b/erpnext/hr/doctype/appraisal/appraisal.js
@@ -1,145 +1,150 @@
 cur_frm.add_fetch('employee', 'company', 'company');
 
 cur_frm.cscript.onload = function(doc,cdt,cdn){
-  if(!doc.status) set_multiple(dt,dn,{status:'Draft'});
-  if(doc.employee) cur_frm.cscript.employee(doc,cdt,cdn);
-  if(doc.amended_from && doc.__islocal) cur_frm.cscript.refresh_appraisal_details(doc, cdt, cdn);
+	if(!doc.status) set_multiple(dt,dn,{status:'Draft'});
+	if(doc.employee) cur_frm.cscript.employee(doc,cdt,cdn);
+	if(doc.amended_from && doc.__islocal) cur_frm.cscript.refresh_appraisal_details(doc, cdt, cdn);
 }
 
 cur_frm.cscript.refresh = function(doc,cdt,cdn){
-  if(user == doc.kra_approver && doc.status == 'Submitted') unhide_field(['Update', 'Declare Completed', 'Calculate Total Score']);
-  else hide_field(['Update', 'Declare Completed', 'Calculate Total Score']);
-  
-  if(!doc.docstatus) unhide_field('Fetch Template');
-  else hide_field('Fetch Template');
+	if(user == doc.kra_approver && doc.status == 'Submitted') unhide_field(['Update', 'Declare Completed', 'Calculate Total Score']);
+	else hide_field(['Update', 'Declare Completed', 'Calculate Total Score']);
+	
+	if(!doc.docstatus) unhide_field('Fetch Template');
+	else hide_field('Fetch Template');
 }
 
 
 cur_frm.cscript.refresh_appraisal_details = function(doc, cdt, cdn){
-  var val = getchildren('Appraisal Detail', doc.name, 'appraisal_details', doc.doctype);
-  for(var i = 0; i<val.length; i++){
-    set_multiple('Appraisal Detail', val[i].name, {'target_achieved':'', 'score':'', 'scored_earned':''}, 'appraisal_details');
-  }
-  doc.total_score = '';
-  refresh_field('appraisal_details');
-  refresh_field('total_score');
+	var val = getchildren('Appraisal Detail', doc.name, 'appraisal_details', doc.doctype);
+	for(var i = 0; i<val.length; i++){
+		set_multiple('Appraisal Detail', val[i].name, {'target_achieved':'', 'score':'', 'scored_earned':''}, 'appraisal_details');
+	}
+	doc.total_score = '';
+	refresh_field('appraisal_details');
+	refresh_field('total_score');
 }
 
 cur_frm.cscript.employee = function(doc,cdt,cdn){
-  if(doc.employee){
-    $c_obj(make_doclist(doc.doctype, doc.name),'set_approver','', function(r,rt){
-      if(r.message){
-        doc.employee_name = r.message['emp_nm'];
-        get_field(doc.doctype, 'kra_approver' , doc.name).options = r.message['app_lst'];        
-        refresh_many(['kra_approver','employee_name']);
-      }    
-    });
-  }
+	if(doc.employee){
+		$c_obj(make_doclist(doc.doctype, doc.name),'set_approver','', function(r,rt){
+			if(r.message){
+				doc.employee_name = r.message['emp_nm'];
+				get_field(doc.doctype, 'kra_approver' , doc.name).options = r.message['app_lst'];				
+				refresh_many(['kra_approver','employee_name']);
+			}		
+		});
+	}
 }
 
 cur_frm.cscript['Calculate Total Score'] = function(doc,cdt,cdn){
-  //get_server_fields('calculate_total','','',doc,cdt,cdn,1);
-  var val = getchildren('Appraisal Detail', doc.name, 'appraisal_details', doc.doctype);
-  var total =0;
-  for(var i = 0; i<val.length; i++){
-    total = flt(total)+flt(val[i].score_earned)
-  }
-  doc.total_score = flt(total)
-  refresh_field('total_score')
+	//get_server_fields('calculate_total','','',doc,cdt,cdn,1);
+	var val = getchildren('Appraisal Detail', doc.name, 'appraisal_details', doc.doctype);
+	var total =0;
+	for(var i = 0; i<val.length; i++){
+		total = flt(total)+flt(val[i].score_earned)
+	}
+	doc.total_score = flt(total)
+	refresh_field('total_score')
 }
 
 /*cur_frm.cscript['Declare Completed'] = function(doc,cdt,cdn){
-  $c_obj(make_doclist(doc.doctype, doc.name),'declare_completed','', function(r,rt){
-    if(r.message){
-      refresh_field('Status');
-      cur_frm.cscript.refresh(doc,cdt,cdn);
-    }
-  });
+	$c_obj(make_doclist(doc.doctype, doc.name),'declare_completed','', function(r,rt){
+		if(r.message){
+			refresh_field('Status');
+			cur_frm.cscript.refresh(doc,cdt,cdn);
+		}
+	});
 }*/
 
 cur_frm.cscript['Declare Completed'] = function(doc,cdt,cdn){
-  var declare_completed_dialog;
-  
-  set_declare_completed_dialog = function() {
-    declare_completed_dialog = new Dialog(400, 200, 'Declare Completed');
-    declare_completed_dialog.make_body([
-      ['HTML', 'Message', '<div class = "comment">You wont be able to do any changes after declaring this Appraisal as completed. Are you sure, you want to declare it as completed ?</div>'],
-      ['HTML', 'Response', '<div class = "comment" id="declare_completed_dialog_response"></div>'],
-      ['HTML', 'Declare Completed', '<div></div>']
-    ]);
-    
-    var declare_completed_btn1 = $a($i(declare_completed_dialog.widgets['Declare Completed']), 'button', 'button');
-    declare_completed_btn1.innerHTML = 'Yes';
-    declare_completed_btn1.onclick = function(){ declare_completed_dialog.add(); }
-    
-    var declare_completed_btn2 = $a($i(declare_completed_dialog.widgets['Declare Completed']), 'button', 'button');
-    declare_completed_btn2.innerHTML = 'No';
-    $y(declare_completed_btn2,{marginLeft:'4px'});
-    declare_completed_btn2.onclick = function(){ declare_completed_dialog.hide();}
-    
-    declare_completed_dialog.onshow = function() {
-      $i('declare_completed_dialog_response').innerHTML = '';
-    }
-    
-    declare_completed_dialog.refresh_dt = function(){
-      cur_frm.cscript.refresh(this.doc, this.cdt, this.cdn);
-      msgprint("refersh done");
-      $c('webnotes.widgets.form.form_header.refresh_labels',this.doc,function(r,rt){});
-    }
-    
-    declare_completed_dialog.add = function() {
-      // sending...
-      $i('declare_completed_dialog_response').innerHTML = 'Processing...';
-      var m_arg = user+ '~~' + this.msg_nm_lst;
-      
-      $c_obj(make_doclist(this.doc.doctype, this.doc.name),'declare_completed','', function(r,rt){
-        
-        if(r.message.status == 'Completed'){
-          $i('declare_completed_dialog_response').innerHTML = 'Done';
-          refresh_field('status');
-          declare_completed_dialog.refresh_dt();
-          hide_field(['Update', 'Declare Completed', 'Calculate Total Score']);
-          declare_completed_dialog.hide();
-        }
-        else if(r.message.status == 'Incomplete'){
-          $i('declare_completed_dialog_response').innerHTML = 'Incomplete Appraisal';
-        }
-        else if(r.message.status == 'No Score'){
-          $i('declare_completed_dialog_response').innerHTML = 'Calculate total score';
-        }
-      });
-    }
-  }  
-  
-  if(!declare_completed_dialog){
-    set_declare_completed_dialog();
-  }  
-  declare_completed_dialog.doc = doc;
-  declare_completed_dialog.cdt = cdt;
-  declare_completed_dialog.cdn = cdn;
-  declare_completed_dialog.show();
+	var declare_completed_dialog;
+	
+	set_declare_completed_dialog = function() {
+		declare_completed_dialog = new Dialog(400, 200, 'Declare Completed');
+		declare_completed_dialog.make_body([
+			['HTML', 'Message', '<div class = "comment">You wont be able to do any changes after declaring this Appraisal as completed. Are you sure, you want to declare it as completed ?</div>'],
+			['HTML', 'Response', '<div class = "comment" id="declare_completed_dialog_response"></div>'],
+			['HTML', 'Declare Completed', '<div></div>']
+		]);
+		
+		var declare_completed_btn1 = $a($i(declare_completed_dialog.widgets['Declare Completed']), 'button', 'button');
+		declare_completed_btn1.innerHTML = 'Yes';
+		declare_completed_btn1.onclick = function(){ declare_completed_dialog.add(); }
+		
+		var declare_completed_btn2 = $a($i(declare_completed_dialog.widgets['Declare Completed']), 'button', 'button');
+		declare_completed_btn2.innerHTML = 'No';
+		$y(declare_completed_btn2,{marginLeft:'4px'});
+		declare_completed_btn2.onclick = function(){ declare_completed_dialog.hide();}
+		
+		declare_completed_dialog.onshow = function() {
+			$i('declare_completed_dialog_response').innerHTML = '';
+		}
+		
+		declare_completed_dialog.refresh_dt = function(){
+			cur_frm.cscript.refresh(this.doc, this.cdt, this.cdn);
+			msgprint("refersh done");
+			$c('webnotes.widgets.form.form_header.refresh_labels',this.doc,function(r,rt){});
+		}
+		
+		declare_completed_dialog.add = function() {
+			// sending...
+			$i('declare_completed_dialog_response').innerHTML = 'Processing...';
+			var m_arg = user+ '~~' + this.msg_nm_lst;
+			
+			$c_obj(make_doclist(this.doc.doctype, this.doc.name),'declare_completed','', function(r,rt){
+				
+				if(r.message.status == 'Completed'){
+					$i('declare_completed_dialog_response').innerHTML = 'Done';
+					refresh_field('status');
+					declare_completed_dialog.refresh_dt();
+					hide_field(['Update', 'Declare Completed', 'Calculate Total Score']);
+					declare_completed_dialog.hide();
+				}
+				else if(r.message.status == 'Incomplete'){
+					$i('declare_completed_dialog_response').innerHTML = 'Incomplete Appraisal';
+				}
+				else if(r.message.status == 'No Score'){
+					$i('declare_completed_dialog_response').innerHTML = 'Calculate total score';
+				}
+			});
+		}
+	}	
+	
+	if(!declare_completed_dialog){
+		set_declare_completed_dialog();
+	}	
+	declare_completed_dialog.doc = doc;
+	declare_completed_dialog.cdt = cdt;
+	declare_completed_dialog.cdn = cdn;
+	declare_completed_dialog.show();
 }
 
 cur_frm.cscript.score = function(doc,cdt,cdn){
-  var d = locals[cdt][cdn];
-  if (d.score){
-    total = flt(d.per_weightage*d.score)/100;
-    d.score_earned = total.toPrecision(2);
-    refresh_field('score_earned', d.name, 'appraisal_details');
-  }
-  else{
-    d.score_earned = '';
-    refresh_field('score_earned', d.name, 'appraisal_details');
-  }
-  cur_frm.cscript.calculate_total(doc,cdt,cdn);
+	var d = locals[cdt][cdn];
+	if (d.score){
+		if (flt(d.score) > 5) {
+			msgprint("Score must be less than or equal to 5");
+			d.score = 0;
+			refresh_field('score', d.name, 'appraisal_details');
+		}
+		total = flt(d.per_weightage*d.score)/100;
+		d.score_earned = total.toPrecision(2);
+		refresh_field('score_earned', d.name, 'appraisal_details');
+	}
+	else{
+		d.score_earned = '';
+		refresh_field('score_earned', d.name, 'appraisal_details');
+	}
+	cur_frm.cscript.calculate_total(doc,cdt,cdn);
 }
 
 cur_frm.cscript.calculate_total = function(doc,cdt,cdn){
-  var val = getchildren('Appraisal Detail', doc.name, 'appraisal_details', doc.doctype);
-  var total =0;
-  for(var i = 0; i<val.length; i++){
-    total = flt(total)+flt(val[i].score_earned);
-  }
-  doc.total_score = flt(total);
-  refresh_field('total_score');
+	var val = getchildren('Appraisal Detail', doc.name, 'appraisal_details', doc.doctype);
+	var total =0;
+	for(var i = 0; i<val.length; i++){
+		total = flt(total)+flt(val[i].score_earned);
+	}
+	doc.total_score = flt(total);
+	refresh_field('total_score');
 }
diff --git a/erpnext/hr/doctype/appraisal/appraisal.py b/erpnext/hr/doctype/appraisal/appraisal.py
index e13f9f3..51ce9c8 100644
--- a/erpnext/hr/doctype/appraisal/appraisal.py
+++ b/erpnext/hr/doctype/appraisal/appraisal.py
@@ -18,130 +18,131 @@
 
 
 class DocType:
-  def __init__(self, doc, doclist=[]):
-    self.doc = doc
-    self.doclist = doclist
-  
-  def get_employee_name(self):
-    emp_nm = sql("select employee_name from `tabEmployee` where name=%s", self.doc.employee)
-    emp_nm= emp_nm and emp_nm[0][0] or ''
-    self.doc.employee_name = emp_nm
-    return emp_nm
-  
-  def fetch_kra(self):
-    if not self.doc.kra_template:
-      msgprint("Please select KRA Template to be be fetched")
-      raise Exception
-    self.doc.clear_table(self.doclist,'appraisal_details')
-    get_obj('DocType Mapper', 'KRA Template-Appraisal').dt_map('KRA Template', 'Appraisal', self.doc.kra_template, self.doc, self.doclist, "[['KRA Template','Appraisal'],['KRA Sheet', 'Appraisal Detail']]")
-  
-  def validate_dates(self):
-    if getdate(self.doc.start_date) > getdate(self.doc.end_date):
-      msgprint("End Date can not be less than Start Date")
-      raise Exception
-  
-  def validate_existing_appraisal(self):
-    chk = sql("select name from `tabAppraisal` where employee=%s and (status='Submitted' or status='Completed') and ((start_date>=%s and start_date<=%s) or (end_date>=%s and end_date<=%s))",(self.doc.employee,self.doc.start_date,self.doc.end_date,self.doc.start_date,self.doc.end_date))
-    if chk:
-      msgprint("You have already created Appraisal "+cstr(chk[0][0])+" in the current date range for employee "+cstr(self.doc.employee_name))
-      raise Exception
-  
-  def validate_curr_appraisal(self):
-    for d in getlist(self.doclist, 'appraisal_details'):
-      if d.target_achieved or d.score:
-        if self.doc.status == 'Draft':
-          msgprint("Target achieved or Score can be added only for submitted Appraisal")
-          raise Exception
-        elif self.doc.status == 'Submitted' and session['user'] != self.doc.kra_approver:
-          msgprint("Target achieved or Score can be added only by Appraisal Approver")
-          raise Exception
-  
-  def validate_fiscal_year(self):
-    fy=sql("select year_start_date from `tabFiscal Year` where name='%s'"%self.doc.fiscal_year)
-    ysd=fy and fy[0][0] or ""
-    yed=add_days(str(ysd),365)
-    if str(self.doc.start_date) < str(ysd) or str(self.doc.start_date) > str(yed) or str(self.doc.end_date) < str(ysd) or str(self.doc.end_date) > str(yed):
-      msgprint("Appraisal date range is not within the Fiscal Year selected")
-      raise Exception
-  
-  def validate(self):
-    self.validate_dates()
-    self.validate_existing_appraisal()
-    self.validate_curr_appraisal()
-    self.validate_fiscal_year()
-  
-  def set_approver(self):
-    ret={}
-    approver_lst =[]
-    emp_nm = self.get_employee_name()
-    approver_lst1 = get_obj('Authorization Control').get_approver_name(self.doc.doctype,0,self)
-    if approver_lst1:
-      approver_lst=approver_lst1
-    else:
-      approver_lst = [x[0] for x in sql("select distinct name from `tabProfile` where enabled=1 and name!='Administrator' and name!='Guest' and docstatus!=2")]
-    ret = {'app_lst':"\n" + "\n".join(approver_lst), 'emp_nm':cstr(emp_nm)}
-    return ret
-  
-  def calculate_total(self):
-    total = 0
-    for d in getlist(self.doclist, 'appraisal_details'):
-      if d.score:
-        total = total + flt(d.score_earned)
-    ret={'total_score':flt(total)}
-    return ret
-  
-  def declare_completed(self):
-    ret={}
-    for d in getlist(self.doclist, 'appraisal_details'):
-      if not d.target_achieved or not d.score or not d.score_earned:
-        msgprint("Please add 'Target Achieved' and 'Score' for all KPI")
-        ret = {'status':'Incomplete'}
-        return ret
-    
-    if not self.doc.total_score:
-      msgprint("Please calculate total score using button 'Calculate Total Score'")
-      ret = {'status':'No Score'}
-      return ret
-    self.update_appraisal()
-    #set(self.doc, 'status', 'Completed')
-    ret = {'status':'Completed'}
-    return ret
-  
-  def update_appraisal(self):
-    for d in getlist(self.doclist, 'appraisal_details'):
-      if not d.kra or not d.per_weightage:
-        msgprint("Please remove the extra blank row added")
-        raise Exception
-      d.save()
-    if self.doc.total_score:
-      set(self.doc,'total_score',self.doc.total_score)
-  
-  def on_update(self):
-    set(self.doc, 'status', 'Draft')
-  
-  def validate_total_weightage(self):
-    total_w = 0
-    for d in getlist(self.doclist, 'appraisal_details'):
-      total_w = flt(total_w) + flt(d.per_weightage)
-    
-    if flt(total_w)>100 or flt(total_w)<100:
-      msgprint("Total of weightage assigned to KPI is "+cstr(total_w)+".It should be 100(%)")
-      raise Exception
-  
-  def validate_appraisal_detail(self):
-    if not self.doc.kra_approver:
-      msgprint("Please mention the name of Approver")
-      raise Exception
-    
-    if not getlist(self.doclist, 'appraisal_details'):
-      msgprint("Please add KRA Details")
-      raise Exception    
-    
-    self.validate_total_weightage()
-  
-  def on_submit(self):
-    self.validate_appraisal_detail()
-    set(self.doc, 'status', 'Submitted')
-  
-  def on_cancel(self): 
-    set(self.doc, 'status', 'Cancelled')
\ No newline at end of file
+	def __init__(self, doc, doclist=[]):
+		self.doc = doc
+		self.doclist = doclist
+	
+	def get_employee_name(self):
+		emp_nm = sql("select employee_name from `tabEmployee` where name=%s", self.doc.employee)
+		emp_nm= emp_nm and emp_nm[0][0] or ''
+		self.doc.employee_name = emp_nm
+		return emp_nm
+	
+	def fetch_kra(self):
+		if not self.doc.kra_template:
+			msgprint("Please select KRA Template to be be fetched")
+			raise Exception
+		self.doc.clear_table(self.doclist,'appraisal_details')
+		get_obj('DocType Mapper', 'KRA Template-Appraisal').dt_map('KRA Template', 'Appraisal', self.doc.kra_template, self.doc, self.doclist, "[['KRA Template','Appraisal'],['KRA Sheet', 'Appraisal Detail']]")
+	
+	def validate_dates(self):
+		if getdate(self.doc.start_date) > getdate(self.doc.end_date):
+			msgprint("End Date can not be less than Start Date")
+			raise Exception
+	
+	def validate_existing_appraisal(self):
+		chk = sql("select name from `tabAppraisal` where employee=%s and (status='Submitted' or status='Completed') and ((start_date>=%s and start_date<=%s) or (end_date>=%s and end_date<=%s))",(self.doc.employee,self.doc.start_date,self.doc.end_date,self.doc.start_date,self.doc.end_date))
+		if chk:
+			msgprint("You have already created Appraisal "+cstr(chk[0][0])+" in the current date range for employee "+cstr(self.doc.employee_name))
+			raise Exception
+	
+	def validate_curr_appraisal(self):
+		for d in getlist(self.doclist, 'appraisal_details'):
+			if d.target_achieved or d.score:
+				if self.doc.status == 'Draft':
+					msgprint("Target achieved or Score can be added only for submitted Appraisal")
+					raise Exception
+				elif self.doc.status == 'Submitted' and session['user'] != self.doc.kra_approver:
+					msgprint("Target achieved or Score can be added only by Appraisal Approver")
+					raise Exception
+			
+	
+	def validate_fiscal_year(self):
+		fy=sql("select year_start_date from `tabFiscal Year` where name='%s'"%self.doc.fiscal_year)
+		ysd=fy and fy[0][0] or ""
+		yed=add_days(str(ysd),365)
+		if str(self.doc.start_date) < str(ysd) or str(self.doc.start_date) > str(yed) or str(self.doc.end_date) < str(ysd) or str(self.doc.end_date) > str(yed):
+			msgprint("Appraisal date range is not within the Fiscal Year selected")
+			raise Exception
+	
+	def validate(self):
+		self.validate_dates()
+		self.validate_existing_appraisal()
+		self.validate_curr_appraisal()
+		self.validate_fiscal_year()
+	
+	def set_approver(self):
+		ret={}
+		approver_lst =[]
+		emp_nm = self.get_employee_name()
+		approver_lst1 = get_obj('Authorization Control').get_approver_name(self.doc.doctype,0,self)
+		if approver_lst1:
+			approver_lst=approver_lst1
+		else:
+			approver_lst = [x[0] for x in sql("select distinct name from `tabProfile` where enabled=1 and name!='Administrator' and name!='Guest' and docstatus!=2")]
+		ret = {'app_lst':"\n" + "\n".join(approver_lst), 'emp_nm':cstr(emp_nm)}
+		return ret
+	
+	def calculate_total(self):
+		total = 0
+		for d in getlist(self.doclist, 'appraisal_details'):
+			if d.score:
+				total = total + flt(d.score_earned)
+		ret={'total_score':flt(total)}
+		return ret
+	
+	def declare_completed(self):
+		ret={}
+		for d in getlist(self.doclist, 'appraisal_details'):
+			if not d.target_achieved or not d.score or not d.score_earned:
+				msgprint("Please add 'Target Achieved' and 'Score' for all KPI")
+				ret = {'status':'Incomplete'}
+				return ret
+		
+		if not self.doc.total_score:
+			msgprint("Please calculate total score using button 'Calculate Total Score'")
+			ret = {'status':'No Score'}
+			return ret
+		self.update_appraisal()
+		#set(self.doc, 'status', 'Completed')
+		ret = {'status':'Completed'}
+		return ret
+	
+	def update_appraisal(self):
+		for d in getlist(self.doclist, 'appraisal_details'):
+			if not d.kra or not d.per_weightage:
+				msgprint("Please remove the extra blank row added")
+				raise Exception
+			d.save()
+		if self.doc.total_score:
+			set(self.doc,'total_score',self.doc.total_score)
+	
+	def on_update(self):
+		set(self.doc, 'status', 'Draft')
+	
+	def validate_total_weightage(self):
+		total_w = 0
+		for d in getlist(self.doclist, 'appraisal_details'):
+			total_w = flt(total_w) + flt(d.per_weightage)
+		
+		if flt(total_w)>100 or flt(total_w)<100:
+			msgprint("Total of weightage assigned to KPI is "+cstr(total_w)+".It should be 100(%)")
+			raise Exception
+	
+	def validate_appraisal_detail(self):
+		if not self.doc.kra_approver:
+			msgprint("Please mention the name of Approver")
+			raise Exception
+		
+		if not getlist(self.doclist, 'appraisal_details'):
+			msgprint("Please add KRA Details")
+			raise Exception		
+		
+		self.validate_total_weightage()
+	
+	def on_submit(self):
+		self.validate_appraisal_detail()
+		set(self.doc, 'status', 'Submitted')
+	
+	def on_cancel(self): 
+		set(self.doc, 'status', 'Cancelled')
diff --git a/erpnext/hr/doctype/appraisal/appraisal.txt b/erpnext/hr/doctype/appraisal/appraisal.txt
index 3521c6f..e2abb35 100644
--- a/erpnext/hr/doctype/appraisal/appraisal.txt
+++ b/erpnext/hr/doctype/appraisal/appraisal.txt
@@ -5,16 +5,17 @@
 	{
 		'creation': '2010-09-01 15:48:05',
 		'docstatus': 0,
-		'modified': '2011-06-27 14:39:10',
+		'modified': '2011-09-22 10:59:43',
 		'modified_by': 'Administrator',
 		'owner': 'ashwini@webnotestech.com'
 	},
 
 	# These values are common for all DocType
 	{
-		'_last_update': '1308808105',
+		'_last_update': '1316075905',
 		'autoname': 'APRSL.#####',
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'module': 'HR',
 		'name': '__common__',
@@ -22,7 +23,7 @@
 		'section_style': 'Simple',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
-		'version': 160
+		'version': 161
 	},
 
 	# These values are common for all DocField
@@ -56,7 +57,6 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 1,
 		'permlevel': 0,
 		'role': 'System Manager',
 		'submit': 1,
@@ -66,7 +66,6 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 2,
 		'permlevel': 1,
 		'role': 'System Manager'
 	},
@@ -77,7 +76,6 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 3,
 		'permlevel': 0,
 		'role': 'System Manager',
 		'submit': 1,
@@ -87,7 +85,6 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 4,
 		'permlevel': 1,
 		'role': 'System Manager'
 	},
@@ -98,7 +95,6 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 5,
 		'permlevel': 0,
 		'role': 'HR Manager',
 		'submit': 1,
@@ -111,7 +107,6 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 6,
 		'permlevel': 0,
 		'role': 'HR User',
 		'submit': 1,
@@ -121,7 +116,6 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 7,
 		'permlevel': 1,
 		'role': 'HR Manager'
 	},
@@ -129,7 +123,6 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 8,
 		'permlevel': 1,
 		'role': 'HR User'
 	},
@@ -138,7 +131,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 1,
 		'label': 'Employee Details',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -151,9 +143,9 @@
 		'doctype': 'DocField',
 		'fieldname': 'status',
 		'fieldtype': 'Select',
-		'idx': 2,
 		'in_filter': 1,
 		'label': 'Status',
+		'no_copy': 1,
 		'oldfieldname': 'status',
 		'oldfieldtype': 'Select',
 		'options': '\nDraft\nSubmitted\nCompleted\nCancelled',
@@ -168,7 +160,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'employee',
 		'fieldtype': 'Link',
-		'idx': 3,
 		'in_filter': 1,
 		'label': 'Employee',
 		'oldfieldname': 'employee',
@@ -185,7 +176,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'employee_name',
 		'fieldtype': 'Data',
-		'idx': 4,
 		'in_filter': 1,
 		'label': 'Employee Name',
 		'oldfieldname': 'employee_name',
@@ -198,7 +188,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'fiscal_year',
 		'fieldtype': 'Select',
-		'idx': 5,
 		'in_filter': 1,
 		'label': 'Fiscal Year',
 		'oldfieldname': 'fiscal_year',
@@ -213,7 +202,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'company',
 		'fieldtype': 'Select',
-		'idx': 6,
 		'in_filter': 1,
 		'label': 'Company',
 		'oldfieldname': 'company',
@@ -227,7 +215,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 7,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0,
 		'width': '50%'
@@ -238,7 +225,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'start_date',
 		'fieldtype': 'Date',
-		'idx': 8,
 		'in_filter': 1,
 		'label': 'Start Date',
 		'oldfieldname': 'start_date',
@@ -252,7 +238,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'end_date',
 		'fieldtype': 'Date',
-		'idx': 9,
 		'in_filter': 1,
 		'label': 'End Date',
 		'oldfieldname': 'end_date',
@@ -267,7 +252,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'kra_approver',
 		'fieldtype': 'Select',
-		'idx': 10,
 		'in_filter': 0,
 		'label': 'Approver',
 		'oldfieldname': 'kra_approver',
@@ -282,7 +266,6 @@
 		'fieldname': 'amended_from',
 		'fieldtype': 'Data',
 		'hidden': 1,
-		'idx': 11,
 		'label': 'Amended From',
 		'no_copy': 1,
 		'oldfieldname': 'amended_from',
@@ -299,7 +282,6 @@
 		'fieldname': 'amendment_date',
 		'fieldtype': 'Date',
 		'hidden': 1,
-		'idx': 12,
 		'label': 'Amendment Date',
 		'no_copy': 1,
 		'oldfieldname': 'amendment_date',
@@ -316,7 +298,6 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 13,
 		'label': 'Declare Completed',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
@@ -327,7 +308,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 14,
 		'oldfieldtype': 'Section Break',
 		'options': 'Simple',
 		'permlevel': 0
@@ -340,7 +320,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'kra_template',
 		'fieldtype': 'Link',
-		'idx': 15,
 		'label': 'KRA Template',
 		'oldfieldname': 'kra_template',
 		'oldfieldtype': 'Link',
@@ -352,7 +331,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 16,
 		'label': 'Fetch Template',
 		'oldfieldtype': 'Button',
 		'options': 'fetch_kra',
@@ -366,7 +344,6 @@
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
 		'hidden': 1,
-		'idx': 17,
 		'label': 'Update',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
@@ -380,7 +357,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'appraisal_details',
 		'fieldtype': 'Table',
-		'idx': 18,
 		'label': 'Appraisal Details',
 		'oldfieldname': 'appraisal_details',
 		'oldfieldtype': 'Table',
@@ -393,7 +369,6 @@
 		'allow_on_submit': 1,
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 19,
 		'label': 'Calculate Total Score',
 		'oldfieldtype': 'Button',
 		'options': 'calculate_total',
@@ -405,8 +380,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'total_score',
 		'fieldtype': 'Currency',
-		'idx': 20,
-		'label': 'Total Score',
+		'label': 'Total Score (Out of 5)',
 		'no_copy': 1,
 		'oldfieldname': 'total_score',
 		'oldfieldtype': 'Currency',
diff --git a/erpnext/hr/doctype/appraisal_detail/appraisal_detail.txt b/erpnext/hr/doctype/appraisal_detail/appraisal_detail.txt
index fa57bef..771bf4e 100644
--- a/erpnext/hr/doctype/appraisal_detail/appraisal_detail.txt
+++ b/erpnext/hr/doctype/appraisal_detail/appraisal_detail.txt
@@ -5,8 +5,8 @@
 	{
 		'creation': '2010-09-01 15:48:05',
 		'docstatus': 0,
-		'modified': '2010-09-20 14:06:57',
-		'modified_by': 'rahul@webnotestech.com',
+		'modified': '2011-09-22 10:45:37',
+		'modified_by': 'Administrator',
 		'owner': 'ashwini@webnotestech.com'
 	},
 
@@ -14,13 +14,14 @@
 	{
 		'autoname': 'APRSLD.#####',
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'istable': 1,
 		'module': 'HR',
 		'name': '__common__',
 		'section_style': 'Simple',
 		'server_code_error': ' ',
-		'version': 13
+		'version': 15
 	},
 
 	# These values are common for all DocField
@@ -45,7 +46,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'kra',
 		'fieldtype': 'Small Text',
-		'idx': 1,
 		'label': 'KRA',
 		'oldfieldname': 'kra',
 		'oldfieldtype': 'Small Text',
@@ -58,7 +58,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'per_weightage',
 		'fieldtype': 'Currency',
-		'idx': 2,
 		'label': 'Weightage (%)',
 		'oldfieldname': 'per_weightage',
 		'oldfieldtype': 'Currency',
@@ -72,7 +71,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'target_achieved',
 		'fieldtype': 'Small Text',
-		'idx': 3,
 		'label': 'Target Achieved',
 		'no_copy': 1,
 		'oldfieldname': 'target_achieved',
@@ -86,15 +84,15 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'score',
-		'fieldtype': 'Select',
-		'idx': 4,
+		'fieldtype': 'Currency',
 		'label': 'Score (0-5)',
 		'no_copy': 1,
 		'oldfieldname': 'score',
 		'oldfieldtype': 'Select',
 		'options': '\n0\n1\n2\n3\n4\n5',
 		'permlevel': 0,
-		'trigger': 'Client'
+		'trigger': 'Client',
+		'width': '60px'
 	},
 
 	# DocField
@@ -102,7 +100,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'score_earned',
 		'fieldtype': 'Currency',
-		'idx': 5,
 		'label': 'Score Earned',
 		'no_copy': 1,
 		'oldfieldname': 'score_earned',
