diff -urN punbb-1.4/admin/db_update.php punbb-1.4.1/admin/db_update.php
--- punbb-1.4/admin/db_update.php	2011-10-30 17:51:24.000000000 +0000
+++ punbb-1.4.1/admin/db_update.php	2011-11-29 18:13:36.000000000 +0000
@@ -10,7 +10,7 @@
  */
 
 
-define('UPDATE_TO', '1.4');
+define('UPDATE_TO', '1.4.1');
 define('UPDATE_TO_DB_REVISION', 5);
 
 // The number of items to process per pageview (lower this if the update script times out during UTF-8 conversion)
@@ -101,7 +101,7 @@
 	error('Version mismatch. The database \''.$db_name.'\' doesn\'t seem to be running a PunBB database schema supported by this update script.', __FILE__, __LINE__);
 
 // If we've already done charset conversion in a previous update, we have to do SET NAMES
-$forum_db->set_names(strpos($cur_version, '1.3') === 0 ? 'utf8' : 'latin1');
+$forum_db->set_names(version_compare($cur_version, '1.3', '>=') ? 'utf8' : 'latin1');
 
 // If MySQL, make sure it's at least 4.1.2
 if (in_array($db_type, array('mysql', 'mysqli', 'mysql_innodb', 'mysqli_innodb')))
@@ -1348,10 +1348,38 @@
 			$forum_db->query_build($query) or error(__FILE__, __LINE__);
 		}
 
+		// Fix linkedIn possible XSS founded in 1.4.0
+		if (version_compare($cur_version, '1.3', '>') && version_compare($cur_version, '1.4.1', '<'))
+		{
+			if ($forum_db->field_exists('users', 'linkedin'))
+			{
+				$query = array(
+					'SELECT'	=> 'id, linkedin',
+					'FROM'		=> 'users',
+					'WHERE'		=> 'linkedin IS NOT NULL'
+				);
+				$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
+
+				while ($cur_user = $forum_db->fetch_assoc($result))
+				{
+					if ($cur_user['linkedin'] != '' &&
+						strpos(strtolower($cur_user['linkedin']), 'http://') !== 0  &&
+						strpos(strtolower($cur_user['linkedin']), 'https://') !== 0)
+					{
+						$query = array(
+							'UPDATE'	=> 'users',
+							'SET'		=> 'linkedin=\''.$forum_db->escape('http://'.$cur_user['linkedin']).'\'',
+							'WHERE'		=> 'id = \''.$cur_user['id'].'\''
+						);
+						$forum_db->query_build($query) or error(__FILE__, __LINE__);
+					}
+				}
+			}
+		}
 
 
 		// Should we do charset conversion or not?
-		if (strpos($cur_version, '1.3') === 0)
+		if (version_compare($cur_version, '1.3', '>='))
 			$query_str = '?stage=finish';
 		elseif (strpos($cur_version, '1.2') === 0 && isset($_GET['convert_charset']))
 			$query_str = '?stage=conv_misc&req_old_charset='.$old_charset.'&req_per_page='.PER_PAGE;
diff -urN punbb-1.4/admin/install.php punbb-1.4.1/admin/install.php
--- punbb-1.4/admin/install.php	2011-10-09 17:49:11.000000000 +0000
+++ punbb-1.4.1/admin/install.php	2011-11-27 18:23:16.000000000 +0000
@@ -10,7 +10,7 @@
  */
 
 
-define('FORUM_VERSION', '1.4');
+define('FORUM_VERSION', '1.4.1');
 define('FORUM_DB_REVISION', 5);
 define('MIN_PHP_VERSION', '5.0.0');
 define('MIN_MYSQL_VERSION', '4.1.2');
diff -urN punbb-1.4/ChangeLog punbb-1.4.1/ChangeLog
--- punbb-1.4/ChangeLog	2011-10-30 17:50:59.000000000 +0000
+++ punbb-1.4.1/ChangeLog	2011-11-27 18:47:43.000000000 +0000
@@ -1,3 +1,11 @@
+PunBB 1.4.1
+2011-10-27 20:29:00
+====================
+
+ * fixed XSS vulnerability in profile.php (reported by Secunia)
+ * fixed javascript errors on Internet Explorer 6 and 7 (reported by hklown)
+
+
 PunBB 1.4
 2011-10-30 10:25:00
 ====================
