Timing chain cover to engine block water coolant leak

Chrysler Voyager 3.3 V6 (2000)

Timing chain cover to engine block water coolant leak.

As well as the usual coolant water leaks associated with my Chrysler Voyager 3.3 V6 (2000)

e.g. Radiator, water pump, hoses etc. I encountered a slight and intermittent coolant leak between the timing chain cover and the left side of the engine block .

The vehicle which I’ve had from new, has now over 102000 miles on the clock. So I guess this mileage and age was a contributory factor.

Below is a step by step guide of how I replaced the timing chain cover gasket and the failed “O” rings on the water galleries between the timing chain cover and engine block.

You might find this photo guide useful if you decide to tackle the job yourself.

I’m sure you can do the job without removing the bonnet and wiper box, but for the time it takes it makes the rest of the job a lot more accessible plus it gives a bit more light on the subject.

1. Disconnect battery and remove bonnet and wiper box.

See this link for wiper box removal


2. The vehicle runs on LPG, so turn of the gas supply at the tank.

3. Drain radiator and remove LPG control valve.

4. With the hoses removed you can just see the residue of the coolant leak between the timing cover and engine block.

5. Raise the vehicle with suitable jack and support with axle stands.

Remove right front wheel, the plastic wing protector and the plastic crankshaft pulley protector.

6. Remove the serpentine belt using a combination spanner on the bolt head of the belt tensioner pulley. Do this by reaching up from the underside of the vehicle. You might need to use a ring spanner on the open ended jaw of the combination spanner for extra leverage against the spring tension. Pull the belt from the crankshaft pulley.

7. Remove water pump and hoses.

8. Slacken the crankshaft pulley bolt (easier with an air wrench)

Use a puller to remove the pulley. It will be tight all the way off.

9. Remove the idler pulley, unbolt the aircon pump and cable tie to one side. Do not remove any pipes from the aircon pump!

10. Drain the engine oil and remove the sump and pick up pipe. Removal of a stabiliser bracket on the side of the engine block may be required to remove the starter ring gear cover.

11. Suitably support the engine for the removal of the right side engine mounting.

12. Remove the engine mounting. First remove the vertical and horizontal bolt to the engine mounting bracket then remove the 3 bolts fixing the rubber mounting bracket to the chassis.

13. Remove the 3 bolts holding engine mounting plate to the timing chain cover (left in photo)

14. Unplug the camshaft sprocket positioning sensor multi plug.

15. Remove the 8 timing chain cover bolts and ease the cover over end of crankshaft to remove.

16. Check timing chain cover for faults. Note on this photo the two water gallery “O” rings are damaged and are the cause of the coolant leak. The lower left hand port on the casing has an “O” ring for the oil gallery.

17. Clean the timing chain cover mating surface with a scraper and Emery cloth, paying particular attention to the “O” ring seats which are very close to the edge of the casing.

18. Clean the engine block mating surface and check timing chain and sprockets for serviceability.

19. Fit 3 new “O” rings and gasket to the timing chain cover using a suitable gasket sealant.

20. Refit timing chain cover ensuring “O” rings do not drop out of position.

Rotate if necessary the two flats on the oil pump drive so they align with the two flats on the crankshaft.

21. Refit sump with new gasket and and oil pick up pipe “O” ring.

22. Refit crankshaft pulley using a long 10mm bolt and nut to jack the pulley back on the crankshaft. It will be a tight fit all the way.

23. Rebuild the remainder of the components.

It might be worth replacing the serpentine drive belt at this stage.

24. Parts used:

Timing chain cover gasket and “O” rings, not expensive

Sump gasket set, quite expensive.

Part Codes:

B0000K04621958 – Sealing Gasket (timing chain cover)

B00K04483444AB – Ring (timing chain cover)

B0000K04483443 – Sealing Gasket (timing chain cover)

B00k05241062AB – Seal Kit (sump)

How to install backup-manager on Fedora and configure Amazon S3

You may of noticed that installing backup-manager on Fedora (I’m using oldish version 9) isn’t that straight forward, particularly if you want to back up to Amazon S3. It took my a bit of messing around on how to do it so I thought it was worth sharing how I did it. Note that if you wish not to use Amazon S3 once its installed your all done.

