
COMMITTEE ON THE RIGHTS OF THE CHILD Thirty-third session 19 May-6 June 2003 General comment No. 4 ( 2003 ) Adolescent health and development in the context of the Convention on the Rights of the Child Introduction The Convention on the Rights of the Child defines a child as “ every human being below the age of 18 years unless , under the law applicable , majority is attained earlier ” ( art . 1 ) . Consequently , adolescents up to 18 years old are holders of all the rights enshrined in the Convention ; they are entitled to special protection measures and , according to their evolving capacities , they can progressively exercise their rights ( art . Adolescence is a period characterized by rapid physical , cognitive and social changes , including sexual and reproductive maturation ; the gradual building up of the capacity to assume adult behaviours and roles involving new responsibilities requiring new knowledge and skills . While adolescents are in general a healthy population group , adolescence also poses new challenges to health and development owing to their relative vulnerability and pressure from society , including peers , to adopt risky health behaviour . These challenges include developing an individual identity and dealing with one 's sexuality . The dynamic transition period to adulthood is also generally a period of positive changes , prompted by the significant capacity of adolescents to learn rapidly , to experience new and diverse situations , to develop and use critical thinking , to familiarize themselves with freedom , to be creative and to socialize . The Committee on the Rights of the Child notes with concern that in implementing their obligations under the Convention , States parties have not given sufficient attention to the specific concerns of adolescents as rights holders and to promoting their health and development . This has motivated the Committee to adopt the present general comment in order to raise awareness and provide States parties with guidance and support in their efforts to guarantee the respect for , protection and fulfilment of the rights of adolescents , including through the formulation of specific strategies and policies . The Committee understands the concepts of “ health and development ” more broadly than being strictly limited to the provisions defined in articles 6 ( right to life , survival and development ) and 24 ( right to health ) of the Convention . One of the aims of this general comment is precisely to identify the main human rights that need to be promoted and protected in order to ensure that adolescents do enjoy the highest attainable standard of health , develop in a well-balanced manner , and are adequately prepared to enter adulthood and assume a constructive role in their communities and in society at large . This general comment should be read in conjunction with the Convention and its two Optional Protocols on the sale of children , child prostitution and child pornography , and on the involvement of children in armed conflict , as well as other relevant international human rights norms and standards . Fundamental principles and other obligations of states parties As recognized by the World Conference on Human Rights ( 1993 ) and repeatedly stated by the Committee , children 's rights too are indivisible and interrelated . In addition to articles 6 and 24 , other provisions and principles of the Convention are crucial in guaranteeing that adolescents fully enjoy their right to health and development . The right to non-discrimination States parties have the obligation to ensure that all human beings below 18 enjoy all the rights set forth in the Convention without discrimination ( art . 2 ) , including with regard to “ race , colour , sex , language , religion , political or other opinion , national , ethnic or social origin , property , disability , birth or other status ” . These grounds also cover adolescents ' sexual orientation and health status ( including HIV/AIDS and mental health ) . Adolescents who are subject to discrimination are more vulnerable to abuse , other types of violence and exploitation , and their health and development are put at greater risk . They are therefore entitled to special attention and protection from all segments of society . Appropriate guidance in the exercise of rights The Convention acknowledges the responsibilities , rights and duties of parents ( or other persons legally responsible for the child ) “ to provide , in a manner consistent with the evolving capacities of the child , appropriate direction and guidance in the exercise by the child of the rights recognized in the Convention ” ( art . The Committee believes that parents or other persons legally responsible for the child need to fulfil with care their right and responsibility to provide direction and guidance to their adolescent children in the exercise by the latter of their rights . They have an obligation to take into account the adolescents ' views , in accordance with their age and maturity , and to provide a safe and supportive environment in which the adolescent can develop . Adolescents need to be recognized by the members of their family environment as active rights holders who have the capacity to become full and responsible citizens , given the proper guidance and direction . Respect for the views of the child The right to express views freely and have them duly taken into account ( art . 12 ) is also fundamental in realizing adolescents ' right to health and development . States parties need to ensure that adolescents are given a genuine chance to express their views freely on all matters affecting them , especially within the family , in school , and in their communities . In order for adolescents to be able safely and properly to exercise this right , public authorities , parents and other adults working with or for children need to create an environment based on trust , information-sharing , the capacity to listen and sound guidance that is conducive for adolescents ' participating equally including in decision-making processes . Legal and judicial measures and processes Under article 4 of the Convention , “ States parties shall undertake all appropriate legislative , administrative and other measures for the implementation of the rights recognized ” therein . In the context of the rights of adolescents to health and development , States parties need to ensure that specific legal provisions are guaranteed under domestic law , including with regard to setting a minimum age for sexual consent , marriage and the possibility of medical treatment without parental consent . These minimum ages should be the same for boys and girls ( article 2 of the Convention ) and closely reflect the recognition of the status of human beings under 18 years of age as rights holders , in accordance with their evolving capacity , age and maturity ( arts . 5 and 12 to 17 ) . Further , adolescents need to have easy access to individual complaint systems as well as judicial and appropriate non-judicial redress mechanisms that guarantee fair and due process , with special attention to the right to privacy ( art . Civil rights and freedoms The Convention defines the civil rights and freedoms of children and adolescents in its articles 13 to 17. These are fundamental in guaranteeing the right to health and development of adolescents . Article 17 states that the child has the right to “ access information and material from a diversity of national and international sources , especially those aimed at the promotion of his or her social , spiritual and moral well-being and physical and mental health ” . The right of adolescents to access appropriate information is crucial if States parties are to promote cost-effective measures , including through laws , policies and programmes , with regard to numerous health-related situations , including those covered in articles 24 and 33 such as family planning , prevention of accidents , protection from harmful traditional practices , including early marriages and female genital mutilation , and the abuse of alcohol , tobacco and other harmful substances . In order to promote the health and development of adolescents , States parties are also encouraged to respect strictly their right to privacy and confidentiality , including with respect to advice and counselling on health matters ( art . Health-care providers have an obligation to keep confidential medical information concerning adolescents , bearing in mind the basic principles of the Convention . Such information may only be disclosed with the consent of the adolescent , or in the same situations applying to the violation of an adult 's confidentiality . Adolescents deemed mature enough to receive counselling without the presence of a parent or other person are entitled to privacy and may request confidential services , including treatment . Protection from all forms of abuse , neglect , violence and exploitation States parties must take effective measures to ensure that adolescents are protected from all forms of violence , abuse , neglect and exploitation ( arts . 19 , 32-36 and 38 ) , paying increased attention to the specific forms of abuse , neglect , violence and exploitation that affects this age group . In particular , they should adopt special measures to ensure the physical , sexual and mental integrity of adolescents with disabilities , who are particularly vulnerable to abuse and neglect . States parties should also ensure that adolescents affected by poverty who are socially marginalized are not criminalized . In this regard , financial and human resources need to be allocated to promote research that would inform the adoption of effective local and national laws , policies and programmes . Policies and strategies should be reviewed regularly and revised accordingly . In taking these measures , States parties have to take into account the evolving capacities of adolescents and involve them in an appropriate manner in developing measures , including programmes , designed to protect them . In this context , the Committee emphasizes the positive impact that peer education can have , and the positive influence of proper role models , especially those in the worlds of arts , entertainment and sports . Data collection Systematic data collection is necessary for States parties to be able to monitor the health and development of adolescents . States parties should adopt data-collection mechanisms that allow desegregation by sex , age , origin and socio-economic status so that the situation of different groups can be followed . Data should also be collected to study the situation of specific groups such as ethnic and/or indigenous minorities , migrant or refugee adolescents , adolescents with disabilities , working adolescents , etc. Where appropriate , adolescents should participate in the analysis to ensure that the information is understood and utilized in an adolescent-sensitive way . Creating a safe and supportive environment The health and development of adolescents are strongly determined by the environments in which they live . Creating a safe and supportive environment entails addressing attitudes and actions of both the immediate environment of the adolescent - family , peers , schools and services - as well as the wider environment created by , inter alia , community and religious leaders , the media , national and local policies and legislation . The promotion and enforcement of the provisions and principles of the Convention , especially articles 2-6 , 12-17 , 24 , 28 , 29 and 31 , are key to guaranteeing adolescents ' right to health and development . States parties should take measures to raise awareness and stimulate and/or regulate action through the formulation of policy or the adoption of legislation and the implementation of programmes specifically for adolescents . The Committee stresses the importance of the family environment , including the members of the extended family and community or other persons legally responsible for the child or adolescent ( arts . 5 and 18 ) . While most adolescents grow up in well-functioning family environments , for some the family does not constitute a safe and supportive milieu . The Committee calls upon States parties to develop and implement , in a manner consistent with adolescents ' evolving capacities , legislation , policies and programmes to promote the health and development of adolescents by ( a ) providing parents ( or legal guardians ) with appropriate assistance through the development of institutions , facilities and services that adequately support the well-being of adolescents , including , when needed , the provision of material assistance and support with regard to nutrition , clothing and housing ( art . 27 ( 3 ) ) ; ( b ) providing adequate information and parental support to facilitate the development of a relationship of trust and confidence in which issues regarding , for example , sexuality and sexual behaviour and risky lifestyles can be openly discussed and acceptable solutions found that respect the adolescent 's rights ( art . 27 ( 3 ) ) ; ( c ) providing adolescent mothers and fathers with support and guidance for both their own and their children 's well-being ( art . 24 ( f ) , 27 ( 2-3 ) ) ; ( d ) giving , while respecting the values and norms of ethnic and other minorities , special attention , guidance and support to adolescents and parents ( or legal guardians ) , whose traditions and norms may differ from those in the society where they live ; and ( e ) ensuring that interventions in the family to protect the adolescent and , when necessary , separate her/him from the family , e. g. in case of abuse or neglect , are in accordance with applicable laws and procedures . Such laws and procedures should be reviewed to ensure that they conform to the principles of the Convention . The school plays an important role in the life of many adolescents , as the venue for learning , development and socialization . Article 29 ( 1 ) states that education must be directed to “ the development of the child 's personality , talents and mental and physical abilities to their fullest potential ” . In addition , general comment No. 1 on the aims of education states that “ Education must also be aimed at ensuring that … no child leaves school without being equipped to face the challenges that he or she can expect to be confronted with in life . Basic skills should include … the ability to make well-balanced decisions ; to resolve conflicts in a non-violent manner ; and to develop a healthy lifestyle [ and ] good social relationships … ” . Considering the importance of appropriate education for the current and future health and development of adolescents , as well as for their children , the Committee urges States parties , in line with articles 28 and 29 of the Convention to ( a ) ensure that quality primary education is compulsory and available , accessible and free to all and that secondary and higher education are available and accessible to all adolescents ; ( b ) provide well-functioning school and recreational facilities which do not pose health risks to students , including water and sanitation and safe journeys to school ; ( c ) take the necessary actions to prevent and prohibit all forms of violence and abuse , including sexual abuse , corporal punishment and other inhuman , degrading or humiliating treatment or punishment in school , by school personnel as well as among students ; ( d ) initiate and support measures , attitudes and activities that promote healthy behaviour by including relevant topics in school curricula . During adolescence , an increasing number of young people are leaving school to start working to help support their families or for wages in the formal or informal sector . Participation in work activities in accordance with international standards , as long as it does not jeopardize the enjoyment of any of the other rights of adolescents , including health and education , may be beneficial for the development of the adolescent . The Committee urges States parties to take all necessary measures to abolish all forms of child labour , starting with the worst forms , to continuously review national regulations on minimum ages for employment with a view to making them compatible with international standards , and to regulate the working environment and conditions for adolescents who are working ( in accordance with article 32 of the Convention , as well as ILO Conventions Nos. 138 and 182 ) , so as to ensure that they are fully protected and have access to legal redress mechanisms . The Committee also stresses that in accordance with article 23 ( 3 ) of the Convention , the special rights of adolescents with disabilities should be taken into account and assistance provided to ensure that the disabled child/adolescent has effective access to and receives good quality education . States should recognize the principle of equal primary , secondary and tertiary educational opportunities for disabled children/adolescents , where possible in regular schools . The Committee is concerned that early marriage and pregnancy are significant factors in health problems related to sexual and reproductive health , including HIV/AIDS . Both the legal minimum age and actual age of marriage , particularly for girls , are still very low in several States parties . There are also non-health-related concerns : children who marry , especially girls , are often obliged to leave the education system and are marginalized from social activities . Further , in some States parties married children are legally considered adults , even if they are under 18 , depriving them of all the special protection measures they are entitled under the Convention . The Committee strongly recommends that States parties review and , where necessary , reform their legislation and practice to increase the minimum age for marriage with and without parental consent to 18 years , for both girls and boys . The Committee on the Elimination of Discrimination against Women has made a similar recommendation ( general comment No. 21 of 1994 ) . In most countries accidental injuries or injuries due to violence are a leading cause of death or permanent disability among adolescents . In that respect , the Committee is concerned about the injuries and death resulting from road traffic accidents , which affect adolescents disproportionately . States parties should adopt and enforce legislation and programmes to improve road safety , including driving education for and examination of adolescents and the adoption or strengthening of legislation known to be highly effective such as the obligations to have a valid driver 's licence , wear seat belts and crash helmets , and the designation of pedestrian areas . The Committee is also very concerned about the high rate of suicide among this age group . Mental disorders and psychosocial illness are relatively common among adolescents . In many countries symptoms such as depression , eating disorders and self-destructive behaviours , sometimes leading to self-inflicted injuries and suicide , are increasing . They may be related to , inter alia , violence , ill-treatment , abuse and neglect , including sexual abuse , unrealistically high expectations , and/or bullying or hazing in and outside school . States parties should provide these adolescents with all the necessary services . Violence results from a complex interplay of individual , family , community and societal factors . Vulnerable adolescents such as those who are homeless or who are living in institutions , who belong to gangs or who have been recruited as child soldiers are especially exposed to both institutional and interpersonal violence . Under article 19 of the Convention , States parties must take all appropriate measures to prevent and eliminate : ( a ) institutional violence against adolescents , including through legislation and administrative measures in relation to public and private institutions for adolescents ( schools , institutions for disabled adolescents , juvenile reformatories , etc. ) , and training and monitoring of personnel in charge of institutionalized children or who otherwise have contact with children through their work , including the police ; and ( b ) interpersonal violence among adolescents , including by supporting adequate parenting and opportunities for social and educational development in early childhood , fostering non-violent cultural norms and values ( as foreseen in article 29 of the Convention ) , strictly controlling firearms and restricting access to alcohol and drugs . In light of articles 3 , 6 , 12 , 19 and 24 ( 3 ) of the Convention , States parties should take all effective measures to eliminate all acts and activities which threaten the right to life of adolescents , including honour killings . The Committee strongly urges States parties to develop and implement awareness-raising campaigns , education programmes and legislation aimed at changing prevailing attitudes , and address gender roles and stereotypes that contribute to harmful traditional practices . Further , States parties should facilitate the establishment of multidisciplinary information and advice centres regarding the harmful aspects of some traditional practices , including early marriage and female genital mutilation . The Committee is concerned about the influence exerted on adolescent health behaviours by the marketing of unhealthy products and lifestyles . In line with article 17 of the Convention , States parties are urged to protect adolescents from information that is harmful to their health and development , while underscoring their right to information and material from diverse national and international sources . States parties are therefore urged to regulate or prohibit information on and marketing of substances such as alcohol and tobacco , particularly when it targets children and adolescents . Information , skills development , counselling , and health services Adolescents have the right to access adequate information essential for their health and development and for their ability to participate meaningfully in society . It is the obligation of States parties to ensure that all adolescent girls and boys , both in and out of school , are provided with , and not denied , accurate and appropriate information on how to protect their health and development and practise healthy behaviours . This should include information on the use and abuse , of tobacco , alcohol and other substances , safe and respectful social and sexual behaviours , diet and physical activity . In order to act adequately on the information , adolescents need to develop the skills necessary , including self-care skills , such as how to plan and prepare nutritionally balanced meals and proper personal hygiene habits , and skills for dealing with particular social situations such as interpersonal communication , decision-making , and coping with stress and conflict . States parties should stimulate and support opportunities to build such skills through , inter alia , formal and informal education and training programmes , youth organizations and the media . In light of articles 3 , 17 and 24 of the Convention , States parties should provide adolescents with access to sexual and reproductive information , including on family planning and contraceptives , the dangers of early pregnancy , the prevention of HIV/AIDS and the prevention and treatment of sexually transmitted diseases ( STDs ) . In addition , States parties should ensure that they have access to appropriate information , regardless of their marital status and whether their parents or guardians consent . It is essential to find proper means and methods of providing information that is adequate and sensitive to the particularities and specific rights of adolescent girls and boys . To this end , States parties are encouraged to ensure that adolescents are actively involved in the design and dissemination of information through a variety of channels beyond the school , including youth organizations , religious , community and other groups and the media . Under article 24 of the Convention , States parties are urged to provide adequate treatment and rehabilitation for adolescents with mental disorders , to make the community aware of the early signs and symptoms and the seriousness of these conditions , and to protect adolescents from undue pressures , including psychosocial stress . States parties are also urged to combat discrimination and stigma surrounding mental disorders , in line with their obligations under article 2. Every adolescent with a mental disorder has the right to be treated and cared for , as far as possible , in the community in which he or she lives . Where hospitalization or placement in a psychiatric institution is necessary , this decision should be made in accordance with the principle of the best interests of the child . In the event of hospitalization or institutionalization , the patient should be given the maximum possible opportunity to enjoy all his or her rights as recognized under the Convention , including the rights to education and to have access to recreational activities . Where appropriate , adolescents should be separated from adults . States parties must ensure that adolescents have access to a personal representative other than a family member to represent their interests , when necessary and appropriate . In accordance with article 25 of the Convention , States parties should undertake periodic review of the placement of adolescents in hospitals or psychiatric institutions . Adolescents , both girls and boys , are at risk of being infected with and affected by STDs , including HIV/AIDS . States should ensure that appropriate goods , services and information for the prevention and treatment of STDs , including HIV/AIDS , are available and accessible . To this end , States parties are urged ( a ) to develop effective prevention programmes , including measures aimed at changing cultural views about adolescents ' need for contraception and STD prevention and addressing cultural and other taboos surrounding adolescent sexuality ; ( b ) to adopt legislation to combat practices that either increase adolescents ' risk of infection or contribute to the marginalization of adolescents who are already infected with STDs , including HIV ; ( c ) to take measures to remove all barriers hindering the access of adolescents to information , preventive measures such as condoms , and care . Adolescent girls should have access to information on the harm that early marriage and early pregnancy can cause , and those who become pregnant should have access to health services that are sensitive to their rights and particular needs . States parties should take measures to reduce maternal morbidity and mortality in adolescent girls , particularly caused by early pregnancy and unsafe abortion practices , and to support adolescent parents . Young mothers , especially where support is lacking , may be prone to depression and anxiety , compromising their ability to care for their child . The Committee urges States parties ( a ) to develop and implement programmes that provide access to sexual and reproductive health services , including family planning , contraception and safe abortion services where abortion is not against the law , adequate and comprehensive obstetric care and counselling ; ( b ) to foster positive and supportive attitudes towards adolescent parenthood for their mothers and fathers ; and ( c ) to develop policies that will allow adolescent mothers to continue their education . Before parents give their consent , adolescents need to have a chance to express their views freely and their views should be given due weight , in accordance with article 12 of the Convention . However , if the adolescent is of sufficient maturity , informed consent shall be obtained from the adolescent her/himself , while informing the parents if that is in the “ best interest of the child ” ( art . With regard to privacy and confidentiality , and the related issue of informed consent to treatment , States parties should ( a ) enact laws or regulations to ensure that confidential advice concerning treatment is provided to adolescents so that they can give their informed consent . Such laws or regulations should stipulate an age for this process , or refer to the evolving capacity of the child ; and ( b ) provide training for health personnel on the rights of adolescents to privacy and confidentiality , to be informed about planned treatment and to give their informed consent to treatment . Vulnerability and risk In ensuring respect for the right of adolescents to health and development , both individual behaviours and environmental factors which increase their vulnerability and risk should be taken into consideration . Environmental factors , such as armed conflict or social exclusion , increase the vulnerability of adolescents to abuse , other forms of violence and exploitation , thereby severely limiting adolescents ' abilities to make individual , healthy behaviour choices . For example , the decision to engage in unsafe sex increases adolescents ' risk of ill-health . In accordance with article 23 of the Convention , adolescents with mental and/or physical disabilities have an equal right to the highest attainable standard of physical and mental health . States parties have an obligation to provide adolescents with disabilities with the means necessary to realize their rights . States parties should ( a ) ensure that health facilities , goods and services are available and accessible to all adolescents with disabilities and that these facilities and services promote their self-reliance and their active participation in the community ; ( b ) ensure that the necessary equipment and personal support are available to enable them to move around , participate and communicate ; ( c ) pay specific attention to the special needs relating to the sexuality of adolescents with disabilities ; and ( d ) remove barriers that hinder adolescents with disabilities in realizing their rights . States parties have to provide special protection to homeless adolescents , including those working in the informal sector . Homeless adolescents are particularly vulnerable to violence , abuse and sexual exploitation from others , self-destructive behaviour , substance abuse and mental disorders . In this regard , States parties are required to ( a ) develop policies and enact and enforce legislation that protect such adolescents from violence , e. g. by law enforcement officials ; ( b ) develop strategies for the provision of appropriate education and access to health care , and of opportunities for the development of livelihood skills . Adolescents who are sexually exploited , including in prostitution and pornography , are exposed to significant health risks , including STDs , HIV/AIDS , unwanted pregnancies , unsafe abortions , violence and psychological distress . They have the right to physical and psychological recovery and social reintegration in an environment that fosters health , self-respect and dignity ( art . It is the obligation of States parties to enact and enforce laws to prohibit all forms of sexual exploitation and related trafficking ; to collaborate with other States parties to eliminate intercountry trafficking ; and to provide appropriate health and counselling services to adolescents who have been sexually exploited , making sure that they are treated as victims and not as offenders . Additionally , adolescents experiencing poverty , armed conflicts , all forms of injustice , family breakdown , political , social and economic instability and all types of migration may be particularly vulnerable . These situations might seriously hamper their health and development . By investing heavily in preventive policies and measures States parties can drastically reduce levels of vulnerability and risk factors ; they will also provide cost-effective ways for society to help adolescents develop harmoniously in a free society . Nature of States ' obligations In exercising their obligations in relation to the health and development of adolescents , States parties shall always take fully into account the four general principles of the Convention . It is the view of the Committee that States parties must take all appropriate legislative , administrative and other measures for the realization and monitoring of the rights of adolescents to health and development as recognized in the Convention . To this end , States parties must notably fulfil the following obligations : ( a ) To create a safe and supportive environment for adolescents , including within their family , in schools , in all types of institutions in which they may live , within their workplace and/or in the society at large ; ( b ) To ensure that adolescents have access to the information that is essential for their health and development and that they have opportunities to participate in decisions affecting their health ( notably through informed consent and the right of confidentiality ) , to acquire life skills , to obtain adequate and age-appropriate information , and to make appropriate health behaviour choices ; ( c ) To ensure that health facilities , goods and services , including counselling and health services for mental and sexual and reproductive health , of appropriate quality and sensitive to adolescents ' concerns are available to all adolescents ; ( d ) To ensure that adolescent girls and boys have the opportunity to participate actively in planning and programming for their own health and development ; ( e ) To protect adolescents from all forms of labour which may jeopardize the enjoyment of their rights , notably by abolishing all forms of child labour and by regulating the working environment and conditions in accordance with international standards ; ( f ) To protect adolescents from all forms of intentional and unintentional injuries , including those resulting from violence and road traffic accidents ; ( g ) To protect adolescents from all harmful traditional practices , such as early marriages , honour killings and female genital mutilation ; ( h ) To ensure that adolescents belonging to especially vulnerable groups are fully taken into account in the fulfilment of all aforementioned obligations ; ( i ) To implement measures for the prevention of mental disorders and the promotion of mental health of adolescents . The Committee draws the attention of States parties to the general comment No. 14 on the right to the highest attainable standard of health of the Committee on Economic , Social and Cultural Rights which states that , “ States parties should provide a safe and supportive environment for adolescents that ensures the opportunity to participate in decisions affecting their health , to build life skills , to acquire appropriate information , to receive counselling and to negotiate the health-behaviour choices they make . The realization of the right to health of adolescents is dependent on the development of youth-sensitive health care , which respects confidentiality and privacy and includes appropriate sexual and reproductive health services . ” In accordance with articles 24 , 39 and other related provisions of the Convention , States parties should provide health services that are sensitive to the particular needs and human rights of all adolescents , paying attention to the following characteristics : ( a ) Availability . Primary health care should include services sensitive to the needs of adolescents , with special attention given to sexual and reproductive health and mental health ; ( b ) Accessibility . Health facilities , goods and services should be known and easily accessible ( economically , physically and socially ) to all adolescents , without discrimination . Confidentiality should be guaranteed , when necessary ; ( c ) Acceptability . While fully respecting the provisions and principles of the Convention , all health facilities , goods and services should respect cultural values , be gender sensitive , be respectful of medical ethics and be acceptable to both adolescents and the communities in which they live ; ( d ) Quality . Health services and goods should be scientifically and medically appropriate , which requires personnel trained to care for adolescents , adequate facilities and scientifically accepted methods . States parties should , where feasible , adopt a multisectoral approach to the promotion and protection of adolescent health and development by facilitating effective and sustainable linkages and partnerships among all relevant actors . At the national level , such an approach calls for close and systematic collaboration and coordination within Government , so as to ensure the necessary involvement of all relevant government entities . Public health and other services utilized by adolescents should also be encouraged and assisted in seeking collaboration with , inter alia , private and/or traditional practitioners , professional associations , pharmacies and organizations that provide services to vulnerable groups of adolescents . A multisectoral approach to the promotion and protection of adolescent health and development will not be effective without international cooperation . Therefore , States parties should , when appropriate , seek such cooperation with United Nations specialized agencies , programmes and bodies , international NGOs and bilateral aid agencies , international professional associations and other non-State actors . Notes These include the International Covenant on Civil and Political Rights , the International Covenant on Economic , Social and Cultural Rights , the Convention against Torture and Other Cruel , Inhuman or Degrading Treatment or Punishment , the International Convention on the Elimination of All Forms of Racial Discrimination , the International Convention on the Protection of the Rights of All Migrant Workers and Members of Their Families and the Convention on the Elimination of All Forms of Discrimination Against Women . See also the reports of the Committee 's days of general discussion on “ Violence against children ” held in 2000 and 2001 and the Recommendations adopted in this regard ( see CRC/C/100 , chap . V and CRC/C/111 , chap . 