diff -urN punbb-1.4/footer.php punbb-1.4.1/footer.php
--- punbb-1.4/footer.php	2011-10-09 17:49:11.000000000 +0000
+++ punbb-1.4.1/footer.php	2011-11-27 18:23:16.000000000 +0000
@@ -88,7 +88,7 @@
 		user_lang: "'.forum_htmlencode($forum_user['language']).'",
 		user_style: "'.forum_htmlencode($forum_user['style']).'",
 		user_is_guest: "'.forum_htmlencode(($forum_user['is_guest'] == 1) ? "1" : "0").'",
-		page: "'.forum_htmlencode((defined("FORUM_PAGE")) ? FORUM_PAGE : "unknown" ).'",
+		page: "'.forum_htmlencode((defined("FORUM_PAGE")) ? FORUM_PAGE : "unknown" ).'"
 	};';
 
 
diff -urN punbb-1.4/include/essentials.php punbb-1.4.1/include/essentials.php
--- punbb-1.4/include/essentials.php	2011-10-09 17:49:11.000000000 +0000
+++ punbb-1.4.1/include/essentials.php	2011-11-27 18:23:16.000000000 +0000
@@ -11,7 +11,7 @@
 	exit('The constant FORUM_ROOT must be defined and point to a valid PunBB installation root directory.');
 
 // Define the version and database revision that this code was written for
-define('FORUM_VERSION', '1.4');
+define('FORUM_VERSION', '1.4.1');
 define('FORUM_DB_REVISION', 5);
 
 // Record the start time (will be used to calculate the generation time for the page)
