
﻿ Charter of the United Nations -------------------------------------------------------------------------------- INTRODUCTORY NOTE The Charter of the United Nations was signed on 26 June 1945 , in San Francisco , at the conclusion of the United Nations Conference on International Organisation , and came into force on 24 October 1945. The Statute of the International Court of Justice is an integral part of the Charter . Amendments to Articles 23 , 27 and 61 of the Charter were adopted by the General Assembly on 17 December 1963 and came into force on 31 August 1965. A further amendment to Article 61 was adopted by the General Assembly on 20 December 1971 , and came into force on 24 September 1973. An amendment to Article 109 , adopted by the General Assembly on 20 December 1965 , came into force on 12 June 1968. The amended Article 27 provides that decisions of the Security Council on procedural matters shall be made by an affirmative vote of nine members ( formerly seven ) and on all other matters by an affirmative vote of nine members ( formerly seven ) , including the concurring votes of the five permanent members of the Security Council . The amendment to Article 61 , which entered into force on 31 August 1965 , enlarged the membership of the Economic and Social Council from eighteen to twenty-seven . The subsequent amendment to that Article , which entered into force on 24 September 1973 , further increased the membership of the Council from twenty-seven to fifty-four . The amendment to Article 109 , which relates to the first paragraph of that Article , provides that a General Conference of Member States for the purpose of reviewing the Charter may be held at a date and place to be fixed by a two-thirds vote of the members of the General Assembly and by a vote of any nine members ( formerly seven ) of the Security Council . Paragraph 3 of Article 109 , which deals with the consideration of a possible review conference during the tenth regular session of the General Assembly , has been retained in its original form in its reference to a “ vote , of any seven members of the Security Council ” , the paragraph having been acted upon in 1955 by the General Assembly , at its tenth regular session , and by the Security Council . PREAMBLE TO THE CHARTER OF THE UNITED NATIONS WE THE PEOPLES OF THE UNITED NATIONS , DETERMINED to save succeeding generations from the scourge of war , which twice in our lifetime has brought untold sorrow to mankind , and to reaffirm faith in fundamental human rights , in the dignity and worth of the human person , in the equal rights of men and women and of nations large and small , and to establish conditions under which justice and respect for the obligations arising from treaties and other sources of international law can be maintained , and to promote social progress and better standards of life in larger freedom , AND FOR THESE ENDS to practice tolerance and live together in peace with one another as good neighbours , and to unite our strength to maintain international peace and security , and to ensure , by the acceptance of principles and the institution of methods , that armed force shall not be used , save in the common interest , and to employ international machinery for the promotion of the economic and social advancement of all peoples , HAVE RESOLED TO COMBINE OUR EFFORTS TO ACCOMPLISH THESE AIMS Accordingly , our respective Governments , through representatives assembled in the city of San Francisco , who have exhibited their full powers found to be in good and due form , have agreed to the present Charter of the United Nations and do hereby establish an international organization to be known as the United Nations . CHAPTER I PURPOSES AND PRINCIPLES Article 1 The Purposes of the United Nations are : 1. To maintain international peace and security , and to that end : to take effective collective measures for the prevention and removal of threats to the peace , and for the suppression of acts of aggression or other breaches of the peace , and to bring about by peaceful means , and in conformity with the principles of justice and international law , adjustment or settlement of international disputes or situations which might lead to a breach of the peace ; 2. To develop friendly relations among nations based on respect for the principle of equal rights and self-determination of peoples , and to take other appropriate measures to strengthen universal peace ; 3. To achieve international co-operation in solving international problems of an economic , social , cultural , or humanitarian character , and in promoting and encouraging respect for human rights and for fundamental freedoms for all without distinction as to race , sex , language , or religion ; and 4. To be a centre for harmonizing the actions of nations in the attainment of these common ends . Article 2 The Organization and its Members , in pursuit of the Purposes stated in Article 1 , shall act in accordance with the following Principles . 1. The Organization is based on the principle of the sovereign equality of all its Members . 2. All Members , in order to ensure to all of them the rights and benefits resulting from membership , shall fulfil in good faith the obligations assumed by them in accordance with the present Charter . 3. All Members shall settle their international disputes by peaceful means in such a manner that international peace and security , and . justice , are not endangered . 4. All Members shall refrain in their international relations from the threat or use of force against the territorial integrity or political independence of any state , or in any other manner inconsistent with the Purposes of the United Nations . 5. All Members shall give the United Nations every assistance in any action it takes in accordance with the present Charter , and shall refrain from giving assistance to any state against which the United Nations is taking preventive or enforcement action . 6. The Organization shall ensure that states which are not Members of the United Nations act in accordance with these Principles so far as may be necessary for the maintenance of international peace and security . 7. Nothing contained in the present Charter shall authorize the United Nations to intervene in matters which are essentially within the domestic jurisdiction of any state or shall require the Members to submit such matters to settlement under the present Charter ; but this principle shall not prejudice the application of enforcement measures under Chapter VII . CHAPTER II MEMBERSHIP Article 3 The original Members of the United Nations shall be the states which , having participated in the United Nations Conference on International Organization at San Francisco , or having previously signed the Declaration by United Nations of 1 January 1942 , sign the present Charter and ratify it in accordance with Article 110. Article 4 1. Membership in the United Nations is open to a other peace-loving states which accept the obligations contained in the present Charter and , in the judgment of the Organization , are able and willing to carry out these obligations . 2. The admission of any such state to membership in the Nations will be effected by a decision of the General Assembly upon the recommendation of the Security Council . Article 5 A Member of the United Nations against which preventive or enforcement action has been taken by the Security Council may be suspended from the exercise of the rights and privileges of membership by the General Assembly upon the recommendation of the Security Council . The exercise of these rights and privileges may be restored by the Security Council . Article 6 A Member of the United Nations which has persistently violated the Principles contained in the present Charter may be ' expelled from the Organization by the General Assembly upon the recommendation of the Security Council . CHAPTER III ORGANS Article 7 1. There are established as the principal organs of the United Nations : a General Assembly , a Security Council , an Economic and Social Council , a Trusteeship Council , an International Court of Justice , and a Secretariat . 2. Such subsidiary organs as may be found necessary may be established in accordance with the present Charter . Article 8 The United Nations shall place no restrictions on the eligibility of men and women to participate in any capacity and under conditions of equality in its principal and subsidiary organs . CHAPTER IV THE GENERAL ASSEMBLY Composition Article 9 1. The General Assembly shall consist of all the Members of the United Nations . 2. Each Member shall have not more than five representatives in the General Assembly . Functions and Powers Article 10 The General Assembly may discuss any questions or any matters within the scope of the present Charter or relating to the powers and functions of any organs provided for in the present Charter , and , except as provided in Article 12 , may make recommendations to the Members of the United Nations or to the Security Council or to both on any such questions or matters . Article 11 1. The General Assembly may consider the general principles of co-operation in the maintenance of international peace and security , including the principles governing disarmament and the regulation of armaments , and may make recommendations with regard to such principles to the Members or to the Security Council or to both . 2. The General Assembly may discuss any questions relating to the maintenance of international peace and security brought before it by any Member of the United Nations , or by the Security Council , or by a state which is not a Member of the United Nations in accordance with Article 35 , paragraph 2 , and , except as provided in Article 12 , may make recommendations with regard to any such questions to the state or states concerned or to the Security Council or to both . Any such question on which action is necessary shall be referred to the Security Council by the General Assembly either before or after discussion . 3. The General Assembly may call the attention of the Security Council to situations which are likely to endanger international peace and security . 4. The powers of the General Assembly set forth in this Article shall not limit the general scope of Article 10. Article 12 1. While the Security Council is exercising in respect of any dispute or situation the functions assigned to it in the present Charter , the General Assembly shall not make any recommendation with regard to that dispute or situation unless the Security Council so requests . 2. The Secretary-General , with the consent of the Security Council , shall notify the General Assembly at each session of any matters relative to the maintenance of international peace and security which are being dealt with by the Security Council and similarly notify the General Assembly , or the Members of the United Nations if the General Assembly is not in session , immediately the Security Council ceases to deal with such matters . Article 13 1. The General Assembly shall initiate studies and make recommendations for the purpose of : a. promoting international co-operation in the political field and encouraging the progressive development of international law and its codification ; b. promoting international co-operation in the economic , social , cultural , educational , and health fields , an assisting in the realization of human rights and fundamental freedoms for all without distinction as to race , sex , language , or religion . 2. The further responsibilities , functions and powers of the General with respect to matters mentioned in paragraph ) above are set forth in Chapters IX and X. Article 14 Subject to the provisions of Article 12 , the General Assembly may recommend measures for the peaceful adjustment of any situation , regardless of origin , which it deems likely to impair the general welfare or friendly relations among nations , including situations resulting from a violation of the provisions of the present Charter setting forth the Purposes and Principles of the United Nations . Article 15 1. The General Assembly shall receive and consider annual and special reports from the Security Council ; these reports shall include an account of the measures that the Security Council has decided upon or taken to maintain international peace and security . 2. The General Assembly shall receive and consider reports from the other organs of the United Nations . Article 16 The General Assembly shall perform such functions with respect to the international trusteeship system as are assigned to it under Chapters XII and XIII , including the approval of the trusteeship agreements for areas not designated as strategic . Article 17 1. The Genera Assembly shall consider and approve the budget of the Organization . 2. The expenses of the Organization shall be borne by the Members as apportioned by the General Assembly . 3. The Assembly shall consider and approve any financial and budgetary arrangements with specialize agencies referred to in Article 57 and shall examine the administrative budgets of such specialized agencies with a view to making recommendations to the agencies concerned . Voting Article 18 1. Each member of the General Assembly shall have one vote . 2. Decisions of the General Assembly on important questions shall be made by a two-thirds majority of the members present and voting . These questions shall include : recommendations with respect to the maintenance of international peace and security , the election of the non-permanent members of the Security Council , the election of the members of the Economic and Social Council , the election of members of the Trusteeship Council in accordance with paragraph 1 of Article 86 , the admission of new Members to the United Nations , the suspension of the rights and privileges of membership , the expulsion of Members , questions relating to the operation of the trusteeship system , and budgetary questions . 3. Decisions on other questions , including the determination of additional categories of questions to be decided by a two-thirds majority , shall be made by a majority of the members present and voting . Article 19 A Member of the United Nations which is in arrears in the payment of its financial contributions to the Organization shall have no vote in the General Assembly if the amount of its arrears equals or exceeds the amount of the contributions due from it for the preceding two full years . The General Assembly may , nevertheless , permit such a Member to vote if it is satisfied that the failure to pay is due to conditions beyond the of the Member . Procedure Article 20 The General Assembly shall meet in regular annual sessions and in such special sessions as occasion may require . Special sessions shall be convoked by the Secretary-General at the request of the Security Council or of a majority of the Members of the United Nations . Article 21 The General Assembly shall adopt its own rules of procedure . It shall elect its President for each session . Article 22 The General Assembly may establish such subsidiary organs as it deems necessary for the performance of its functions . CHAPTER V THE SECURITY COUNCIL Composition Article 23 1. The Security Council shall consist of fifteen Members of the United Nations . The Republic of China , France , the Union of Soviet Socialist , the United Kingdom of Great Britain and Northern Ireland , and the United States of America shall be permanent members of the Security Council . The General Assembly shall elect ten other Members of the United Nations to be non-permanent members of the Security Council , due regard being specially paid , in the first instance to the contribution of Members of the United Nations to the maintenance of international peace and security and to the other purposes of the Organization , and also to equitable geographical distribution . 2. The non-permanent members of the Security Council shall be elected for a term of two years . In the first election of the non-permanent members after the increase of the membership of the Security Council from eleven to fifteen , two of the four additional members shall be chosen for a term of one year . A retiring member shall not be eligible for immediate re-election . 3. Each member of the Security Council shall have one representative . Functions and Powers Article 24 1. In order to ensure prompt and effective action by the United Nations , its Members confer on the Security Council primary responsibility for the maintenance of international peace and security , and agree that in carrying out its duties under this responsibility the Security Council acts on their behalf . 2. In discharging these duties the Security Council shall act in accordance with the Purposes and Principles of the United Nations . The specific powers granted to the Security Council for the discharge of these duties are laid down in Chapters VI , VII , VIII , and XII . 3. The Security Council shall submit annual and , when necessary , special reports to the General Assembly for its consideration . Article 25 The Members of the United Nations agree to accept and carry out the decisions of the Security Council in accordance with the present Charter . Article 26 In order to promote the establishment and maintenance of international peace and security with the least diversion for armaments of the world 's human and economic resources , the Security Council shall be responsible for formulating , with the assistance of the Military Staff Committee referred to in Article 47 , plans to be submitted to the Members of the United-Nations for the establishment of a system for the regulation of armaments . Voting Article 27 1. Each member of the Security Council shall have one vote . 2. Decisions of the Security Council on procedural matters shall be made by an affirmative vote of nine members . 3. Decisions of the Security Council on all other matters shall be made by an affirmative vote of nine members including the concurring votes of the permanent members ; provided that , in decisions under Chapter VI , and under paragraph 3 of Article 52 , a party to a dispute shall abstain from voting . Procedure Article 28 1. The Security Council shall be so organized as to be able to function continuously . Each member of the Security Council shall for this purpose be represented at times at the seat of the Organization . 2. The Security Council shall hold meetings at which each of its members may , if it so desires , be represented by a member of the government or by some other specially designated representative . 3. The Security Council may hold meetings at such places other than the seat of the Organization as in its judgment will best facilitate its work . Article 29 The Security Council may establish such subsidiary organs as it deems necessary for the performance of its functions . Article 30 The Security Council shall adopt its own rules of procedure , including the method of selecting its President . Article 31 Any Member of the United Nations which is not a member of the Security Council may participate , without vote , in the discussion of any question brought before the Security Council whenever the latter considers that the interests of that Member are specially affected . Article 32 Any Member of the United Nations which is not a member of the Security Council or any state which is not a Member of the United Nations , if it is a party to a dispute under consideration by the Security Council , shall be invited to participate , without vote , in the discussion relating to the dispute . The Security Council shall any down such conditions as it deems just for the participation of a state which is not a Member of the United Nations . CHAPTER VI PACIFIC SETTLEMENT OF DISPUTES Article 33 1. The parties to any dispute , the continuance of which is likely to endanger the maintenance of international peace and security , shall , first of a , seek a solution by negotiation , enquiry , mediation , conciliation , arbitration , judicial settlement , resort to regional agencies or arrangements , or other peaceful means of their own choice . 2. The Security Council shall , when it deems necessary , call upon the parties to settle their dispute by such means . Article 34 The Security Council may investigate any dispute , or any situation which might lead to international friction or give rise to a dispute , in order to determine whether the continuance of the dispute or situation is likely to endanger the maintenance of international peace and security . Article 35 l. Any Member of the United Nations may bring any dispute , ~r any situation of the nature referred to in Article 34 , to the attention of the Security Council or of the General Assembly . 2. A state which is not a Member of the United Nations may bring to the attention of the Security Council or of the General Assembly any dispute to which it is a party if it accepts in advance , for the purposes of the dispute , the obligations of pacific settlement provided in the present Charter . 3. The proceedings of the General Assembly in respect of matters brought to its attention under this Article will be subject to the provisions of Articles 11 and 12. Article 36 1. The Security Council may , at any stage of a dispute of the nature referred to in Article 33 or of a situation of like nature , recommend appropriate procedures or methods of adjustment . 2. The Security Council should take into consideration any procedures for the settlement of the dispute which have already been adopted by the parties . 3. In making recommendations under this Article the Security Council should also take into consideration that legal disputes should as a general rule be referred by the parties to the International Court of Justice in accordance with the provisions of the Statute of the Court . Article 37 1. Should the parties to a dispute of the nature referred to in Article 33 fail to settle it by the means indicated in that Article , they shall refer it to the Security Council . 2. If the Security Council deems that the continuance of the dispute is in fact likely to endanger the maintenance of international peace and security , it shall decide whether to take action under Article 36 or to recommend such terms of settlement as it may consider appropriate . Article 38 Without prejudice to the provisions of Articles 33 to 37 , the Security Council may , if all the parties to any dispute so request , make recommendations to the parties with a view to a pacific settlement of the dispute . CHAPTER VII ACTION WITH RESPECT TO THREATS TO THE PEACE , BREACHES OF THE PEACE , AND ACTS OF AGGRESSION Article 39 The Security Council shall determine the existence of any threat to the peace , breach of the peace , or act of aggression and shall make recommendations , or decide what measures shall be taken in accordance with Articles 4 and 42 , to maintain or restore international peace and security . Article 40 In order to prevent an aggravation of the situation , the Security Council may , before making the recommendations or deciding upon the measures provided for in Article 39 , call upon the parties concerned to comply with such provisional measures as it deems necessary or desirable . Such provisional measures shall be without prejudice to the rights , claims , or position of the parties concerned . The Security Council shall duly take account of failure to comply with such provisional measures . Article 41 The Security Council may decide what measures not involving the use of armed force are to be employed to give effect to its decisions , and it may call upon the Members of the United Nations to apply such measures . These may include complete or partial interruption of economic relations and of rail , sea , air , postal , telegraphic , radio , and other means of communication , and the severance of diplomatic relations . Article 42 Should the Security Council consider that measures provided for in Article 41 would be inadequate or have proved to be inadequate , it may take such action by air , sea , or land forces as may be necessary to maintain or restore international peace and security . Such action may include demonstrations , blockade , and other operations by air , sea , or land forces of Members of the United Nations . Article 43 1. All Members of the United Nations , in order to contribute to the maintenance of international peace and security , undertake to make available to the Security Council , on its and in accordance with a special agreement or agreements , armed forces , assistance , and facilities , including rights of passage , necessary for the purpose of maintaining international peace and security . 2. Such agreement or agreements shall govern the numbers and types of forces , their degree of readiness and general location , and the nature of the facilities and assistance to be provided . 3. The agreement or agreements shall be negotiated as soon as possible on the initiative of the Security Council . They shall be concluded between the Security Council and Members or between the Security Council and groups of Members and shall be subject to ratification by the signatory states in accordance with their respective constitutional processes . Article 44 When Security Council has decided to use force it shall , before calling upon a Member not represented on it to provide armed forces in fulfilment of the obligations assumed under Article 43 , invite that Member , if the Member so desires , to participate in the decisions of the Security Council concerning the employment of contingents of that Member 's armed forces . Article 45 In order to enable the Nations to take urgent military measures , Members shall hold immediately available national air-force contingents for combined international enforcement action . The strength and degree of readiness of these contingents and plans for their combined action shall be determined , within the limits laid down in the special agreement or agreements referred to in Article 43 , by the Security Council with the assistance of the Military Committee . Article 46 Plans for the application of armed force shall be made by the Security Council with the assistance of the Military Staff Committee . Article 47 1. There shall be established a Military Staff Committee to advise and assist the Security Council on questions relating to the Security Council 's military requirements for the maintenance of international peace and security , the employment and command of forces placed at its disposal , the regulation of armaments , and possible disarmament . 2. The Military Staff Committee consist of the Chiefs of Staff of the permanent members of the Security Council or their representatives . Any Member of the United Nations not permanently represented on the Committee shall be invited by the Committee to be associated with it when the efficient discharge of the Committee 's responsibilities requires the participation of that Member its work . 3. The Military Staff Committee be responsible under the Security Council for the strategic direction of any armed forces paced at the disposal of the Security Council . Questions relating to the command of such forces shall be worked out subsequently . 4. The Military Staff Committee , with the authorization of the security Council and after consultation with appropriate regional agencies , may establish sub-committees . Article 48 1. The action required to carry out the decisions of the Security Council for the maintenance of international peace and security shall be taken by all the Members of the United Nations or by some of them , as the Security Council may determine . 2. Such decisions shall be carried out by the Members of the United Nations directly and through their action in the appropriate international agencies of which they are members . Article 49 The Members of the United Nations shall join in affording mutual assistance in carrying out the measures decided upon by the Security Council . Article 50 If preventive or enforcement measures against any state are taken by the Security Council , any other state , whether a Member of the United Nations or not , which finds itself confronted with special economic problems arising from the carrying out of those measures shall have the right to consult the Security Council with regard to a solution of those problems . Article 51 Nothing in the present Charter shall impair the inherent right of individual or collective self-defence if an armed attack occurs against a Member of the United Nations , until the Security Council has taken measures necessary to maintain international peace and security . Measures taken by Members in the exercise of this right of self-defence shall be immediately reported to the Security Council and shall not in any way affect the authority and responsibility of the Security Council under the present Charter to take at any time such action as it deems necessary in order to maintain or restore international peace and security . CHAPTER VIII REGIONAL ARRANGEMENTS Article 52 1. Nothing in the present Charter the existence of regional arrangements or agencies for dealing with such matters relating to the maintenance of international peace and security as are appropriate fur regional action , provided that such arrangements or agencies and their activities are consistent with the Purposes and Principles of the United Nations . 2. The Members of the United Nations entering into such arrangements or constituting such agencies shall make every effort to achieve pacific settlement of local disputes through such regional arrangements or by such regional agencies before referring them to the Security Council . 3. The Security Council shall encourage the development of pacific settlement of local disputes through such regional arrangements or by such regional agencies either on the initiative of the states concerned or by reference from the Security Council . 4. This Article in no way the application of Articles 34 and 35. Article 53 1. The Security Council shall , where appropriate , utilize such regional arrangements or agencies for enforcement action under its authority . But no enforcement action shall be taken under regional arrangements or by regional agencies without the authorization of the Security Council , with the exception of measures against any enemy state , as defined in paragraph 2 of this Article , provided for pursuant to Article 107 or in regional arrangements directed against renewal of aggressive policy on the part of any such state , until such time as the Organization may , on request of the Governments concerned , be charged with the responsibility for preventing further aggression by such a state . 2. The term enemy state as used in paragraph 1 of this Article applies to any state which during the Second World War has been an enemy of any signatory of the present Charter . Article 54 The Security Council shall at all times be kept fully informed of activities undertaken or in contemplation under regional arrangements or by regional agencies for the maintenance of international peace and security . CHAPTER IX INTERNATIONAL ECONOMIC AND SOCIAL CO-OPERATION Article 55 With a view to the creation of conditions of stability and well-being which are necessary for peaceful and friendly relations among nations based on respect for the principle of equal rights and self-determination of peoples , the United Nations shall promote : a. higher standards of living , fu employment , and conditions of economic and social progress and development ; b. solutions of international economic , social , health , and related problems ; and international cultural and educational cooperation ; and c. universal respect for , and observance of , human rights and fundamental freedoms for all without distinction as to race , sex , language , or religion . Article 56 All Members pledge themselves to take joint and separate action in co-operation with the Organization for the achievement of the purposes set forth in Article 55. Article 57 1. The various specialized agencies , established by intergovernmental agreement and having wide international responsibilities , as defined in their basic instruments , in economic , social , cultural , educational , health , and related fields , shall be brought into relationship with the United Nations in accordance with the provisions of Article 63. 2. Such agencies thus brought into relationship with the United Nations are hereinafter referred to as specialized agencies . Article 58 The Organization shall make recommendations for the co-ordination of the policies and activities of the specialized agencies . Article 59 The Organization shall , where appropriate , initiate negotiations among the states concerned for the creation of any new specialized agencies required for the accomplishment of the purposes set forth in Article 55. Article 60 Responsibility for the discharge of the functions of the Organization set forth in this Chapter shall be vested in the General Assembly and , under the authority of the General Assembly , in the Economic and Social Council , which shall have for this purpose the powers set forth in Chapter X. CHAPTER X THE ECONOMIC AND SOCIAL COUNCIL Composition Article 61 1. The Economic and Social Council shall consist of fifty-four Members of the United Nations elected by the General Assembly . 2. Subject to the provisions of paragraph 3 , eighteen members of the Economic and Social Council shall be elected each year for a term of three years . A retiring member shall be eligible for immediate re-election . 3. At the first election after the increase in the membership of the Economic and Social Council from twenty-seven to fifty-four members , in addition to the members elected in place of the nine members whose term of office expires at the end of that year , twenty-seven additional members shall be elected . Of these twenty-seven additional members , the term of office of nine members so elected shall expire at the end of one year , and of nine other members at the end of two years , in accordance with arrangements made by the General Assembly . 4. Each member of the Economic and Social Council shall have one representative . Functions and Powers Article 62 1. The Economic and Social Council may make or initiate studies and reports with respect to international economic , social , cultural , educational , health , and related matters and may make recommendations with respect to any such matters to the General Assembly , to the Members of the United Nations , and to the specialized agencies concerned . 2. It may make recommendations for the purpose of promoting respect for , and observance of , human rights and fundamental freedoms for all . 3. It may prepare draft conventions for submission to the General Assembly , with respect to matters falling within its competence . 4. It may call , in accordance with the rules prescribed by the United Nations , international conferences on matters falling within its competence . Article 63 1. The Economic and Social Council may enter into agreements with any of the agencies referred to in Article 57 , defining the terms on which the agency concerned shall be brought into relationship with the United Nations . Such agreements shall be subject to approval by the General Assembly . 2. It may co-ordinate the activities of the specialized agencies through consultation with and recommendations to such agencies and through recommendations to the General Assembly and to the Members of the United Nations . Article 64 1. The Economic and Social Council may take appropriate steps to obtain regular reports from the specialized agencies . may make arrangements with the Members of the United Nations and with the specialized agencies to obtain reports on the steps taken to give effect to its own recommendations and to recommendations on matters falling within its competence made by the General Assembly . 2. It may communicate its observations on these reports to the General Assembly . Article 65 The Economic and Social Council may furnish information to the Security Council and shall assist the Security Council upon its request . Article 66 1. The Economic and Social Council shall perform such functions as fall within its competence in connexion with the carrying out of the recommendations of the General Assembly . 2. It may , with the approval of the General Assembly , perform services at the request of Members of the United Nations and at the request of specialized agencies . 3. It shall perform such other functions as are specified elsewhere in the present Charter or as may be assigned to it by the General Assembly . Voting Article 67 1. Each member of the Economic and Social Council shall have one vote . 2. Decisions of the Economic and Social Council shall be made by a majority of the members present and voting . Procedure Article 68 The Economic and Social Council shall set up commissions in economic and social fields and for the promotion of human rights , and such other commissions as may for the performance of its functions . Article 69 The Economic and Social Council shall invite any Member of the United Nations to participate , without vote , in its deliberations on any matter of particular concern to that Member . Article 70 The Economic and Social Council may make arrangements for representatives of the specialized agencies to participate , without vote , in its deliberations and in those of the commissions established by it , and for its representatives to participate in the deliberations of the specialized agencies . Article 71 The Economic and Social Council may make suitable arrangements for consultation with non-governmental organizations which are concerned with matters within its competence . Such arrangements may be made with international organizations and , where appropriate , with national organizations after consultation with the Member of the United Nations concerned . Article 72 1. The Economic and Social Council shall adopt its own rules of procedure , including the method of selecting its President . 2. The Economic and Social Council shall meet as required in accordance with its rules , which shall include provision for the convening of meetings on the request of a majority of its members . CHAPTER XI DECLARATION REGARDING NON-SELF-GOVERNING TERRITORIES Article 73 Members of the United Nations which have or assume responsibilities for the administration of territories whose peoples have not yet attained a full measure of self-government recognize the principle that the interests of the inhabitants of these territories are paramount , and accept as a sacred trust the obligation to promote to the utmost , within the system of international peace and security established by the present Charter , the well-being of the inhabitants of these territories , and , to this end : a. to ensure , with due respect for the culture of the peoples concerned , their political , economic , social , and educational advancement , their just treatment , and their protection against abuses ; b. to develop self-government , to take due account of the political aspirations of the peoples , and to assist them in the progressive development of their free political institutions , according to the particular circumstances of each territory and its peoples and their varying stages of advancement ; c. to further international peace and security ; d. to promote constructive measures of development , to encourage research , and to co-operate with one another and , when and where appropriate , with specialized international bodies with a view to the practical achievement of the social , economic , and scientific purposes set forth in this Article ; and e. to transmit regularly to the Secretary-General for information purposes , subject to such limitation as security and constitutional considerations may require , statistical and other information of a technical nature relating to economic , social , and educational conditions in the territories for which they are respectively responsible other than those territories to which Chapters XII and XIII apply . Article 74 Members of the United Nations also agree that their policy in respect of the territories to which this Chapter applies , no less than in respect of their metropolitan areas , must be based on the general principle of good-neigh-bourliness , due account being taken of the interests and well-being of the rest of the world , in social , economic , and commercial matters . CHAPTER XII INTERNATIONAL TRUSTEESHIP SYSTEM Article 75 The United Nations shall establish under its authority an international trusteeship system for the administration and supervision of such territories as may be placed thereunder by subsequent individual agreements . These territories are hereinafter referred to as trust territories . Article 76 The basic objectives of the trusteeship system , in accordance with the Purposes of the United Nations laid down in Article 1 of the present Charter , shall be : a. to further international peace and security ; b. to promote the political , economic , social , and educational advancement of the inhabitants of the trust territories , and their progressive development towards self-government or independence as may be appropriate to the particular circumstances of each territory and its peoples and the freely expressed wishes of the peoples concerned , and as may be provided by the terms of each trusteeship agreement ; c. to encourage respect for human rights and for fundamental freedoms for all without distinction as to race , sex , language , or religion , and to encourage recognition of the interdependence of the peoples of the world ; and d. to ensure equal treatment in social , economic , and commercial matters for all Members of the United Nations and their , and also equal treatment for the latter in the administration of justice , without prejudice to the attainment of the foregoing objectives and subject to the provisions of Article 80. Article 77 1. The trusteeship system shall apply to such territories in the following categories as may be placed thereunder by means of trusteeship agreements : a. territories now held under mandate ; b. territories which may be detached from enemy states as a result of the Second World War ; and c. territories voluntarily placed under the system by states responsible for their administration . 2. It will be a matter for subsequent agreement as to which territories in the foregoing categories will be brought under the trusteeship system and upon what terms . Article 78 The trusteeship system shall not apply to territories which have become Members of the United Nations , relationship among which shall be based on respect for the principle of sovereign equality . Article 79 The terms of trusteeship for each territory to be placed under the trusteeship system , including any alteration or amendment , shall be agreed upon by the states directly concerned , including the mandatory power in the case of territories held under mandate by a Member of the United Nations , and shall be approved as provided for in Articles 83 and 85. Article 80 1. Except as may be agreed upon in individual trusteeship agreements , made under Articles 77 , 79 , and 81 , placing each territory under the trusteeship system , and until such agreements have been concluded , nothing in this Chapter shall be construed in or of itself to alter in any manner the rights whatsoever of any states or any peoples or the terms of existing international instruments to which Members of the United Nations may respectively be parties . 2. Paragraph 1 of this Article shall not be interpreted as giving grounds for delay or postponement of the negotiation and conclusion of agreements for placing mandated and other territories under the trusteeship system as provided for in Article 77. Article 81 The trusteeship agreement shall in each case include the terms under which the trust territory will be administered and designate the authority which will exercise the administration of the trust territory . Such authority , hereinafter called the administering authority , may be one or more states or the Organization itself . Article 82 There may be designated , in any trusteeship agreement , a strategic area or areas which may include part or all of the trust territory to which the agreement applies , without prejudice to any special agreement or agreements made under Article 43. Article 83 1. All functions of the United Nations relating to strategic areas , including the approval of the terms of the trusteeship agreements and of their alteration or amendment , shall be exercised by the Security Council . 2. he basic objectives set forth in Article 76 shall be applicable to the people of each strategic area . 43 3. The Security Council shall , subject to the provisions of the trusteeship agreements and without prejudice to security considerations , avail itself of the assistance of the Trusteeship Council to perform those functions of the United Nations under the trusteeship system relating to political , economic , social , and educational matters in the strategic areas . Article 84 It shall be the duty of the administering authority to ensure that the trust territory shall play its part in the maintenance of international peace and security . To this end the administering authority may make use of volunteer forces , facilities , and assistance from the trust territory in carrying out the obligations towards the Security Council undertaken in this regard by the administering authority , as well as for local defence and the maintenance of law and order within the trust territory . Article 85 1. The functions of the United Nations with regard to trusteeship agreements for all areas not designated as strategic , including the approval of the terms of the trusteeship agreements and of their alteration or amendment , shall be exercised by the General Assembly . 2. The Trusteeship Council , operating under the authority of the General Assembly , shall assist the General Assembly in carrying out these functions . CHAPTER XIII THE TRUSTEESHIP COUNCIL Composition Article 86 1. The Trusteeship Council shall consist of the following Members of the United Nations : a. those Members administering trust territories ; b. such of those Members mentioned by name in Article 23 as are not administering trust territories ; and c. as many other Members elected for three-year terms by the General Assembly as may be necessary to ensure that the total number of members of the Trusteeship Council is equally divided between those Members of the United Nations which administer trust territories and those which do not . 2. Each member of the Trusteeship Council shall designate one specially qualified person to represent it therein . Functions and Powers Article 87 The General Assembly and , under its authority , the Trusteeship Council , in carrying out their functions , may : a. consider reports submitted by the administering authority ; b. accept petitions and examine them in consultation with the administering authority ; c. provide for periodic visits to the respective trust territories at times agreed upon with the administering authority ; and d. take these and other actions in conformity with the terms of the trusteeship agreements . Article 88 The Trusteeship Council shall formulate a questionnaire on the political , economic , social , and educational advancement of the inhabitants of each trust territory , and the administering authority for each trust territory within the competence of the General Assembly shall make an annual report to the General Assembly upon the basis of such questionnaire . Voting Article 89 1. Each member of the Trusteeship Council shall have one vote . 2. Decisions of the Trusteeship Council shall be made by a majority of the members present and voting . Procedure Article 90 1. The Trusteeship Council shall adopt its own rules of procedure , including the method of selecting its President . 2. The Trusteeship Council shall meet as required in accordance with its rules , which shall include provision for the convening of meetings on the request of a majority of its members . Article 91 The Trusteeship Council shall , when appropriate , avail itself of the assistance of the Economic and Social Council and of the specialized agencies in regard to matters with which they are respectively concerned . CHAPTER XIV THE INTERNATIONAL COURT OF JUSTICE Article 92 The International Court of Justice shall be the principal judicial organ of the United Nations . It shall function in accordance with the annexed Statute , which is based upon the Statute of the Permanent Court of International Justice and forms an integral part of the present Charter . Article 93 1. All Members of the United Nations are facto parties to the Statute of the International Court of Justice . 2. A state which is not ~ of the United Nations may become a party to the Statute of the International Court of Justice on to be determined in each case by the General Assembly upon the recommendation of the Security Council . Article 94 1. Each Member of the United Nations undertakes to comply with the decision of the International Court of Justice in any case to which it is a party . 2. If any party to a case fails to perform the obligations incumbent upon it under a judgment rendered by the Court , the other party may have recourse to the Security Council , which may , if it deems necessary , make recommendations or decide upon measures to be taken to give to the judgment . Article 95 Nothing in the present Charter shall prevent Members of the United Nations from entrusting the solution of their differences to other tribunals by virtue of agreements already in existence or which may be concluded in the future . Article 96 1. The General Assembly or the Security Council may request the International Court of Justice to give an advisory opinion on any legal question . 2. Other organs of the United Nations and specialized agencies , which may at any time be so authorized by the General Assembly , may also request advisory opinions of the Court on legal questions arising within the scope of their activities . CHAPTER XV THE SECRETARIAT Article 97 The Secretariat shall comprise a Secretary-General and such staff as the Organization may require . The Secretary-General shall be appointed by the General Assembly upon the recommendation of the Security Council . He shall be the chief administrative officer of the Organization . Article 98 The Secretary-General shall act in that capacity in all meetings of the General Assembly , of the Security Council , of the Economic and Social Council , and of the Trusteeship Council , and shall perform such other functions as are entrusted to him by these organs . The Secretary-General shall make an annual report to the General Assembly on the work of the Organization . Article 99 The Secretary-General may bring to the attention of the Security Council any matter which in his opinion may threaten the maintenance of international peace and security . Article 100 1. In the performance of their duties the Secretary-General and the staff shall not seek or receive instructions from any government or from any other authority externa to the Organization . They shall refrain from any action which might on their position as international officials responsible only to the Organization . 2. Each Member of the United Nations undertakes to respect the exclusively international character of the responsibilities of the Secretary-General and the staff and not to seek to influence them in the discharge of their responsibilities . Article 101 1. The staff shall be appointed by the Secretary-General under regulations established by the General Assembly . 2. Appropriate staffs shall be permanently assigned to the Economic and Social Council , the Trusteeship Council , and , as required , to other organs of the United Nations . These staffs shall form a part of the Secretariat . 3. The paramount consideration in the employment of the staff and in the determination of the conditions of service shall be the necessity of securing the highest standards of efficiency , competence , and integrity . Due regard shall be paid to the importance of recruiting the staff on as wide a geographical basis as possible . CHAPTER XVI MISCELLANEOUS PROVISIONS Article 102 1. Every treaty and every international agreement entered into by any Member of the United Nations after the present Charter comes into force shall as soon as possible be registered with the Secretariat and published by it . 2. No party to any such treaty or international agreement which has not been registered in accordance with the provisions of paragraph I of this Article may invoke that treaty or agreement before any organ of the United Nations . Article 103 In the event of a conflict between the obligations of the Members of the United Nations under the present Charter and their obligations under any other international agreement , their obligations under the present Charter shall prevail . Article 104 The Organization shall enjoy in the territory of each of its Members such legal capacity as may be necessary for the exercise of its functions and the fulfilment of its purposes . Article 105 1. The Organization shall enjoy in the territory of each of its Members such privileges and immunities as are necessary for the fulfilment of its purposes . 2. Representatives of the Members of the United Nations and officials of the Organization shall similarly enjoy such privileges and immunities as are necessary for the independent exercise of their functions in connexion with the Organization . 3. The General Assembly may make recommendations with a view to determining the details of the application of paragraphs 1 and 2 of this Article or may propose conventions to the Members of the United Nations for this purpose . CHAPTER XVII TRANSITIONAL SECURITY ARRANGEMENTS Article 106 Pending the coming into force of such special agreements referred to in Article 43 as in the opinion of the Security Council enable it to begin the exercise of its responsibilities under Article 42 , the parties to the Four-Nation Declaration , signed at Moscow , 30 October 1943 , and France , shall , in accordance with the provisions of paragraph 5 of that Declaration , consult with one another and as occasion requires with other Members of the United Nations with a view to such joint action on behalf of the Organization as may be necessary for the purpose of maintaining international peace and security . Article 107 Nothing in the present Charter shall invalidate or preclude action , in relation to any state which during the Second World War has been an enemy of any signatory to the present Charter , taken or authorized as a result of that war by the Governments having responsibility for such action . CHAPTER XVIII AMENDMENTS Article 108 Amendments to the present Charter shall come into force for all Members of the United Nations when they have been adopted by a vote of two thirds of the members of the General Assembly and ratified in accordance with their respective constitutional processes by two thirds of the Members of the United Nations , including all the permanent members of the Security Council . Article 109 1. A General Conference of the Members of the United Nations for the purpose of reviewing the present Charter may be held at a date and place to be fixed by a two-thirds vote of the members of the General Assembly and by a vote of any nine members of the Security Council . Each Member of the United Nations shall have one vote in the conference . 2. Any alteration of the present Charter recommended by a two-thirds vote of the conference shall take effect when ratified in accordance with their respective constitutional processes by two thirds of the Members of the United Nations including the permanent members of the Security Council . 3. If such a conference has not been held before the tenth annual session of the General Assembly following the coming into force of the present Charter , the proposal to call such a conference shall be placed on the agenda of that session of the General Assembly , and the conference shall be held if so decided by a majority vote of the members of the General Assembly and by a vote of any seven members of the Security Council . CHAPTER XIX RATIFICATION AND SIGNATURE Article 110 1. The present Charter shall be ratified by the signatory states in accordance with their respective constitutional processes . 2. The shall be deposited with the Government of the Unite States of America , which shall notify a the signatory states of each deposit as well as the Secretary-General of the Organization when he has been appointed . 3. The present Charter shall come into force upon the deposit of by the Republic of China , France , the Union of Soviet Socialist , the United Kingdom of Great Britain and Northern Ireland , and the United States of America , and by a majority of the other signatory states . A protocol of the deposited shall thereupon be drawn up by the Government of the United States of America which shall communicate copies thereof to all the signatory states . 4. The states signatory to the present Charter which ratify it after it has come into force will become original Members of the United Nations on the date of the deposit of their respective ratifications . Article 111 The present Charter , of which the Chinese , French , Russian , English , and Spanish texts are equally authentic , shall remain deposited in the archives of the Government of the United States of America . Duly certified copies thereof shall be transmitted by that Government to the Governments of the other signatory states . IN FAITH WHEREOF the representatives of the Governments of the United Nations have signed the present Charter . DONE at the city of San Francisco the twenty-sixth day of June , one thousand nine hundred and forty-five . 