Installing Backup-Manager

Download the RPM to your server

$ wget ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/updates/9/ppc.newkey/backup-manager-0.7.8-1.fc9.noarch.rpm

If the link gets broken at some point there is a load more here http://rpm.pbone.net/index.php3/stat/4/idpl/13697398/dir/fedora_9/com/backup-manager-0.7.8-1.fc9.noarch.rpm.html. If you use a different Fedora version you can find the correct RPM here.

You can install this now with

$ rpm -ivh backup-manager-0.7.8-1.fc9.noarch.rpm

If you dont need Amazon S3 to work your all done at this point.

Amazon S3

If you run it at this point your get the error message:

The upload transfer "s3" failed.

You must install 2 more packages that it doesn’t tell you about.

Do the following under root

$ yum search perl-File-Slurp
$ yum install perl-File-Slurp.noarch

Now one more package

$ yum search perl-Net-Amazon-S3
$ yum install perl-Net-Amazon-S3.noarch

And now you can configure your conf:

nano /etc/backup-manager.conf

Ubuntu SABnzbd+ behind an apache2 proxy

This is a guide on how to replace your ugly sabnzbd url to something nice looking thats easier to remember. Currently the standard url will run on the port 8080 unless you’ve changed it. You could just change it to port 80 to make a nice url but more likely you already run apache on that port.

Example old url


New url


Assuming you already have apache installed you need to make sure you have the following mod’s installed and enabled.

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_html

Now you have these installed and enabled you have to created a new vhost entry that will point your chosen server name to your oringal sabnzbd url.

        ServerName sab.myserver.com
        ProxyPass / http://localhost:8080/
        ProxyPassReverse / http://localhost:8080/

And thats it! reboot your apache server and your done, you can now access via the new url. I would also stronlgly recommend you enable the password protection in your sabnzb configuration.



Client denied by server configuration error in Apache

Root your 3UK branded HTC Desire, 1.22.771.1, add custom recovery

This is a quick guide on how to root your 3 (three UK) branded HTC Desire and add a custom recovery if you wish to load custom roms.

Before we start here are some details about my phone which i did this process on:

  • HTC Desire simlock to 3 UK
  • Software version 1.22.771.1
  • HBOOT 0.80.0000
  • Did this on Windows 7

You have 3 choices on what you can do here:

  1. Put a custom recovery on it to flash any rom you like
  2. Gain root access your current Eclair 2.1 (and a custom recovery if you like)
  3. Upgrade it to offical Froyo 2.2

First we  must ‘debrand’ our phone, this is a process where we load a generic rom that shipped with the sim-free Desires. These are all version 1.21.x all of which contain ways to root the phone. If you read up on how to root these phones you notices it says ‘this only works if you have 1.21.x or below), well the goal of this to downgrade to that lower number.