diff -urN punbb-1.4/include/js/min/punbb.common.min.js punbb-1.4.1/include/js/min/punbb.common.min.js
--- punbb-1.4/include/js/min/punbb.common.min.js	2011-10-30 17:57:13.000000000 +0000
+++ punbb-1.4.1/include/js/min/punbb.common.min.js	2011-11-27 18:23:16.000000000 +0000
@@ -3,5 +3,5 @@
     MIT License
 */
 (function(c){var h="string",k="head",t="body",U="script",O="readyState",R="preloaddone",D="loadtrigger",K="srcuri",H="preload",u="complete",f="done",b="which",v="preserve",o="onreadystatechange",L="onload",I="hasOwnProperty",E="script/cache",g="[object ",M=g+"Function]",F=g+"Array]",y=null,G=true,z=false,n=c.document,N=c.location,S=c.ActiveXObject,e=c.setTimeout,C=c.clearTimeout,T=function(V){return n.getElementsByTagName(V);},r=Object.prototype.toString,s=function(){},w={},A={},a=/^[^?#]*\//.exec(N.href)[0],x=/^\w+\:\/\/\/?[^\/]+/.exec(a)[0],Q=T(U),p=c.opera&&r.call(c.opera)==g+"Opera]",q=("MozAppearance" in n.documentElement.style),d=(n.createElement(U).async===true),m={cache:!(q||p),order:q||p||d,xhr:G,dupe:G,base:"",which:k};m[v]=z;m[H]=G;w[k]=n.head||T(k);w[t]=T(t);function P(V){return r.call(V)===M;}function B(Y,X){var W=/^\w+\:\/\//,V;if(typeof Y!=h){Y="";}if(typeof X!=h){X="";}V=((/^\/\//.test(Y))?N.protocol:"")+Y;V=(W.test(V)?"":X)+V;return((W.test(V)?"":(V.charAt(0)==="/"?x:a))+V);}function J(V){return(B(V).indexOf(x)===0);}function i(X){var W,V=-1;while(W=Q[++V]){if(typeof W.src==h&&X===B(W.src)&&W.type!==E){return G;}}return z;}function l(ay,am){ay=!(!ay);if(am==y){am=m;}var al=z,af=ay&&am[H],at=af&&am.cache,av=af&&am.order,Z=af&&am.xhr,aw=am[v],Y=am.which,ap=am.base,aa=s,ao=z,ai,ac=G,ad={},au=[],ag=y;af=at||Z||av;function ax(aA,az){if((aA[O]&&aA[O]!==u&&aA[O]!=="loaded")||az[f]){return z;}aA[L]=aA[o]=y;return G;}function X(aB,aA,aC){aC=!(!aC);if(!aC&&!(ax(aB,aA))){return;}aA[f]=G;for(var az in ad){if(ad[I](az)&&!(ad[az][f])){return;}}al=G;aa();}function ah(az){if(P(az[D])){az[D]();az[D]=y;}}function ae(aA,az){if(!ax(aA,az)){return;}az[R]=G;e(function(){w[az[b]].removeChild(aA);ah(az);},0);}function V(aA,az){if(aA[O]===4){aA[o]=s;az[R]=G;e(function(){ah(az);},0);}}function ar(aB,aE,aC,aF,aD,az){var aA=aB[b];e(function(){if("item" in w[aA]){if(!w[aA][0]){e(arguments.callee,25);return;}w[aA]=w[aA][0];}var aG=n.createElement(U);if(typeof aC==h){aG.type=aC;}if(typeof aF==h){aG.charset=aF;}if(P(aD)){aG[L]=aG[o]=function(){aD(aG,aB);};aG.src=aE;if(d){aG.async=z;}}w[aA].insertBefore(aG,(aA===k?w[aA].firstChild:y));if(typeof az==h){aG.text=az;X(aG,aB,G);}},0);}function ak(az,aB,aA,aC){A[az[K]]=G;ar(az,aB,aA,aC,X);}function aq(aA,aC,aB,aD){var az=arguments;if(ac&&aA[R]==y){aA[R]=z;ar(aA,aC,E,aD,ae);}else{if(!ac&&aA[R]!=y&&!aA[R]){aA[D]=function(){aq.apply(y,az);};}else{if(!ac){ak.apply(y,az);}}}}function W(aA,aD,aB,aE){var az=arguments,aC;if(ac&&aA[R]==y){aA[R]=z;aC=aA.xhr=(S?new S("Microsoft.XMLHTTP"):new c.XMLHttpRequest());aC[o]=function(){V(aC,aA);};aC.open("GET",aD);aC.send("");}else{if(!ac&&aA[R]!=y&&!aA[R]){aA[D]=function(){W.apply(y,az);};}else{if(!ac){A[aA[K]]=G;ar(aA,aD,aB,aE,y,aA.xhr.responseText);aA.xhr=y;}}}}function aj(aF){if(typeof aF=="undefined"||!aF){return;}if(aF.allowDup==y){aF.allowDup=am.dupe;}var aE=aF.src,aC=aF.type,aG=aF.charset,aA=aF.allowDup,az=B(aE,ap),aB,aD=J(az);if(typeof aG!=h){aG=y;}aA=!(!aA);if(!aA&&((A[az]!=y)||(ac&&ad[az])||i(az))){if(ad[az]!=y&&ad[az][R]&&!ad[az][f]&&aD){X(y,ad[az],G);}return;}if(ad[az]==y){ad[az]={};}aB=ad[az];if(aB[b]==y){aB[b]=Y;}aB[f]=z;aB[K]=az;ao=G;if(!av&&Z&&aD){W(aB,az,aC,aG);}else{if(!av&&at){aq(aB,az,aC,aG);}else{ak(aB,az,aC,aG);}}}function ab(az){if(ay&&!av){au.push(az);}if(!ay||af){az();}}function an(aB){var aA=[],az;for(az=-1;++az<aB.length;){if(r.call(aB[az])===F){aA=aA.concat(an(aB[az]));}else{aA[aA.length]=aB[az];}}return aA;}ai={script:function(){C(ag);var aB=an(arguments),aA=ai,az;if(aw){for(az=-1;++az<aB.length;){if(P(aB[az])){aB[az]=aB[az]();}if(az===0){ab(function(){aj((typeof aB[0]==h)?{src:aB[0]}:aB[0]);});}else{aA=aA.script(aB[az]);}aA=aA.wait();}}else{for(az=-1;++az<aB.length;){if(P(aB[az])){aB[az]=aB[az]();}}ab(function(){for(az=-1;++az<aB.length;){aj((typeof aB[az]==h)?{src:aB[az]}:aB[az]);}});}ag=e(function(){ac=z;},5);return aA;},wait:function(aC){C(ag);ac=z;if(!P(aC)){aC=s;}var aD=l(ay||ao,am),az=aD.trigger,aB=function(){try{aC();}catch(aE){}az();};delete aD.trigger;var aA=function(){if(ao&&!al){aa=aB;}else{aB();}};if(ay&&!ao){au.push(aA);}else{ab(aA);}return aD;}};if(ay){ai.trigger=function(){var aA,az=-1;while(aA=au[++az]){aA();}au=[];};}else{ai.trigger=s;}return ai;}function j(Z){var V,X={},W={"UseCachePreload":"cache","UseLocalXHR":"xhr","UsePreloading":H,"AlwaysPreserveOrder":v,"AllowDuplicates":"dupe"},Y={"AppendTo":b,"BasePath":"base"};for(V in W){Y[V]=W[V];}X.order=!(!m.order);for(V in Y){if(Y[I](V)&&m[Y[V]]!=y){X[Y[V]]=(Z[V]!=y)?Z[V]:m[Y[V]];}}for(V in W){if(W[I](V)){X[W[V]]=!(!X[W[V]]);}}if(!X[H]){X.cache=X.order=X.xhr=z;}X.which=(X.which===k||X.which===t)?X.which:k;return X;}c.$LAB={setGlobalDefaults:function(V){m=j(V);},setOptions:function(V){return l(z,j(V));},script:function(){return l().script.apply(y,arguments);},wait:function(){return l().wait.apply(y,arguments);}};(function(X,V,W){if(n[O]==y&&n[X]){n[O]="loading";
-n[X](V,W=function(){n.removeEventListener(V,W,z);n[O]=u;},z);}})("addEventListener","DOMContentLoaded");})(window);if(typeof PUNBB==="undefined"||!PUNBB){var PUNBB={};}PUNBB.common=(function(){var d=document.documentElement,c=false,a=false;function b(e){return document.getElementById(e);}return{on_domready_init:function(){c=true;PUNBB.common.addClass(d,"js");PUNBB.common.attachWindowOpen();PUNBB.common.autoFocus();PUNBB.common.attachCtrlEnterForm();if(!PUNBB.common.input_support_attr("required")){PUNBB.common.attachValidateForm();}var e=b("brd-messages");if(e){setTimeout(function(){e.style.visibility="hidden";},3500);}},on_load_init:function(){a=true;},addLoadEvent:function(f){if(a===true){f();}else{var e=window.onload;window.onload=(e&&typeof e==="function")?function(){e();f();}:f;}},addDOMReadyEvent:function(g){var e=false;if(c===true){g();return;}if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){g();e=true;},false);window.addEventListener("load",function(){if(!e){g();}},false);}else{if(window.attachEvent){if(window.ActiveXObject&&window===window.top){f();}else{window.attachEvent("onload",g);}}else{PUNBB.common.addLoadEvent(g);}}function f(){try{d.doScroll("left");}catch(h){setTimeout(f,0);return;}g();}},hasClass:function(f,e){return(new RegExp("\\b"+e+"\\b")).test(f.className);},addClass:function(f,e){if(PUNBB.common.hasClass(f,e)){return false;}else{f.className+=" "+e;}return true;},removeClass:function(f,e){if(!PUNBB.common.hasClass(f,e)){return false;}e=new RegExp("\\s*\\b"+e+"\\b","g");f.className=f.className.replace(e,"");return true;},blink:function(g,f){if(typeof f===undefined){f=2;}var e=g.style.visibility;if(f&&e!=="hidden"){g.style.visibility="hidden";setTimeout(function(){g.style.visibility=e;},200);setTimeout(function(){PUNBB.common.blink(g,f-1);},400);}},onScreen:function(l){function i(){var m=-1;if(window.pageYOffset){m=window.pageYOffset;}else{if(d&&d.scrollTop){m=d.scrollTop;}else{if(document.body){m=document.body.scrollTop;}}}return m;}function h(){var m=-1;if(window.innerHeight){m=window.innerHeight;}else{if(d&&d.clientHeight){m=d.clientHeight;}else{if(document.body){m=document.body.clientHeight;}}}return m;}function f(o){var m=o.offsetTop;o=o.offsetParent;return o?m+=f(o):m;}var e=i(),k=e+h(),g=f(l),j=g+l.clientHeight;return g>=e&&j<k;},map:function(h,f){var g,e;for(g=0,e=f.length;g<e;g+=1){f[g]=h(f[g]);}return f;},find:function(h,f){var g,e;for(g=0,e=f.length;g<e;g+=1){if(h(f[g])){return g;}}return -1;},arrayOfMatched:function(j,g){var h,f,e=[];for(h=0,f=g.length;h<f;h+=1){if(j(g[h])){e.push(g[h]);}}return e;},flatten:function(f){var g,e,h=[];for(g=0,e=f.length;g<e;g+=1){if(typeof f[g]==="object"&&f.length){h.concat(PUNBB.common.flatten(f[g]));}else{h.push(f[g]);}}return h;},validateForm:function(g){var f=function(l){return l.name&&l.name.indexOf("req_")===0;};var i=g.elements,e=PUNBB.common.arrayOfMatched(f,i);f=function(l){return(/^\s*$/).test(l.value);};var h=PUNBB.common.find(f,e);if(h>-1){if(PUNBB.common.find(f,e)>-1){var k=b("req-msg");PUNBB.common.removeClass(k,"req-warn");var j=PUNBB.common.addClass(k,"req-error");if(!PUNBB.common.onScreen(k)){k.scrollIntoView();setTimeout(function(){PUNBB.common.blink(k);},500);}else{if(!j){PUNBB.common.blink(k);}}if(PUNBB.common.onScreen(e[h])){e[h].focus();}return false;}}return true;},doQuickjumpRedirect:function(g,f){var e=b("qjump-select")[b("qjump-select").selectedIndex].value;g=g.replace("$1",e);g=g.replace("$2",f[e]);document.location=g;return false;},attachQuickjumpRedirect:function(e,h){var g=b("qjump-select"),f=b("qjump-submit");if(g){g.onchange=function(){return PUNBB.common.doQuickjumpRedirect(e,h);};}if(f){f.onclick=function(){return PUNBB.common.doQuickjumpRedirect(e,h);};PUNBB.common.addClass(f,"visual-hidden");}},initToggleCheckboxes:function(){var j=function(i){return function(){return PUNBB.common.toggleCheckboxes(i);};};var f,e,k=document.getElementsByTagName("span");for(f=0,e=k.length;f<e;f+=1){var g=k[f];if(PUNBB.common.hasClass(g,"select-all")&&g.getAttribute("data-check-form")){var h=b(g.getAttribute("data-check-form"));if(h){g.onclick=j(h);}}}},toggleCheckboxes:function(h){if(!h){return false;}var f,e,j=h.getElementsByTagName("input");for(f=0,e=j.length;f<e;f+=1){var g=j[f];if(g.getAttribute("data-no-select-all")){continue;}if(g.getAttribute("type")=="checkbox"&&g.disabled===false){g.checked=!g.checked;}}return false;},attachCtrlEnterForm:function(){var q=function(f){return function(i){if(((i.keyCode==13)||(i.keyCode==10))&&(i.ctrlKey===true)){return f.submit();}};};var m=function(f){return f.tagName.toUpperCase()=="TEXTAREA";};var l,p,g=document.forms;for(l=0,p=g.length;l<p;l+=1){var o=g[l];if(!PUNBB.common.hasClass(o,"frm-ctrl-submit")){continue;}var k,n,e=o.elements,h=PUNBB.common.arrayOfMatched(m,e);for(k=0,n=h.length;k<n;k+=1){h[k].onkeypress=q(o);}}},attachValidateForm:function(){var n=function(i){return i.name&&i.name.indexOf("req_")===0;};var k=function(i){return i.type&&(i.type=="submit"&&i.name!="cancel");
+n[X](V,W=function(){n.removeEventListener(V,W,z);n[O]=u;},z);}})("addEventListener","DOMContentLoaded");})(window);if(typeof PUNBB==="undefined"||!PUNBB){var PUNBB={};}PUNBB.common=(function(){var d=document.documentElement,c=false,a=false;function b(e){return document.getElementById(e);}return{on_domready_init:function(){c=true;PUNBB.common.addClass(d,"js");PUNBB.common.attachWindowOpen();PUNBB.common.autoFocus();PUNBB.common.attachCtrlEnterForm();if(!PUNBB.common.input_support_attr("required")){PUNBB.common.attachValidateForm();}var e=b("brd-messages");if(e){setTimeout(function(){e.style.visibility="hidden";},3500);}},on_load_init:function(){a=true;},addLoadEvent:function(f){if(a===true){f();}else{var e=window.onload;window.onload=(e&&typeof e==="function")?function(){e();f();}:f;}},addDOMReadyEvent:function(g){var e=false;if(c===true){g();return;}if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){g();e=true;},false);window.addEventListener("load",function(){if(!e){g();}},false);}else{if(window.attachEvent){if(window.ActiveXObject&&window===window.top){f();}else{window.attachEvent("onload",g);}}else{PUNBB.common.addLoadEvent(g);}}function f(){try{d.doScroll("left");}catch(h){setTimeout(f,0);return;}g();}},hasClass:function(f,e){return(new RegExp("\\b"+e+"\\b")).test(f.className);},addClass:function(f,e){if(PUNBB.common.hasClass(f,e)){return false;}else{f.className+=" "+e;}return true;},removeClass:function(f,e){if(!PUNBB.common.hasClass(f,e)){return false;}e=new RegExp("\\s*\\b"+e+"\\b","g");f.className=f.className.replace(e,"");return true;},blink:function(g,f){if(typeof f===undefined){f=2;}var e=g.style.visibility;if(f&&e!=="hidden"){g.style.visibility="hidden";setTimeout(function(){g.style.visibility=e;},200);setTimeout(function(){PUNBB.common.blink(g,f-1);},400);}},onScreen:function(l){function i(){var m=-1;if(window.pageYOffset){m=window.pageYOffset;}else{if(d&&d.scrollTop){m=d.scrollTop;}else{if(document.body){m=document.body.scrollTop;}}}return m;}function h(){var m=-1;if(window.innerHeight){m=window.innerHeight;}else{if(d&&d.clientHeight){m=d.clientHeight;}else{if(document.body){m=document.body.clientHeight;}}}return m;}function f(o){var m=o.offsetTop;o=o.offsetParent;return o?m+=f(o):m;}var e=i(),k=e+h(),g=f(l),j=g+l.clientHeight;return g>=e&&j<k;},map:function(h,f){var g,e;for(g=0,e=f.length;g<e;g+=1){f[g]=h(f[g]);}return f;},find:function(h,f){var g,e;for(g=0,e=f.length;g<e;g+=1){if(h(f[g])){return g;}}return -1;},arrayOfMatched:function(j,g){var h,f,e=[];for(h=0,f=g.length;h<f;h+=1){if(j(g[h])){e.push(g[h]);}}return e;},flatten:function(f){var g,e,h=[];for(g=0,e=f.length;g<e;g+=1){if(typeof f[g]==="object"&&f.length){h.concat(PUNBB.common.flatten(f[g]));}else{h.push(f[g]);}}return h;},validateForm:function(g){var f=function(l){return l.name&&l.name.indexOf("req_")===0;};var i=g.elements,e=PUNBB.common.arrayOfMatched(f,i);f=function(l){return(/^\s*$/).test(l.value);};var h=PUNBB.common.find(f,e);if(h>-1){if(PUNBB.common.find(f,e)>-1){var k=b("req-msg");PUNBB.common.removeClass(k,"req-warn");var j=PUNBB.common.addClass(k,"req-error");if(!PUNBB.common.onScreen(k)){k.scrollIntoView();setTimeout(function(){PUNBB.common.blink(k);},500);}else{if(!j){PUNBB.common.blink(k);}}if(PUNBB.common.onScreen(e[h])){e[h].focus();}return false;}}return true;},doQuickjumpRedirect:function(g,f){var e=b("qjump-select")[b("qjump-select").selectedIndex].value;g=g.replace("$1",e);g=g.replace("$2",f[e]);document.location=g;return false;},attachQuickjumpRedirect:function(e,h){var g=b("qjump-select"),f=b("qjump-submit");if(g){g.onchange=function(){return PUNBB.common.doQuickjumpRedirect(e,h);};}if(f){f.onclick=function(){return PUNBB.common.doQuickjumpRedirect(e,h);};PUNBB.common.addClass(f,"visual-hidden");}},initToggleCheckboxes:function(){var j=function(i){return function(){return PUNBB.common.toggleCheckboxes(i);};};var f,e,k=document.getElementsByTagName("span");for(f=0,e=k.length;f<e;f+=1){var g=k[f];if(PUNBB.common.hasClass(g,"select-all")&&g.getAttribute("data-check-form")){var h=b(g.getAttribute("data-check-form"));if(h){g.onclick=j(h);}}}},toggleCheckboxes:function(h){if(!h){return false;}var f,e,j=h.getElementsByTagName("input");for(f=0,e=j.length;f<e;f+=1){var g=j[f];if(g.getAttribute("data-no-select-all")){continue;}if(g.getAttribute("type")=="checkbox"&&g.disabled===false){g.checked=!g.checked;}}return false;},attachCtrlEnterForm:function(){var q=function(f){return function(j){j=j||window.event;var i=j.keyCode||j.which;if(((i==13)||(i==10))&&(j.ctrlKey===true)){return f.submit();}};};var m=function(f){return f.tagName.toUpperCase()=="TEXTAREA";};var l,p,g=document.forms;for(l=0,p=g.length;l<p;l+=1){var o=g[l];if(!PUNBB.common.hasClass(o,"frm-ctrl-submit")){continue;}var k,n,e=o.elements,h=PUNBB.common.arrayOfMatched(m,e);for(k=0,n=h.length;k<n;k+=1){h[k].onkeypress=q(o);}}},attachValidateForm:function(){var n=function(i){return i.name&&i.name.indexOf("req_")===0;};var k=function(i){return i.type&&(i.type=="submit"&&i.name!="cancel");
 };var l=function(i){return function(){return PUNBB.common.validateForm(i);};};var j,m,f=document.forms;for(j=0,m=f.length;j<m;j+=1){var e=f[j].elements;if(PUNBB.common.find(n,e)>-1){var g=PUNBB.common.arrayOfMatched(k,e),h=f[j];g=PUNBB.common.map(function(i){i.onclick=l(h);},g);}}},attachWindowOpen:function(){if(!document.getElementsByTagName){return;}var g=function(){return function(){window.open(this.href);return false;};};var f,e=document.getElementsByTagName("a");for(f=0;f<e.length;f+=1){if(PUNBB.common.hasClass(e[f],"exthelp")){e[f].onclick=g();}}},autoFocus:function(){var f=function(h){return h.offsetWidth>0&&(h.tagName.toUpperCase()=="TEXTAREA"||(h.tagName.toUpperCase()=="INPUT"&&(h.type=="text")||(h.type=="password")||(h.type=="email")||(h.type=="url")||(h.type=="number")));};var e=b("afocus");if(!e||window.location.hash.replace(/#/g,"")){return;}e=e.all||e.getElementsByTagName("*");var g=PUNBB.common.find(f,e);if(g>-1){e[g].focus();}},input_support_attr:function(e){var f=document.createElement("input");if(!e){return false;}return !!(e in f);}};}());PUNBB.common.addDOMReadyEvent(PUNBB.common.on_domready_init);PUNBB.common.addLoadEvent(PUNBB.common.on_load_init);
\ No newline at end of file
diff -urN punbb-1.4/include/js/punbb.common.js punbb-1.4.1/include/js/punbb.common.js
--- punbb-1.4/include/js/punbb.common.js	2011-10-09 17:49:11.000000000 +0000
+++ punbb-1.4.1/include/js/punbb.common.js	2011-11-27 18:23:16.000000000 +0000
@@ -353,7 +353,9 @@
 		attachCtrlEnterForm: function () {
 			var fn_keypress = function (frm) {
 				return function (e) {
-					if (((e.keyCode == 13) || (e.keyCode == 10)) && (e.ctrlKey === true)) {
+					e = e || window.event;
+					var key = e.keyCode || e.which;
+					if (((key == 13) || (key == 10)) && (e.ctrlKey === true)) {
 						return frm.submit();
 					}
 				};
diff -urN punbb-1.4/profile.php punbb-1.4.1/profile.php
--- punbb-1.4/profile.php	2011-10-30 17:51:24.000000000 +0000
+++ punbb-1.4.1/profile.php	2011-11-27 18:23:16.000000000 +0000
@@ -967,6 +967,10 @@
 			if ($form['url'] != '' && strpos(strtolower($form['url']), 'http://') !== 0  && strpos(strtolower($form['url']), 'https://') !== 0)
 				$form['url'] = 'http://'.$form['url'];
 
+			// Add http:// if the LinkedIn doesn't contain it or https:// already
+			if ($form['linkedin'] != '' && strpos(strtolower($form['linkedin']), 'http://') !== 0  && strpos(strtolower($form['linkedin']), 'https://') !== 0)
+				$form['linkedin'] = 'http://'.$form['linkedin'];
+
 			// If the ICQ UIN contains anything other than digits it's invalid
 			if ($form['icq'] != '' && !ctype_digit($form['icq']))
 				$errors[] = $lang_profile['Bad ICQ'];
@@ -1440,6 +1444,51 @@
 		$forum_page['user_contact']['website'] = '<li><span>'.$lang_profile['Website'].': '.$forum_page['url'].'</span></li>';
 	}
 
+	// Facebook
+	if ($user['facebook'] != '')
+	{
+		if ($forum_config['o_censoring'] == '1')
+		{
+			$user['facebook'] = censor_words($user['facebook']);
+		}
+
+		$facebook_url = ((strpos($user['facebook'], 'http://') === 0) || (strpos($user['facebook'], 'https://') === 0)) ?
+			forum_htmlencode($user['facebook']) :
+			forum_htmlencode('https://www.facebook.com/'.$user['facebook'])
+		;
+		$forum_page['facebook'] = '<a href="'.$facebook_url.'" class="external url">'.$facebook_url.'</a>';
+		$forum_page['user_contact']['facebook'] = '<li><span>'.$lang_profile['Facebook'].': '.$forum_page['facebook'].'</span></li>';
+	}
+
+	// Twitter
+	if ($user['twitter'] != '')
+	{
+		if ($forum_config['o_censoring'] == '1')
+		{
+			$user['twitter'] = censor_words($user['twitter']);
+		}
+
+		$twitter_url = ((strpos($user['twitter'], 'http://') === 0) || (strpos($user['twitter'], 'https://') === 0)) ?
+			forum_htmlencode($user['twitter']) :
+			forum_htmlencode('https://twitter.com/'.$user['twitter'])
+		;
+		$forum_page['twitter'] = '<a href="'.$twitter_url.'" class="external url">'.$twitter_url.'</a>';
+		$forum_page['user_contact']['twitter'] = '<li><span>'.$lang_profile['Twitter'].': '.$forum_page['twitter'].'</span></li>';
+	}
+
+	// LinkedIn
+	if ($user['linkedin'] != '')
+	{
+		if ($forum_config['o_censoring'] == '1')
+		{
+			$user['linkedin'] = censor_words($user['linkedin']);
+		}
+
+		$linkedin_url = forum_htmlencode($user['linkedin']);
+		$forum_page['linkedin'] = '<a href="'.$linkedin_url.'" class="external url" rel="me">'.$linkedin_url.'</a>';
+		$forum_page['user_contact']['linkedin'] = '<li><span>'.$lang_profile['LinkedIn'].': '.$forum_page['linkedin'].'</span></li>';
+	}
+
 	if ($user['jabber'] !='')
 		$forum_page['user_contact']['jabber'] = '<li><span>'.$lang_profile['Jabber'].': <strong> '.forum_htmlencode(($forum_config['o_censoring'] == '1') ? censor_words($user['jabber']) : $user['jabber']).'</strong></span></li>';
 	if ($user['icq'] !='')
@@ -1543,8 +1592,6 @@
 
 	require FORUM_ROOT.'footer.php';
 }
-
-
 else
 {
 	// Setup breadcrumbs
@@ -1680,7 +1727,10 @@
 				$user['facebook'] = censor_words($user['facebook']);
 			}
 
-			$facebook_url = (strpos($user['facebook'], 'http') === 0) ? forum_htmlencode($user['facebook']) : forum_htmlencode('https://www.facebook.com/'.$user['facebook']);
+			$facebook_url = ((strpos($user['facebook'], 'http://') === 0) || (strpos($user['facebook'], 'https://') === 0)) ?
+				forum_htmlencode($user['facebook']) :
+				forum_htmlencode('https://www.facebook.com/'.$user['facebook'])
+			;
 			$forum_page['facebook'] = '<a href="'.$facebook_url.'" class="external url">'.$facebook_url.'</a>';
 			$forum_page['user_contact']['facebook'] = '<li><span>'.$lang_profile['Facebook'].': '.$forum_page['facebook'].'</span></li>';
 		}
@@ -1693,7 +1743,10 @@
 				$user['twitter'] = censor_words($user['twitter']);
 			}
 
-			$twitter_url = (strpos($user['twitter'], 'http') === 0) ? forum_htmlencode($user['twitter']) : forum_htmlencode('https://twitter.com/'.$user['twitter']);
+			$twitter_url = ((strpos($user['twitter'], 'http://') === 0) || (strpos($user['twitter'], 'https://') === 0)) ?
+				forum_htmlencode($user['twitter']) :
+				forum_htmlencode('https://twitter.com/'.$user['twitter'])
+			;
 			$forum_page['twitter'] = '<a href="'.$twitter_url.'" class="external url">'.$twitter_url.'</a>';
 			$forum_page['user_contact']['twitter'] = '<li><span>'.$lang_profile['Twitter'].': '.$forum_page['twitter'].'</span></li>';
 		}
diff -urN punbb-1.4/README punbb-1.4.1/README
--- punbb-1.4/README	2011-10-23 13:32:37.000000000 +0000
+++ punbb-1.4.1/README	2011-11-27 18:23:16.000000000 +0000
@@ -21,7 +21,7 @@
 NOTE: Make a backup of your current forum directory before proceeding. Also, don't forget to make a backup of your forum database. Use the tool mysqldump for MySQL and pg_dump if you are using PostgreSQL. If you're using SQLite, just make a backup copy of the SQLite database file. You can also make database backups via most administration tools such as MySQL Administrator, phpMyAdmin and phpPgAdmin.
 
  1. Download the latest revision of PunBB from http://punbb.informer.com/. Decompress the PunBB archive to a directory.
- 2. Replace your old 1.2 directory with the contents of the archive's version 1.3.
+ 2. Replace your old 1.2 directory with the contents of the archive's version 1.4.
  3. Run db_update.php from the forum admin directory (e.g. open http://example.com/punbb/admin/db_update.php in your browser). Follow the instructions.
 
  	 Upgrade from 1.3
@@ -31,7 +31,7 @@
 1. Turn the Maintenance mode on (via admin panel).
 2. Disable all extensions (via admin panel).
 3. Overwrite old files with new ones.
-4. After overwriting, verify that cache, img/avatars and extensions (for pun_repository) directories have enough write permissions (usually 777.
+4. After overwriting, verify that cache, img/avatars and extensions (for pun_repository) directories have enough write permissions (usually 777).
 5. Clear cache directory.
 6. Go to the forum index and run db_update.php script (this may take a long time).
 7. Update all extentsions.
