
When is payment due ? | What sum is due ? | Who may enforce a confiscation order ? | The Director of ARA | The Magistrates ' Court | Magistrates ' power to obtain monies from banks and building societies | The Prosecutor | The decision to appoint an enforcement receiver | The role of third parties | Resolution of third party interests | The matrimonial home | Inadequacy of available amount | Discharging the confiscation order | Enforcement abroad | Procedure | Cases with the prosecutor holding lead responsibility | Determine whether an appeal has been lodged | Determine whether any monies have been paid | Send letter to the defendant | Determine defendant 's earliest release date | List an enforcement hearing in the Magistrates ' Court | Appoint Enforcement Receiver | Choice of receiver | Application to court | Content of witness statement | Hearsay evidence | Receiver 's powers | Address any third party claims | Appeals ( Procedure ) | Chase up enforcement receiver | Cases where the Magistrates ' Court holds lead responsibility | Useful Links | Further Information | Principle The purpose of a confiscation order , namely to deprive the defendant of the proceeds of his or her crime , is only fulfilled once the order is paid . A confiscation order is a debt owed by the defendant to the Crown . The defendant can choose to pay the order voluntarily , but if he or she fails to pay the order , compulsory enforcement action can be taken . All confiscation order payments , however enforced , go to the Treasury through the enforcing Magistrates ' Court . It is intended that CPS will play an active role in the enforcement of confiscation orders by making applications to the Crown Court for the appointment of enforcement receivers and/or by requesting the listing of applications at the Magistrates ' Court to activate the default sentence of imprisonment , if the defendant fails to pay the confiscation order . Top of page Guidance When is payment due ? The amount to be paid under a confiscation order must be paid on the date of the making of the confiscation order ( section 11 Proceeds of Crime Act 2002 ( POCA ) ) . If the defendant shows that he or she needs time to pay the confiscation order , the court may extend this time for payment for up to six months . If within the six months the defendant applies to the court for a further extension of this time and the court finds that there are exceptional circumstances , it can extend the time for a further six months . Before granting either an application for an extension of time or an application for a further extension of time , the Court must give the prosecutor an opportunity to make representations . Top of page What sum is due ? Interest is payable on the unpaid amount of the confiscation order , to encourage prompt payment . If the confiscation order is not paid by the due date , the amount of interest is added to the confiscation order and is treated as if it were part of the order ( section 12 POCA ) . The rate of interest is that specified in section 17 of the Judgments Act 1838 and is currently 8 % . Interest is not payable if an application to extend time to pay has been made by the defendant within twelve months of the making of the confiscation order and has not been determined by the court . Top of page Who may enforce a confiscation order ? The Director of ARA or the Magistrates ' Court is responsible for the enforcement of a confiscation order . In cases where the Director of ARA is not responsible for enforcing the order , the prosecutor has an important role in enforcement by applying to the Crown Court for the appointment of an enforcement receiver to realise the defendant 's assets , and/or to the Magistrates ' Court for an enforcement hearing , so that the court can activate the sentence imposed in default of payment of the confiscation order . Top of page The Director of ARA Section 34 of POCA requires the court to appoint the Director as the enforcement authority for a confiscation order if : the Court made a confiscation order after being asked to do so by the Director ; the Court made a confiscation order after being asked by the Director to reconsider the case where no confiscation order was made ; the Court of Appeal , or the Crown Court at the direction of the House of Lords , made a confiscation order as the result of an appeal by the Director ; before the Court made the confiscation order , the Director applied to the Court to appoint him as the enforcement authority for the order . A protocol will be agreed with ARA as to the types of cases , where ARA may be willing to act as the enforcement authority . The guiding factor will be one of complexity . It is anticipated that cases , which involve the realisation of substantial assets abroad would fall within this category . Top of page The Magistrates ' Court The Magistrates ' Court has the ultimate responsibility of enforcing a confiscation order and it will enforce the order as if it were a fine . Nevertheless , the Magistrates ' Court is not the preferred enforcer in cases involving the realisation of assets outside the jurisdiction , real property , or enforcing against property held in the names of third parties . Top of page Magistrates ' power to obtain monies from banks and building societies POCA makes specific provision for cash held by banks and building societies , in order to ensure that effective enforcement of confiscation orders occurs quickly . A Magistrates ' Court may order a bank or building society to pay the money to the Justices ' Chief Executive towards satisfaction of the confiscation order if any of the following conditions occurs : money is held by a defendant in an account which he holds with a bank or building society ; or money has been seized by a constable under section 19 of PACE 1984 and is held by a police force in an account which it holds with a bank or building society ; or money has been seized by a customs officer under section 19 of PACE 1984 and is held by the Commissioners of Customs and Excise in an account which they hold with a bank or building society ; and the money has been restrained by a restraint order ; and a confiscation order has been made against the defendant ; and the Director has not been appointed as the enforcement authority for the confiscation order ; and an enforcement receiver has not been appointed in relation to the money ; and the period granted by the Court for payment of the confiscation order has expired . If the bank or building society fails to comply with such an order , the Magistrates ' Court may order it to pay an amount not exceeding £ 5000 and this money will be treated as payment towards the confiscation order ( see section 67 POCA ) . Top of page The Prosecutor As the Director of ARA is only likely to be appointed in complex cases , perhaps involving foreign properties , and as the Magistrates ' Court is best equipped to recover sums of money from bank accounts or other straight forward cases , it will fall upon the prosecutor to enforce cases involving the realisation of the defendant 's assets . Fortunately , this task may be easily achieved by the prosecutor applying to the Crown Court for the appointment of an enforcement receiver ( see below ) . The prosecutor , rather than the Magistrates ' Court , should normally take primary responsibility in cases in which there is an existing restraint order and/or where the realisable assets include : Assets out of the jurisdiction ; Real property ; or Assets held in the names of third parties ( including limited companies ) . Note - This is an administrative arrangement rather than a legal requirement . Top of page The decision to appoint an enforcement receiver The prosecutor should consider making an application to the Crown Court for the appointment of an enforcement receiver wherever the realisable assets include assets out of the jurisdiction , real property or assets held by and/or in the names of third parties ( including limited companies ) . Another factor to consider is the cost of appointing an enforcement receiver . The CPS give the receiver an indemnity to make good any shortfall of the receiver 's costs after the defendant 's assets have been realised . Clearly , if the costs of hiring the receiver are likely to be in excess of the amount that is likely to be realised , a receiver should not be appointed . This may be a particularly pertinent issue in cases where there has been no restraint order , as some assets may have been dissipated prior to the appointment of the receiver . Although the application to court is made by the prosecutor , once appointed , the receiver is an officer of the court and will be separately represented on future hearings . See below for the procedure relating to the appointment of the enforcement receiver . Top of page The role of third parties Third parties have no right to be heard on a criminal confiscation hearing . The Crown Court will determine the defendant 's interest in property held by third parties , whether this property is held jointly , is a tainted gift , or is property otherwise held in the names of third parties . The Court at the confiscation stage is only tasked with determining the amount of the defendant 's free property , in order to calculate the recoverable or available amount in which to make an order for a sum of money and is not concerned with the property itself . Any determinations as to the defendant 's interest at that stage cannot be binding on third parties , as they are not parties to the proceedings ( see Re Norris [ 2001 ] UKHL 34 ) . Third party assets may be restrained and/or at the enforcement stage , action may be taken by a receiver to realise property , in which third parties may be claiming an interest . Third parties are entitled to have their claims determined by a court , although not as a part of the confiscation proceedings . Unlike previous legislation , POCA provides that the appropriate court will be the Crown Court . Top of page Resolution of third party interests The court may order anyone who has possession of realisable property to give it to the receiver and may order anyone who holds an interest in realisable property to pay the receiver the amount of any interest held in the property by the defendant or the recipient of a tainted gift . Once that payment is made , the interest of the defendant or the recipient of the tainted gift in the property is extinguished . Before such orders are made , the Crown Court ( Confiscation , Restraint and Receivership ) Rules 2003 ( SI 2003 No . 421 ) require that the defendant or the recipient of the gift must be given notice of the hearing and will , therefore , be able to make representations to the court . The defendant , or the recipient of a tainted gift , may apply to the court for an order that any property that cannot be replaced should not be sold . Such an order made under section 69(4 ) POCA may be revoked or varied . Section 62(3 ) POCA provides that any person affected by the action or proposed action of a receiver may apply to the Crown Court for an order giving directions as to the exercise of the receivership powers . The court may make such order as it believes appropriate . Any person affected by an order appointing or giving powers to a receiver may also apply to the Crown Court to vary or discharge the order by virtue of section 63(1)(c ) POCA . Section 69(3 ) POCA provides that in exercising the powers given to the court and/or to a receiver , the powers must be exercised with a view to allowing a person other than the defendant or a recipient of a tainted gift to retain or recover the value of any interest held by him ; in the case of realisable property held by a recipient of a tainted gift , the powers must be exercised with a view to realising no more than the value for the time being of the gift ; in a case where a confiscation order has not been made against the defendant , property must not be sold if the court so orders under subsection ( 4 ) . Top of page The matrimonial home A confiscation order is an order to pay a sum of money and may be enforced against any property held by the defendant , even if some of that property was legally obtained . Accordingly , the matrimonial home may be seized and confiscated , if the defendant fails to pay . Subject to the operation of section 31 of the Family Law Act 1996 , this may result in the eviction of other family members . The effect of section 69(3)(a ) POCA is to reverse the unreported case of Customs and Excise v A ( July 22 2002 , CA ) ; a case in which it was held that a property adjustment order could be made in family proceedings notwithstanding the provisions of the Drug Trafficking Act 1994 . The court may not , however , order the realisation of any share in the matrimonial home owned by the spouse or partner , unless it can be shown that the share was a tainted gift ( see R v Buckman [ 1997 ] 1 Cr . A pp . R . ( S. ) 325 ) . Top of page Inadequacy of available amount If the defendant or enforcement receiver applies to the Crown Court to vary the order the court must calculate the available amount . If it finds that the available amount is inadequate to pay the amount outstanding under the confiscation order the court may substitute the amount that it thinks just ( section 23 POCA ) . The court must disregard any inadequacy that it believes is attributable in whole or in part to anything done by the defendant to preserve property held by the recipient of a tainted gift in order to prevent it from being used to pay the confiscation order . Top of page Discharging the confiscation order In exceptional circumstances if less than £ 1,000 remains to be paid under the confiscation order and a Justices ' Chief Executive applies to the Court for the discharge of the order , the Court may consider whether the available amount is inadequate . If the Court finds the available amount to be inadequate to meet the amount remaining to be paid , and if this is due to fluctuations of currency exchange rates for foreign currency or due to any other reason specified by the Secretary of State , the Court may discharge the confiscation order . If only a small amount remains outstanding ( £ 50.00 or less ) and a Justices ' Chief Executive applies to the Court for the discharge of the order , by virtue of section 25 POCA , the Court may discharge the confiscation order . Top of page Enforcement abroad Realisable property is often held abroad . If a confiscation order has not yet been made , but any one of the five conditions for the granting of a restraint order have been satisfied and the prosecutor or the Director believes that realisable property is situated outside the United Kingdom , the prosecutor or the Director may send a request for assistance to another country via the Secretary of State to prohibit any person from dealing with realisable property and/or to sell realisable property and apply the proceeds in accordance with the law of that country ( see section 74 POCA ) . If the property is sold by the requested country , the money raised from that sale remains in the requested country , but the remaining balance of the amount ordered to be confiscated will be reduced by the amount raised by the sale . Top of page Procedure MAS have prepared a process map of the steps involved at the enforcement stage under the previous legislation . Enforcement . x ls The Crown Court will send the Notice of the Confiscation Order , Confiscation Certificate and Schedule(s ) of Assets to the relevant prosecutor and the defence solicitors within seven days of the confiscation order being made . The prosecutor should then contact the Justices ' Chief Executive for the Magistrates ' Court within fourteen days of receipt of Orders and Schedule(s ) from the Crown Court to inform him/her whether CPS intends to take the primary enforcement responsibility , or conversely whether there is an existing restraint order and that The CPS intends to take no enforcement action . The reasons for this should be detailed in a letter . The Justices Chief Executive for the Magistrates ' Courts will contact the prosecutor in cases that he/she believes that the prosecutor should take primary responsibility , if the prosecutor has not already made contact . Top of page Cases with the prosecutor holding lead responsibility Determine whether an appeal has been lodged Contact should be made with the Court of Appeal to confirm whether or not an appeal has been lodged . If an appeal has been lodged , then the enforcement process will be stayed pending the outcome of the appeal . Top of page Determine whether any monies have been paid Before taking the action outlined below , a telephone call should be made to the Magistrates ' Court to ascertain whether the defendant has voluntarily paid any of the sum due under the confiscation order . Top of page Send letter to the defendant Within fourteen days of primary responsibility being established , the prosecutor should send a letter to the defendant or defendant 's representatives indicating the preferred enforcement process ( voluntary payment or application for receiver ) and enclosing any relevant documents for signature ( e. g . authorities for accounts , policies , motor vehicles , jewellery etc ) . The letter will inform the defendant that failure to satisfy the Confiscation Order by the due date together with a refusal to consent to the preferred enforcement process may lead to the imposition of the default sentence . The debt will not be expunged after the default sentence is imposed . It cannot be remitted and will increase due to the accrual of interest at the relevant rate . Enforcement action to realise assets will continue even after the default sentence is imposed . Top of page Determine defendant 's earliest release date The prosecutor should obtain confirmation of changes in the defendant 's earliest release date and current location by faxing the Prisoner Release Service on 0121-6263474 . Where the defendant 's earliest release date post-dates the expiry of time to pay , the prosecutor should ensure that any enforcement action is completed before the defendant 's earliest date of release , and preferably before the expiry of time to pay , so that the magistrates ' court can issue a warrant of commitment in relation to any unpaid amount while the defendant is in prison . Top of page List an enforcement hearing in the Magistrates ' Court At the request of the prosecutor , the Magistrates ' Court should list an enforcement hearing to see why the default sentence should not be imposed . The prosecutor should supply the Court with copies of the relevant correspondence to and from the defendant showing its efforts to pursue funds . Once a default sentence has been imposed , it cannot be remitted and must be served in full , or until such time as the Confiscation order is satisfied , whichever is earliest . The incentive to the defendant is the fact that wilful refusal to co-operate is likely to lead to the default sentence being imposed and being served in full with the assets then be realised anyway . If there is no penalty for delaying the enforcement process defendants will continue to do so . At the request of the prosecutor , the Magistrates ' Court should issue a distress warrant or obtain a garnishee order as appropriate . The prosecutor should supply the Court with copies of the relevant correspondence to and from the defendant showing its efforts to pursue the particular assets and any other information or documentary evidence which the Magistrates ' Court might reasonably require in order to obtain a garnishee order . Enforcement hearings at the Magistrates ' Court should not normally be adjourned for more than two weeks to allow for the defendant to sign relevant documentation or four weeks to permit the defendant to arrange for the transfer to the Court 's bailiffs of chattel assets not already in the Crown 's possession . NB . It can be more expedient and cost-effective for the court rather than a receiver to realise certain chattels or cash . Top of page Appoint Enforcement Receiver There are three conditions that must exist before the court appoints an enforcement receiver : The court has made a confiscation order ; The confiscation order has not been satisfied ; and The confiscation order is not subject to appeal . Once these conditions are met , on the application of the prosecutor , the Crown Court may appoint a Receiver in respect of realisable property . Top of page Choice of receiver A panel of receivers will be appointed to act on behalf of The CPS on a range of confiscation related matters across the 42 Areas . Areas will take receivers from a national panel on a case-by-case basis ; geography does not impact on the selection and use of receivers . Receivers will be appointed to the panel after a rigorous tendering exercise and be experienced in this work and fully acquainted with CPS requirements . The project team , on behalf of the Service , will undertake the tendering and the setting up of the panel . The receiver 's letters of appointment will agree the fees they charge and the terms and conditions under which they will work as set out in the Framework Agreement . Top of page Application to court The Crown Court may determine the application without a hearing . The Rules state that unless the application to appoint the receiver is made ex parte , the application and witness statement must be lodged with the Crown Court and served on - the defendant ; the recipients of any tainted gifts ; and any other person whom the applicant knows to have an interest in any property to which the application relates , at least seven days before the date fixed by the court for hearing the application , unless the Crown Court specifies a shorter period . Top of page Content of witness statement The witness statement should give the grounds for the application including : an overview of the case and the circumstances giving rise to the need for the appointment of an enforcement receiver ; copy correspondence with the defendant inviting payment of the confiscation order ; full details of the proposed receiver and exhibit the letter of agreement setting out the basis for the receivers remuneration and operation and a consent letter from the receiver that he or she is willing to act in the case and abide by the terms of both the order and letter of agreement ; and to the best of the witness 's ability , full details of the realisable property in respect of which the applicant is seeking the order and specify the person holding that realisable property . A draft receivership order must accompany the witness statement . Top of page Hearsay evidence Hearsay evidence is admissible in restraint and receivership applications , however , Rule 39 of the Crown Court ( Confiscation , Restraint and Receivership ) Rules 2003 ( SI 2003 No . 421 ) provides that section 2(1 ) of the Civil Evidence Act 1995 does not apply to these proceedings . There is no duty to serve notice identifying the hearsay statements or of an intention to rely upon hearsay . Top of page Receiver 's powers The receiver gets his authority to act from the court . This is set out in the order appointing him ( section 51 POCA ) . It is extremely important that the order appointing a enforcement receiver is drafted so as to give the receiver the powers that he needs to operate to manage the assets . An ex parte application to appoint an enforcement receiver the Court cannot give the receiver power to manage the assets as in order to grant the receiver this power an opportunity to be heard must be given to all parties likely to be affected by the enforcement receiver order . On an ex parte order the receiver may be given the Power to take possession of property ; Power to start , carry on or defend legal proceedings in respect of the property ; Power to enter premises in England and Wales : To search for or inspect anything authorised by the Court ; To make or obtain a copy or photograph or other record as authorised by the Court ; To remove any property as authorised in the receivership order . After an inter partes hearing he may be given the powers set out above and also the Power to realise so much of the property as is necessary to meet the receivers remuneration and expenses ; and Power to realise so much of the property as is necessary to meet the receivers remuneration and expenses . Top of page Address any third party claims Please refer to the heading " The role of third parties " above . Top of page Appeals Any decision as to whether a prosecution appeal should be lodged , should be taken at level E , or by the head of the relevant trials unit . Prosecution appeals in respect of enforcement receivership include : Section 65 ( 1 ) to the Court of Appeal in respect of the refusal of the Crown Court to appoint and/or give powers to an enforcement receiver ; Section 65 ( 2 ) ( a ) to the Court of Appeal in respect of an order made by the Crown Court to appoint and/or to give powers to an enforcement receiver ; Section 65 ( 3 ) to the Court of Appeal where on a further application by the prosecutor , the Crown Court refuses to make an order ; Section 65 ( 4 ) to the Court of Appeal where on a further application the Crown Court has made an order ; and Section 66 to the House of Lords in respect of a decision of the Court of Appeal . In addition , the defendant and/or any person affected by the appointment or powers given to a enforcement receiver ; by the grant of powers to the receiver ; by the refusal or the giving of directions ; or by a refusal to discharge or vary the order , may appeal with leave to the Court of Appeal . Any party appearing in an appeal before the Court of Appeal may appeal with leave to the House of Lords . The appeal procedure may be found in a combination of POCA , the Criminal Appeal ( Confiscation , Restraint and Receivership ) Rules 2003 and in the Proceeds of Crime Act 2002 ( Appeals under Part 2 ) Order 2003 ( SI 2003 No . 82 ) . Notice of Appeal should be served within fourteen days , although application can be made for an appeal out of time . Top of page Chase up enforcement receiver Regular contact should be maintained with the enforcement receiver and reports obtained of the amounts recovered and of the remaining balance . This information should be entered on the Excel spreadsheet and submitted to Headquarters on a quarterly basis . Top of page Cases where the Magistrates ' Court holds lead responsibility Quarterly updates as to the value of assets realised should be obtained from the relevant Magistrate 's Court . The details should be entered in the Excel spreadsheet and forwarded to Headquarters every quarter whilst the order is outstanding . If the Magistrates ' Court appears to be making little progress , the prosecutor should consider asking the court to list a hearing to activate the default sentence of imprisonment . Alternatively , further consideration should be given to the appointment of an enforcement receiver , if appropriate . Top of page Useful Links Enforcement protocol Receiver Panel Letter of appointment of receiver Forms Draft Orders Pre-POCA confiscation guidance 