Create a ‘gold card’  – A GoldCard is a special SD card which, when inserted into your device, allows you to flash RUU files with a different CID to your own device. So we own a 3UK branded device, this will allow you to flash a generic ROM.


  • Spare microSD card
  • Windows PC (recommended)
  • ADB (part of the tools folder of the SDK, available for download here
  • HxD Hex Editor, available for download here

Step by step instructions

  • Format the microSD card to FAT32 format.
  • Put the microSD card in your device and boot it.
  • Ensure you have unzipped the SDK, then open a command prompt to the extract location. Change to the ‘tools directory.
  • Enter ‘adb shell cat /sys/class/mmc_host/mmc1/mmc1:*/cid’ and press enter. You should get a very long number which looks like this: 532600bd227d9c0347329407514d5402.
  • Visit this page, paste in your number and reverse it. In our example the result would be 00544d5107943247039c7d22bd002653.
  • Visit this page, enter your reversed number and create your goldcard image, which will be e-mailed to you.
  • Open the HxD hex editor. If you are using Windows Vista or Windows 7, you must run the application as administrator.
  • Go to the ‘Extra’ menu and select ‘Open Disk’. Under physical disk, select Removable Disk (your microSD card), uncheck ‘Open as Readonly’ and click OK. Note that you should select physical disk NOT the logical disk. This is important!
  • Go to the ‘Extra’ menu again and select ‘Open Disk Image’. Open the goldcard image that you received by email.
  • You should now have two tabs – one is your removable disk, the other is your goldcard image. Press OK when prompted for ‘Sector Size’ (selecting 512 (Hard disks/Floppy disks)) and click OK.
  • Click on the goldcard image tab. Go to the ‘Edit’ menu, choose ‘Select All’ then select the ‘Edit’ menu again and select ‘Copy’.
  • Click on the ‘Removable Disk’ tab. Highlight offset (line) 00000000 to offset (line) 00000170 (including the 00000170 line), then click on the ‘Edit’ menu and select ‘Paste Write’.
  • Click on the ‘File’ menu and select ‘Save’, accepting the warning.

Ok here the bit that differs for us 3UK branded people. If you have a branded handset other then 3UK at this point you run a gernic RUU found here. 3UK owners must go through a couple more steps.

Download the unrevoked3 rooting package from here http://paulsrichards.com/files/downloads/desire-rooting/reflash_package.exe (the one i used) or download it from http://unrevoked.com/#desire. This software will flash a custom recovery onto your phone. If your having driver problem ensure you follow the instructions that come with it properly. It has its own set for bootloader that it must use. If you having issues with the program finding your desire, try plugging in the desire before you load the program (even though it says not to do this). I had to do that to get it to work. Note that it loads a default recovery you can change this by clicking the file menu, i did this and used recovery-RA-desire-v1.7.0.1-R5.img found here. As i’ve rooted a Magic and Hero in the past i felt more at home with that one.


Ok now you can get into your new custom recovery by turning off the phone, hold the back button + the power. Select ‘BOOTLOADER’ then ‘RECOVERY’. It will then reboot to recovery.

Now at this point you can say the hard work is done and load a custom ROM which is Froyo 2.2 offical. I’ve currently got ‘Rooted Official HTC Android 2.2 (FroYo) ROM’ from here (look around on XDA there are loads to try out). And away you go offical 2.2 on your phone.

But you can carry on and do it the other way (i’m not sure why you would want to do that now but here goes).

Place this zip (found here for ref) on your Sd card and ‘Flash a Zip’ in recovery.

Now your phones thinks its an older version then it is. Download a gernic unbranded RUU found here.

Possible problems

  • When running RUU it reboots into BOOTLOADER and cant find the phone – turn on your phone as normal, plug it in with USB debugging mode on, with the SDK run on the command line ‘adb reboot oem-78′. Then it will go into the mode the RUU whats it to, then check all the drivers are ok in the ‘Hardware Devices’ in my computer.It should say ‘HTC Bootloader’. Then while in that mode run the RUU.
  • If you get while in RUU ‘Wrong CUSTOMER ID’ – you gold card is bad, do it again.
  • If you get while in RUU ‘BOOTLOADER VERSION INCORRECT’ – you haven’t flashed the update.zip properly.

Easy! you know have a downgrade phone!

Now to root it you can do the following (guide from XDA):

NOTE: for step one it depends which generic RUU you decided to put on, please check what you got by going into HBOOT (power off, back button + power).

  1. Download Tiny Core Linux Live CD
    —- For a bootloader of 0.75.* or lower AND a current ROM of 1.15.* or lower Download
    —- For a bootloader of 0.80.* or lower AND a current ROM of 1.21.* or lower Download
  2. Burn the downloaded iso on CD/DVD
  3. Boot your computer from that CD/DVD, once you booted it will ask you to press Enter or F2/F3 keys, you need to press Enter
  4. Insert the goldcard into the phone.
  5. Start the HTC Desire in bootloader by holding back and turning it on by the power button
  6. Connect the USB cable to the phone and PC
  7. Open a terminal by clicking the icon that looks like a monitor at the bottom on Tiny Core Linux and type the following commands:
    sudo mkdir /mnt/cdrom
    sudo mount /dev/cdrom /mnt/cdrom
    cd /mnt/cdrom/desire
    sudo ./step1.sh
  8. Wait until the phone restarts back into the white bootloader screen
  9. Turn the phone off via the bootloader menu (or pull the battery and USB cable) and remove the goldcard. Put a non-goldcard SD into the phone or reformat the goldcard and put it into the phone. Put the phone back into bootloader mode (Press Power button and Back button).
  10. In terminal type the following command:
    sudo ./step2.sh
  11. Once the phone has finished, you will see a screen with a green text. Use the optical tracker to navigate the menu to select Wipe and then press Wipe data/factory reset
  12. Once complete you should be back in the main menu. Now select the option Flash zip from sdcard and than choose rootedupdate.zip
  13. Once back in the main menu, choose restart the phone – the rooting process is now finished


(guide is from here)

Next you need to download the FroYo update file which you can find here [Mirror - the file has already been renamed to update.zip], once you have done this rename the file update.zip and copy it to the root of your microSD.  Turn your phone off then do the following:

  • Turn your phone on whilst holding down the volume down button to enter the HBoot menu
  • Choose the Recovery option by using the volume down button and the power button to select, your phone should then restart in recovery mode where you’ll be greeted with a red triangle and exclamation mark
  • Press and hold the volume up button and press the power button once, then choose to apply update.zip at the next menu
  • The FroYo update will now take place during which time your phone will reboot several times, the whole process takes about 10 minutes
  • Once you have booted up into FroYo and configured your settings, copy your files back onto your microSD card and you are good to go!

Zend Server vs Xampp

Now that Zend Server has had its public beta release I thought it was finally worth a installation to see what its all about. One of the main differences between this and xampp that jumped out at me was there was a Mac version to download along side Linux (rpm and dem) and Windows. There will be two version of the product to be called the ‘Community Edition’ and the standard commercial version. The commercial version comes with monitoring capabilities and additional Zend modules (page cache and data cache).

After the initial download of around 50mb for windows with comes with a nice installer to take care of everything. It then I realised I hadn’t downloaded everything yet and more modules need to be added before installing such as MySQL. There was also other option like a Java Bridge, Zend Framework (with or without dojo) and various other database adaptors.

After a 5 minutes everything was done. The apache web service monitor appeared which confirmed it was running. Icons now appeared in my program folder so I went ahead and click on ‘Zend Service’. Also worth noting that it also had Links to apache, MySQL service programs and to the htdocs.

Up loaded a web page taking me to the control panel. Everything looked a bit more flashy and provided similar links as xampp to phpmyadmin, a phpinfo file and the status of various services. You are reminded in various places that you only have the free version which is a little irritating. With the links provided you have easy access to the root folder and setting up passwords on MySQL.

Its really done exactly what it said it would do and i encountered no problems installing it. Less experienced users may bit a little confused when it comes choosing which components to install. It does however lack some features that xampp comes with such as SQLite and perl. There is also no centralised management tool like the xammp control panel to easily start and stop apache and MySQL. This is a real shame as this just makes xampp so easy to use.

Related links




No more re-binding with jQuery 1.3

With the release of the jQuery 1.3 on the 24th Janurary 2009 see’s the new feature called ‘Live Events’. This goes some way to solve the jQuery problem of creating dom elements on the fly which then have no events bound. Then your normally required to rebind any event handlers to them, resulting another potential large layer of complexity to your code.

Well with Live Events this is no longer required (well for some events anyway). By creating a event handler through a via Live Event it bounds all current and future elements. This gives you the advantage of not having to repeat the events handlers. Some events are excluded: blur, focus, mouseenter, mouseleave, change, submit. Fortunately the most common ones are supported and no doubt all will be supported in the future.

jQuery Live Events Doc

jQuery plugin: popmenu

popmenu is a jQuery plugin that allows you to create simple ‘pop-up’ menu’s like which appear on web sites like play.com. It is currently being used at ikonsports.com.

It has similar functionality jQuery’s hover(over, out) but with a few more options specifically geared towards pop up menus. Most importantly it will continue to match an element that you want to appear when you move off the mouse original element and on to any new element, where ever its located in the DOM.


target (DOMElement): This is the element that is to ‘appear’ when the hover event is called.
addStyle (string): Optional. Adds a class to the matched element on hover (of matched element and target). Removed on hover off.
time (int): Optional. Time in milliseconds after a hover off when target element is invisible.
speed (String|Number): Optional. A string representing one of the three predefined speeds (“slow”, “normal”, or “fast”) or the number of milliseconds to run the animation displaying the target (e.g. 1000).
autooff (boolean): Optional. Default is true. If turned on will automatically hide any target elements if visible when a different popmenu is triggered. For example if you pop up menu’s would overlap if they were both visable at the same time it will hide it first.


				target: "#mybutton_menu",
				time: 300 });


Production (944 bytes, packed) v1.0
Development (1.75 Kb) v1.0

Persistent sessions with PHP

Persistent sessions is a set of mechanisms created in php that allow authentication to persist across multiple browser sessions (ie closing down the browser). Any session variables you set in php are destroyed and cant be used in further sessions. This means annoyingly that your users must then sign into you site again. Their are some security issues you must be aware of when implementing a system like this.

Persistent sessions weakens the security of your web site, issues like it being accessed on a public computer (you could add a tick box to be remembered) or if you hold security sensitive information. Its a trade off between usability and security. You could even implement a two step security system where by for example you may trust the user to carry out certain procedures from a persistent session such as adding a item to a wish list but require full password validation for procedures such as purchasing a item from a stored credit card number or changing passwords.

When thinking about how to create a system is seems tempting enough just to store the username and password in the cookie and read them off when the user comes back to the web site and automatically log them in. This is bad very idea. A potential hacker could easily gain access to this information and replay it back to your server and gain unauthorised access.

The cookie is the only way standard way to persist data across multiple sessions. So we must store information in this cookie that will provide us with the information in the future to re authenticate the user. Clearly is a security risk so the best we can do is store information that will only be useful for a certain period of time. It would be inadvisable to provide any with permanent access this way.

In the cookie we are going to store 2 pieces of information, a hash code representing the username, we’ll call this a identifier and a key (or token) that is valid only for certain period of time and is regenerated after one use. To create a hash of the username we could do something like this:

$salt = "pAulR2";
$identifier = md5( $salt . md5($username . $salt ) );

This should be stored in your database alongside your other user details. Remember to always to use some form of ‘salt‘ when creating hash’s. This is just a string that is known only to your application and kept secret. This insures that people cant use rainbow tables or take a few educated guesses to reverse the hash.

Next we must create a key (or token), this will be like our temporary password, valid for a certain period of time. We just need a long a string that isn’t predictable. One could be generated like this:

$key = md5(uniqid(rand(), true);

Again we would need to store this in the database and associate it to the correct user along with another field recording the time span for which it is valid.

Outline Example

Ok, you’ve authenticated your users username and password and they’ve indicated that they wish to remain logged in for one week.

// This examples assumes you have already connected to a MySQL database
$salt = "pAulR2";
  You must create a identifier for every user and store it in the database prior implementing this.
  $identifier = md5( $salt . md5($username . $salt ) );
// retrieve the $identifier from the database, I'm going to assume its in a variable called
// $user['identifier']
$identifier = $user['identifier'];

// create a random key
$key = md5(uniqid(rand(), true);
// calculate the time in 7 days ahead for expiry date
$timeout = time() + 60 * 60 * 24 * 7;

// Set the cookie with information
setcookie('authentication', "$identifier:$key", $timeout);
// now update the database with the new information
$result = mysql_query("UPDATE `user` SET key = '$key', timeout = '$timeout'
WHERE username = '$username'");
if (!$result) {
    die('Invalid query: ' . mysql_error());

Right that takes care of setting the cookie but know we must authorise it when its been detected when the user comes back to the site. On the users first visit you need to implement code like the following:

$salt = "pAulR2";

if (isset($_COOKIE['authentication'])) {
    // cookie is set, lets see if its vailed and log someone in
    $clean = array();
    $mysql = array();

    $now = time();

    list($identifier, $token) = explode(':', $_COOKIE['authentication']);
    if (ctype_alnum($identifier) && ctype_alnum($token)) {
	$clean['identifier'] = $identifier;
	$clean['key'] = $key;

	$mysql['identifier'] = mysql_real_escape_string($clean['identifier']);

	$result = mysql_query("SELECT * FROM user
                                       WHERE identifier = '{$mysql['identifier']}'");
	if (mysql_num_rows($result)) {
		$record = mysql_fetch_assoc($result);
		if ($clean['key'] != $record['key']) {
			// fail because the key doesn't match
		}elseif ($now > $record['timeout']){
			// fail because the cookie has expired
		}elseif ($clean['identifier'] != md5($salt.md5($record['userID'].$salt))){
			// fail because the identifiers does not match
                          Success everything matches, now you can process
                          your login functions. The key must be re generated
                          for the next login. But don't increase the timeout to
                          ensure that the user must login in once the time
                          period has passed.
	}else {
			/* failed because the information is not in the
                            correct format in the cookie */

And remember once you have finished with the cookie delete it!

Sources: Essential PHP Security

Improving table usabiltity with jQuery

I’ve often found reading information quickly and correctly from a large HTML table difficult. I would like to share a small piece of jQuery code I wrote to help improve the readability of large tables. It provides two functions. Highlight the row of the table on which the mouse is hovered over and highlight the row if clicked on it. Row highlighting allows you to easily track the correct line across the screen while click highlighting enables you remember a particular spot of interest.

All this requires is the latest version of jQuery (version 1.2.6 included in the demo download) and to past in the code provided. You also need a bit of knowledge of HTML and CSS to implement in your own web site.

Download (16kb Zip)

See the Demo


	// improve table usability

	// Add class on single click
	$("table").find("tr").click( function() {

		if($(this).attr("class") == "rowhighlight_clicked rowhighlight"){

Essential Free PHP Web Development Tools

As a PHP web developer I’ve tried many different tools to aid my work. There are many tools out there to try and I encourage you to do so, but I have complied a list of what consider essential to make your job as easy as possible. If anyone has any useful tools/sites I haven’t listed let me know.


xampp - A cross platform web server including PHP and MySQL along with other tools such as Perl. Easily installs on a Windows machine (though it is cross platform), I recommend the lite version and install it on USB pen for portability.

phpMyAdmin - A web based tool for administrating MySQL databases, makes setting them up easy. The new version even includes a query builder. This is included with xampp just go to  http://localhost/phpmyadmin.

Zend Framework – A open source object oriented PHP5 framework. Contains easy to use classes to create a modern web app. Has support for many web services such as flickr and Google.

phpclasses – This a web site with a massive database of PHP classes. Always look her first as its probably already been done to a high standard.

Web browsers

FireFox 3.0 - An open source web broswer that supports loads of useful plugins for web developers. Not to mention generally how much better it is then any other.

Web Developer – One of the best FireFox plugins ever made. Contains a massive array of tools to help you develop your web site. From window resizing to editing CSS on the fly. Just try it!

IE Tab (Windows only) - A plugin for FireFox that allows you easily to switch your browser window to the Explorer rendering engine. As this is the most widely used browser you have to check your app works in it.

Multiple IE (Windows XP only) – A great little download that gives you old Internet Explorers (6.0, 5.5, 5, 4, 3) to try your site in. If you like me and upgraded to IE7, how do you check your site in IE6, many people still use it. Pity it doesn’t work on Vista.

Safari - Some people use this as a web browser, I guess now its available on windows you could check your site works in it

Text Editors

notepad++ – A free cross platform text editor with useful add-ons such as code highlighting for every language imaginable.

Other web tools

X Ray - Just add it to your bookmarks and you ready to go, click it, it loads then you can click any element on a page and it will show you the ‘CSS box model’. Very useful when your having pixel problems.

Browser Shots - Check you new web site in every browser known to man on any platform in one go. Warning: it doesn’t always return everything you ask for and it can take a while.

FireFtp – A FireFox plugin, a simple and realiable FTP program, can manage multiple accounts.

JavaScript & Ajax

Firebug – A plugin for FireFox, before this you would go mad debugging your JavaScript with nothing to go on. This provides full details on all errors and detailed information on Ajax requests. I also use it to be nosey on other web sites to see how they work.

JQuery - A fast lightweight JavaScript framework. Makes Ajax and HTML manlipation very easy for a modern 2.0 app.

Interface for jQuery – An additional set of jQuery plugins that provide a mass of additioal functionality for jQuery.

UI for jQuery – More plugins for jQuery that provide more for jQuery. I believe that interface and UI are being merged.

Visual jQuery – The doucmentation for jQuery can be a little rubbish, this web site lays it out in a simple format to effectivly use it.