
[ 31 January 2002 ] Paragraphs Page History 2 - 41 4 Constitution of the Republic of Azerbaijan 42 - 48 11 C. Aggression by the Republic of Armenia against the Republic of Azerbaijan 49 - 53 11 Efforts to mediate a settlement to the conflict 54 - 58 12 The Republic of Azerbaijan lies in the borderlands of Asia and Europe . It is situated in the south-eastern part of the southern Caucasus and shares borders in the north with the Russian Federation , the south with the Islamic Republic of Iran , the west with Turkey , Georgia and Armenia and in the east its neighbours across the Caspian Sea are Kazakhstan and Turkmenistan . The Autonomous Republic of Naxçivan is part of the Republic of Azerbaijan . History Scholars consider Azerbaijan to include “ the land populated today by the Azeri Turks , the people who inhabit the region stretching from the northern slopes of the Caucuses mountains along the Caspian Sea to the Iranian plateau ” . Azerbaijan is among the areas of earliest human settlement , with evidence of human habitation since the Palaeolithic age . Settlements engaging in agriculture and livestock-raising were widely distributed about this area in the seventh and sixth millennia BC . Rock paintings in Gobustan near Baku are dated by scholars to the end of the seventh and beginning of the sixth millennia BC . The well-known Norwegian explorer Thor Heyerdal , who made special trips to Baku in 1979 and 1994 to study these rock paintings , believes that the shores of the Caspian Sea were the cradle for the civilization which then spread over water , southward and northward . Heyerdal found support for his hypothesis not only in the Gobustan petroglyphs of reed boats , remarkably similar to those depicted centuries later by the Vikings on the walls of caves in Norway , but also in sagas written down in the middle ages . The Gobustan rock paintings of boats surmounted by an image of the sun also attest irrefutably to the ties between the early settlements of Azerbaijan and the Sumero/Akkadian civilization of Mesopotamia , whose cultural legacy includes very similar depictions . In the third millennium BC and the early years of the second millennium BC , signs appear of the emergence of the first class societies , with a proto-urban civilization and embryonic state structures . It is at this time that the tribal alliances were formed of the Aratta , the Gutians and the Lullubites . According to Sumerian cuneiform sources , the first State to arise on the territory of historical Azerbaijan was the state of Aratta , which came into being in the first half of the third millennium BC in the area to the south and south-east of lake Urmia . From about 2300 BC , the second State of ancient Azerbaijan sprang up in the area south of lake Urmia - the state of Lullubum . The Gutian state was formed later in the second half of the third millennium BC in the area west and south-west of lake Urmia . In 2175 BC , the Gutians conquered Sumer and Akkad and ruled over them for the next 100 years . The ancient states of Azerbaijan , which maintained political , economic and cultural ties with Sumer and Akkad and formed part of the wider civilization of Mesopotamia , were governed by dynasties of Turkic descent . The Turkophone peoples which have inhabited the area of Azerbaijan since ancient times were fire-worshippers and adherents of one of the world 's oldest religions - Zoroastrianism . The country 's name , in its current form , is derived from a Turkic collocation meaning “ land , noble people , keepers of the flame ” . Over the period from the late ninth to the seventh centuries BC , the Mannaean kingdom held sway in the area of lake Urmia . The Cimmerian-Scythian-Saka kingdom flourished in the seventh and sixth centuries BC in the south-west of Azerbaijan . In the 670s BC , the Mannaean kingdom arose in the territory of Azerbaijan and was overthrown by the Persian Achaemenid kingdom in the mid-sixth century BC . A vital role was played in Azerbaijani history by the kingdom of Atropatene , which came into existence in the southern part of the country in the 520s BC and which was heavily influenced by Hellenism . The Caucasian Albanian state was created in the north of Azerbaijan in the third millennium BC , with the river Araxes as its southern frontier . This state successfully held out against the constant aggression of the Armenian state , which was then destroyed by the Romans in 66 BC . The people of Albania included a number of different nationalities , most of which spoke Turkic languages . Christianity was adopted in Albania in 313. The territory of Albania also included the mountainous part of Karabagh , which was known at that time as Artsakh . Over the period from the first to the fourth centuries , when the entire Caucasus area was under the Roman yoke , Albania remained the only independent state and with its political independence came a flowering of Albanian learning , language and literature . This same period say the growing strength and influence of the autocephalous Albanian Catholicosate and of the Albanian Church in general , which was independent of the other Christian churches and even propagated Christianity among the north Caucasian and Turkophone peoples . Following the invasion by the Arabs , the dominant religion from the early eighth century in Azerbaijan became Islam . Most of the Albanians also converted to Islam and only a minority retained their former religion . Bowing to the influence of the Byzantine Empire in the southern Caucasus , the Albanian Church , together with the Georgian Church , had accepted the dyophysite doctrine shortly before the Arab invasion . To create a barrier to the influence of Byzantine , the Caliphate - enlisting the help of the Armenian Church - steered the Albanian Church towards monophysitism and brought it under the dominion of the monophysite Armenian Gregorian Church , opening the way for the subsequent gradual Gregorianization of the Albanians living in the mountainous areas of Karabagh - or Artsakh . The cohabitation of the populations of Albania and Atropatene within the confines of a single state and their profession of one and the same religion helped ensure the consolidation of the people of Azerbaijan . The notions of freedom , independence and universal equality nurtured the Hurramite movement , led by Babak , which flourished in Azerbaijan in the early ninth century . Following the anti-Caliphate rising by the local population , several new states arose in the territory of Azerbaijan in the ninth century , the most powerful of which was the State of Shirvan , with its capital at Shemakha , which was ruled by the Shirvanshah dynasty . This endured until the sixteenth century and played an enormous role in the history of medieval Azerbaijan . The independent states of the Sajids , Salarids , Ravvadids ( with their capital at Tabriz ) and Shaddadids ( with their capital at Ganja ) arose from the ninth to the eleventh centuries in the territory of Azerbaijan . Azerbaijan was ruled by the Seljuk dynasty from the end of the eleventh century . Over the period 1136-1225 , the Atabek Eldegiz state held sway in Azerbaijan . The sharing by the country 's indigenous population of a common Turkic language and Turkic provenance and their adherence to the same Islamic faith made possible a process of consolidation of the Azerbaijani nation which reached its culmination in the eleventh and twelfth centuries . This same period saw the greatest flowering of the culture of Azerbaijan , which bequeathed to the world an array of illustrious philosophers , architects , poets and scholars . The crowning achievement of Azerbaijani social and cultural thought of that period was the work of Nizami Ganjavi ( 1141-1209 ) , poet and philosopher , now one of the treasures of the world 's cultural heritage . The twelfth and thirteenth centuries saw the rise to prominence , in the mountainous regions of Karabagh , of the Khachen principality , ruled by the Albanian kings . The rule of Hasan Jalal ( 1215-1262 ) ushered in an Albanian renaissance and saw the completion of the construction of Gandzasar monastery complex , whose cathedral was to become the centre of the early church and whose consecration was presided over by the Catholicos of Albania . From the mid-thirteenth century , the Azerbaijani states became vassels of the Mongol Hulagid dynasty ( 1258-1356 ) . In the mid-fourteenth century , following an uprising by the local population to cast off the yoke of the invaders , the local Jalairid feudal lords took up the reins of power and , with the support of the Azerbaijani nobility , established the Jalairid state ( 1359-1410 ) . From the end of the fourteenth century , Azerbaijan was repeatedly invaded by Tamberlaine and served as the theatre for his battles with the Golden Horde . The Turkmen dynasties of Qara-Qoyunlu and Aq-Qoyunlu ruled over Azerbaijan in 1410-1468 and 1468-1501 and under them Azerbaijan grew significantly in power . In 1501 , the Safavid state was formed in Azerbaijan , named after the ruling dynasty , with its capital at Tabriz . Under this dynasty , all the lands of Azerbaijan were united , for the first time in their history , into a single Azerbaijani state . The territory of the Safavid state stretched from the Amu Darya river to the Euphrates , and from Derbent to the shores of the Persian Gulf . This polity was created and developed as an essentially Azerbaijani state and all political power remained in the hands of the Azerbaijani feudal nobility . Senior court officials , military generals and provincial governors were all appointed from among the Azerbaijani nobility . The army was made up from the militia of the most powerful Azerbaijani clans . Azeri was the official language of the Safavid state . By the end of the sixteenth century , the capital of the Safavid state had been transferred to Isfahan and its shah now drew his support primarily from the Persian nobility . The State , while ruled by an Azerbaijan dynasty , took on an increasingly Persian aspect . In the 1740s , with the weakening of the power exercised by the Persian shahs over the territory of Azerbaijan , the country disintegrated into some 20 khanates , namely , Ardabil , Baku , Ganja , Derbent , Erivan , Javad , Karabagh , Karadagh , Khoi , Maku , Maragin , Nakhichevan , Quba , Salyan , Sarab , Shirvan , Sheki , Tabriz , Talysh and Urumi . In addition to these khanates , the country was further subdivided into the sultanates of Kazah-Samshadil , Borchala , Ilisu , Araxes , Gutgashen and Gabala . Upper Karabagh , which was inhabited by Azerbaijani Muslims and Albanian Christians , formed an integral part of the Azerbaijani khanate of Karabagh , which covered the territories lying between the Kura and Araxes rivers . The local duchies - or “ melikdoms ” - of Dizak , Varanda , Khachen , Jeraberd and Gulistan , all of which lay within the mountainous regions of Karabagh , also formed part of this khanate , to which their inhabitants owed allegiance as vassals . At the end of the eighteenth and in the first third of the nineteenth centuries , Azerbaijan was fought over by the Persian , Russian and Ottoman empires , each eager to secure hegemony over this country whose geopolitical situation lent it significant strategic advantages . A number of the khanates rose in arms to defend their sovereignty , while others were forced , in an effort to defend their own interests , to conclude agreements reducing them to the status of vassaldom . Thus , on 14 May 1805 , a treaty was signed on the banks of the river Kura with the Azerbaijani khan , Ibrahim Halil , under which the independent Azerbaijani khanate of Karabagh was placed under Russian overlordship . This treaty has particular resonance today , since it demonstrates that Karabagh historically formed part of Azerbaijan . The first Russo-Persian war of 1804-1813 , fought to establish dominance over the Azerbaijani khanates , resulted in the first division of Azerbaijani territories between Russia and Persia . The peace treaty of Gulistan , signed on 12 October 1813 by Russia and Persia , gave legal recognition to the effective annexation by Russia over the period 1800-1806 of the khanates of northern Azerbaijan , with the exception of Nakhichevan and Erivan . The second Russo-Persian war of 1826-1828 led , on 10 February 1828 , to the signing of the Turkmanchai peace treaty , under which Persia officially renounced its claims to northern Azerbaijan and finally recognized its annexation , with the inclusion of the Nakhichevan and Erivan khanates , by Russia . It is important to stress that all the khanates listed above , including Karabagh , were annexed to Russia as purely Azerbaijani possessions . They were Azerbaijani by virtue of their predominantly Azeri populations and the ethnic composition of their dominant feudal elite ( the khans themselves , the major landowners , the clergy etc. ) . Under the Treaty of Turkmanchai and the peace treaty concluded in Edirne in 1829 , the Armenians then inhabiting Persia and the Ottoman empire were relocated to Azerbaijan , primarily to the khanates of Nakhichevan , Erivan and Karabagh . Thus , the Russian scholar K. Shavrov records that , over the period 1828-1830 alone , some 40,000 Persian and 84,000 Turkish Armenians were relocated in the Trans-Caucasus , where they were settled in the best indigenous lands of the Yelisavetpol ( Karabagh ) and Erivan provinces , where the Armenian population had previously been negligible and where they were allocated 200,000 dessiatines ( 225,000 hectares ) of State land . In his notebooks , the Russian diplomat and playwright Alexander Griboedov wrote : “ For the most part , the Armenians were settled on the estates of Mohammedan landowners ( … ) . These new settlers are crowding out the Mohammedans ( … ) . We have also given careful thought to the council which must be given to the Mohammedans , so as to reconcile them to this aggravation , which will not be long in duration , and to dispel any apprehensions which they may have that the Armenians will take permanent possession of the lands where they have been initially settled . ” The American academic Justin McCarthy adduces the following facts about the settlement of the Southern Caucasus and , in particular , Azerbaijan , by Armenians . Between 1828 and 1920 , in pursuit of a policy designed to change the entire demographic make-up of Azerbaijan so that Armenians would outnumber Azerbaijanis , more than 2 million Muslims were forcibly expelled and an unknown number killed . On two occasions , in 1828 and 1854 , the Russians invaded eastern Anatolia and on both occasions they left , taking with them 100,000 Armenian sympathizers to the Caucasus , where they took the place of Turks - i. e. Azerbaijanis - who had emigrated or died . In the war of 1877-1878 , Russia seized the district of Kars-Ardahan , driving out the Muslim population and settling 70,000 Armenians in their homes . Some 60,000 Armenians resettled in the Russian Caucasus during the troubles of 1895-1896 . Finally , the migrations of the First World War resulted in an almost even exchange of 400,000 Armenians from eastern Anatolia for 400,000 Muslims from the Caucasus . According to McCarthy 's information , between 1828 and 1920 some 560,000 Armenians were resettled in Azerbaijan . In other words , it was actually after the conquest of the southern Caucasus by Russia that the Armenian population of the Azerbaijani lands north of the river Araxes increased so dramatically . When we look at Karabagh , we see from official records for 1810 - in other words , shortly before its annexation by Russia - that the khanate of Karabagh had some 12,000 households , of which 9,500 were Azerbaijani and a mere 2,500 Armenian . According to data for 1823 , there was one town in the Karabagh khanate - Shusha - and some 600 villages , 450 of which were Azerbaijani and about 150 Armenian , with a total population of some 90,000 . The relative figures for Azerbaijani and Armenian households in Shusha were 1,048 and 474 , and in the countryside , 12,902 and 4,331 , respectively . The Armenians living in Karabagh were in fact descendents of the local Albanian population , which had been extensively Armenianized . Thus , the Armenian writer B. Ishkhanian points out that the Armenians residing in Nagorny Karabakh are in part indigenous , descended from the ancient Albanians , and in part refugees from Turkey and Persia , for whom the Azerbaijani lands offered a refuge from persecution and oppression . Under a decree promulgated by Tsar Nicholas I on 21 March 1828 , the Azerbaijani khanates of Nakhichevan and Erivan were dissolved and replaced by a new administrative entity known as the “ Armenian oblast ” , administered by Russian officials ; in 1849 , the Armenian oblast was renamed the province ( “ guberniya ” ) of Erivan . In pursuit of their ultimate goals , the Armenians persuaded the Russian authorities to abolish the Albanian Christian patriarchate , which had been in operation in Azerbaijan , and to transfer its property to the Armenian Church . Following the loss of their state sovereignty and distinct confessional identity , the local Albanian population in the western regions of former Albania - the Karabagh region - into which Armenian settlers continued to pour , gradually started to undergo a process of Gregorianization , or Armenianization . After the revolutionary events of 1917 in Russia , the processes of disintegration of the country became more pronounced and the conditions were ripe for the formation , in outlying ethnic regions of the former Russian Empire , of independent States . Thus , on 28 May 1918 , the Azerbaijani Democratic Republic was proclaimed in the territory of the eastern part of the southern Caucasus - the first parliamentary democracy in the Islamic east - which was to play a historic role in the renaissance and formation of the sense of ethnic identity and statehood of the Azerbaijani nation . The development of the Azerbaijani Democratic Republic , both as a nation and as a State , was based on the doctrine of “ Azerbaijanism ” , which hinged on the principles of modernism , Islamism and Turanism , symbolizing the Azerbaijani people 's aspiration for progress based on preservation of their adherence to Islamic civilization and Turkic culture and on their separate ethnic identity . In its brief existence of less than two years , the multi-party Azerbaijani parliament and the coalition Government managed to take a number of important steps in the process of nation-building and the development of statehood , and in such areas as education , formation of an army , development of independent financial and economic systems and securing international recognition for the young republic as a full member of the international community of nations . On 11 January 1920 , the Paris Peace Conference , with the Treaty of Versailles , accorded de facto recognition of the independence of the Azerbaijani Republic , to whose capital - Baku - 20 countries had already sent their representatives . In late 1919 and early 1920 , however , the political situation of the Azerbaijani Democratic Republic - both at home and abroad - worsened considerably . The country found itself caught up in a ferocious tug-of-war between the countries of the Entente , Turkey , Russia and Persia , each pursuing its own geopolitical goals in this strategically important and oil-rich area . The political decision by the Bolshevist Government of the Russian Socialist Federative Republic ( RSFSR ) not to recognize the Azerbaijani Democratic Republic , the deployment of the Eleventh Red Army on the frontiers of the Azerbaijani Republic in Spring 1920 , the aggression waged by Dashnak-ruled Armenia against Azerbaijan in Karabagh and Zangezur , the terrorist strikes by Armenian groups and the Bolsheviks against the peaceful Azerbaijani population inside Azerbaijan and the social and economic crisis gripping the country - all these factors combined to bring about the weakening of the Azerbaijani Democratic Republic and led to the occupation of its capital by the Eleventh Army on 27-28 April 1920. As stated in a telegram from the general staff of the Caucasian front to the Eleventh Army command , dated 1 May 1920 , RSFSR troops had been instructed to take possession of the entire territory of Azerbaijan lying within the confines of the former Russian Empire , but without crossing the Persian border . The 70 years during which it formed part of the Union of Soviet Socialist Republics ( USSR ) marked a new , important stage in the development of Azerbaijani statehood , during which the Azerbaijan Soviet Socialist Republic forged ahead in its social , economic and cultural development . At the same time , the Soviet period also saw many negative trends emerge in Azerbaijan , as elsewhere throughout the USSR . At the economic level , the country became a reservoir of fuel , raw materials and agricultural produce for the Soviet economy . At the cultural level , the imposition of the Cyrillic alphabet in the place of the Latin alphabet severed the country 's ties with the fountainhead Azerbaijani literature and culture . The Soviet regime was at pains to suppress any efforts by the Azerbaijani intelligentsia to manifest their separate ethnic identity and to study the true history of their country . During the Soviet period , the territories of Zangezur , Gekcha , part of Naxçivan and other districts were hived off from Azerbaijan and attached to neighbouring Armenia . As a result , the country 's area , which during the period of the Azerbaijani Democratic Republic , in 1920 , had measured 114,000 square kilometres was reduced during the period 1920-1921 to 86,600 square kilometres . In addition , on 7 July 1923 , on the initiative of the Moscow leaders of the Bolshevist part , the so-called Nagorny Karabakh autonomous region , with a predominantly Armenian population , was artificially carved out of a part of the territory of historical Karabagh , the majority of whose population had been Azerbaijanis . That decision marked the first step in the political campaign to amputate Nagorny Karabakh from the rest of Azerbaijan . During the years 1988-1990 , the national democratic movement in Azerbaijan campaigned vigorously for the restoration of the country 's independence . With a view to suppressing this movement , on 20 January 1990 , with the approval of the Soviet leadership under Mikhail Gorbachev , Soviet army units were dispatched to Baku . Their reprisals , which were conducted with uncommon savagery , left hundreds of innocent Azerbaijani citizens dead and wounded . A state of emergency was declared in the country and this remained in force until mid-1991 . Notwithstanding these setbacks , the untiring struggle for independence by the patriotic forces of the Azerbaijani people culminated in the adoption on 31 August 1991 , by the Supreme Council of the Republic of Azerbaijan , of a declaration on the restoration of the State independence of the Republic of Azerbaijan . On 18 October 1991 saw the passage of the act establishing the State independence of the Republic of Azerbaijan , which set out the foundations for the statehood of an independent Azerbaijan and determined the principles of its political and economic structure . With that act , the Republic of Azerbaijan once again , after a 71-year interval , became an independent subject of international law . Constitution of the Republic of Azerbaijan Following a referendum on 12 November 1995 , the new Constitution of the Azerbaijani Republic was adopted and entered into force on 5 December 1995. The country 's basic law was developed in line with the fundamental principles and norms of international law . As stipulated by article 1 of the Constitution , “ In the Republic of Azerbaijan , the Azerbaijani people shall be the sole source of State power ” . Under article 2 of the Constitution , the people of Azerbaijan shall exercise their sovereign right directly through nationwide voting ( referendums ) and through representatives elected on the basis of universal , equal and direct suffrage by free , secret and personal ballot . Article 7 of the Constitution stipulates that the Azerbaijani State shall be a democratic , constitutional , secular and unitary republic . In Azerbaijan , the power of the State shall be restricted in domestic matters only by the country 's law and , in foreign affairs , only by the provisions arising from international treaties to which the Republic of Azerbaijan is a party . State power in the Republic of Azerbaijan shall be based on the principle of the following division of powers : ( a ) Legislative power shall be exercised by the Milli Meclis ( parliament ) of the Republic of Azerbaijan ; ( b ) Executive power rests with the President of the Republic of Azerbaijan ; ( c ) Judicial power shall be exercised by the courts of the Republic of Azerbaijan . Pursuant to the Constitution , the legislature , executive and judiciary shall interact with one another and be independent within their various jurisdictions . Article 8 of the Constitution states that the President of the Republic of Azerbaijan shall be the head of State . For the purpose of organizing the administration of executive power , the President of the Republic shall establish a cabinet of ministers , which shall serve as the supreme organ of executive power of the President of the Republic and shall be answerable and subordinate to the head of State . As stipulated by article 125 of the Constitution , judicial power in Azerbaijan shall be exercised only by the courts and on the basis of due process . The courts comprise the Constitutional Court , the Supreme Court , the Economic Court , and the general and special courts . C. Aggression by the Republic of Armenia against the Republic of Azerbaijan While still part of the USSR , Azerbaijan already encountered threats against its territorial integrity and security . In February 1988 a decision was taken by the regional council of the Nagorny Karabakh autonomous region of the Azerbaijan SSR , without the participation of any Azerbaijani deputies , for the withdrawal of the Nagorny Karabakh autonomous region from Azerbaijan and its annexation to Armenia . On 1 December 1989 , the Supreme Soviet of the Armenian SSR took a decision , which has never been rescinded , on the annexation of the Nagorny Karabakh region of Azerbaijan to Armenia . These decisions contravene the constitutions of the USSR and the Azerbaijan SSR . In 1988 , Azerbaijanis living in Armenia started to be driven out of the country . The Soviet authorities proved incapable of halting these unconstitutional acts by Armenia and preventing raids into Azerbaijani territory by paramilitary formations and terrorist groups . At the time the Nagorny Karabakh conflict first erupted , there were some 186,100 people living in the region , of whom 138,600 were Armenians ( 73.5 per cent ) and 47,500 Azerbaijanis ( 25.3 per cent ) . Full-scale military operations commenced in late 1991 and early 1992. Armenian military units launched combat operations in Nagorny Karabakh with the use of the latest weapons and these culminated in February 1992 with the seizure of the town of Khojaly , in the course of which more than 600 civilians were killed , including women , children and old people , and with the occupation in May 1992 of the town of Shusha and of Shusha district . Following these actions , the entire Azerbaijani population was expelled from Nagorny Karabakh and the occupation of the territory was completed . With the seizure of Lachin in May 1992 , the territory of Nagorny Karabakh was joined to Armenia . After this , hostilities spread further through Azerbaijan , passing beyond the administrative frontiers of the Nagorny Karabakh region , and also crossing the Armenian-Azerbaijani frontier . A further six Azerbaijani districts were occupied by Armenia . As a result , Armenian aggression against the Republic of Azerbaijan led to the occupation of more than 17,000 square kilometres , constituting some 20 per cent of the country 's territory , more than 50,000 people were wounded or left disabled and more than 18,000 people killed , and 877 settlements , 100,000 homes , more than 1,000 economic facilities , more than 600 schools and colleges , 250 medical centres and most of the architectural monuments situated within the occupied area were looted or destroyed . As a result of Armenian aggression and ethnic cleansing of Azerbaijanis , both from the territory of Armenia itself and from occupied Azerbaijani lands , there are now some 1 million refugees and displaced persons in Azerbaijan . Efforts to mediate a settlement to the conflict Efforts to mediate a settlement to the Armenian-Azerbaijani conflict were launched in February 1992 in the framework of the Conference on Security and Cooperation in Europe ( CSCE ) . At their meeting in Helsinki on 24 March 1992 , the CSCE Council of Ministers decided to convene a conference on Nagorny Karabakh in Minsk , under the auspices of CSCE as the standing body for negotiations to reach a peaceful settlement to conflicts on the basis of the Conference 's principles , obligations and provisions . In its resolutions 822 ( 1993 ) of 30 April 1993 , 853 ( 1993 ) of 29 July 1993 , 874 ( 1993 ) of 14 October 1993 and 884 ( 1993 ) of 12 November 1993 , the United Nations Security Council condemned the occupation of the territory of Azerbaijan Republic , reaffirmed respect for the sovereignty , territorial integrity and inviolability of the borders of the Azerbaijani Republic and the inadmissibility of the use of force for the acquisition of territory , and demanded the immediate cessation of armed hostilities and hostile acts , as well as the immediate , complete and unconditional withdrawal of all occupying forces from the occupied districts of Azerbaijan . A ceasefire has been in place since May 1994. At the CSCE Budapest Summit on 5 and 6 December 1994 , it was decided that the heads of State and Government of the countries members of CSCE would launch a process under the co-Chairmen of the Minsk Conference to coordinate all efforts to mediate a resolution of the conflict within the framework of CSCE . The Budapest Summit set the Chairman-in-Office of CSCE the task of conducting negotiations for the conclusion of a political agreement on the cessation of the armed conflict , the implementation of which would eliminate major consequences of the conflict and permit the convening of the Minsk Conference . A decision was also taken at the Summit to deploy a multinational CSCE peacekeeping force , following agreement among the parties for cessation of the armed conflict , and to convene a high-level planning group to prepare the envisaged peacekeeping operation . At the Lisbon Summit of the Organization for Security and Cooperation in Europe ( OSCE ) , the following principles were worked out for settling the armed conflict , recommended by the co-Chairmen of the OSCE Minsk Group and supported by all the OSCE member States , with the exception of Armenia : ( a ) Territorial integrity of the Armenian Republic and the Azerbaijani Republic ; ( b ) Legal status of Nagorny Karabakh as defined by an agreement based on self-determination and affording Nagorny Karabakh the highest degree of self-government within Azerbaijan ; ( c ) Guaranteed security for Nagorny Karabakh and its entire population , including mutual responsibility to ensure that all parties observe the provisions of the settlement . In 1999 , direct talks were instituted between the Presidents of Armenia and Azerbaijan but were prevented from reaching any settlement of the conflict by the obstructive position taken by the Armenian side . Despite the categorical requirements of the United Nations Security Council and other organizations , Armenia continues to the present day to occupy areas of Azerbaijan and to build up its military potential in those areas . As stipulated by article 12 of the Constitution of the Republic of Azerbaijan , it is the paramount objective of the State to uphold human and civil rights and freedoms . Chapter III of the Constitution is devoted to fundamental human and civil rights and freedoms . The chapter comprises the following articles : A rapid process of legal and judicial reform has been conducted in Azerbaijan , embracing the adoption of , such instruments as the Criminal Code , the Code of Criminal Procedure , the Civil Code , the Code of Civil Procedure and the Penal Enforcement Code . In addition , statutes have been adopted on the Constitutional Court , on the courts and judges , on the procuratorial system , on the bar and the legal profession , on the police , and on other important matters . A totally reconfigured three-stage judicial system has been set in place . New judges have been selected on the basis of examinations and appointed to their posts . The country 's penitentiary system has been brought into line with international standards . An act has been passed establishing an ombudsman 's office and amendments made to the acts on the Central Electoral Commission and on the mass media . Appropriate changes have been made to the country 's laws to take account of the views and recommendations of international organizations . Section VIII of the Azerbaijani Criminal Code , which entered into force on 1 September 2000 , deals with offences against the individual . It contains chapters on offences against life and health ( chap . 18 , arts . 120-143 ) ; the freedom and dignity of the individual ( chap . 19 , arts . 144-148 ) ; the sexual inviolability and sexual freedom of the individual ( chap . 20 , arts . 149-153 ) ; constitutional human and civil rights and freedoms ( chap . 21 , arts . 154-169 ) ; and matters relating to juveniles and families ( chap . 22 , arts . 170-176 ) . The procedures for legal defence are also set forth in the Code of Criminal Procedure , the Penal Enforcement Code and the statutes on the consideration of applications by citizens , of 10 June 1997 ; on compensation for injury caused to individuals through the unlawful acts of the initial inquiry , pre-trial investigation , procuratorial and court authorities , of 29 December 1998 ; and on the submission of complaints to the courts regarding decisions and actions or omissions which infringe citizens ' rights and freedoms , of 11 June 1999. As stated in article 1 of the Unlawful Acts by the Initial Inquiry , Pre-trial Investigation , Procuratorial and Court Authorities ( Compensation to Individuals ) Act , compensation must be paid for any injury caused to any person in the territory of the Republic of Azerbaijan through the unlawful actions of the country 's initial inquiry , pre-trial investigation , procuratorial or court authorities . The act contains a list of such unlawful actions . The Decision and Actions or Omissions Infringing Civil Rights and Freedoms ( Complaints to the Courts ) Act sets out rules for the lodging of challenges in the courts against decisions and actions or omissions which infringe the rights and freedoms enjoyed by Azerbaijani citizens established by the Constitution and by international treaties to which the Republic of Azerbaijan is a party and also contains provisions on judicial procedures to uphold the rights and freedoms of citizens . Pursuant to article 1 of the Decisions and Actions or Omissions Infringing Civil Rights and Freedoms ( Complaints to the Court ) Act , all citizens of the Republic of Azerbaijan who consider that their rights and freedoms have been infringed as a result of decisions and actions or omissions by State authorities , local authorities , enterprises , institutions , organizations , voluntary associations or officials , shall be entitled to appeal to the courts . Aliens and stateless persons may appeal to the appropriate court in the manner prescribed by law , except as otherwise stipulated in international treaties to which the Republic of Azerbaijan is a party . A court ruling which has entered into force shall be binding on all State and local authorities , enterprises , institutions , organizations , voluntary associations and officials . In the event that a court ruling is not observed , the court shall adopt the appropriate measures , as prescribed by Azerbaijani legislation ( see article 7 of the Decisions and Actions or Omissions Infringing Civil Rights and Freedoms ( Complaints to the Courts ) Act . The Parties to Criminal Proceedings ( State Protection ) Act of 11 December 1998 sets out a system of measures to ensure the safety and social protection of victims and witnesses in criminal proceedings and of other parties to such proceedings . The safety measures defined by this act shall be applied whenever the safety of those persons cannot be guaranteed by other means . The Republic of Azerbaijan is a party to all the major multilateral human rights treaties and regularly submits reports on its implementation of the provisions of those treaties to the appropriate treaty bodies . On 25 December 2001 , the Azerbaijani Parliament ratified the European Convention for the Protection of Human Rights and Fundamental Freedoms . Under the Azerbaijani legal system , the provisions of international treaties may be cited in the courts and in other administrative bodies . Pursuant to paragraph 2 of article 12 of the Azerbaijani Constitution , the human and civil rights and freedoms enumerated in the Constitution shall be exercised in accordance with the international treaties to which the Republic of Azerbaijan is a party . Paragraph 2 of article 148 of the Constitution states that international treaties to which the Republic of Azerbaijan is a party form an integral part of the legislative system of the Republic of Azerbaijan . Article 151 of the Constitution stipulates that , in the event of conflict between the laws and regulations forming part of Azerbaijani law ( except for the Constitution and statutes adopted by referendum ) and the provisions of international treaties to which the Republic of Azerbaijan is a party , the international treaty provisions shall prevail . In accordance with the presidential decree of 22 February 1998 on measures to uphold human and civil rights and freedoms , the Cabinet of Ministers of the Republic of Azerbaijan and the President 's own executive office are responsible , together with the appropriate State authorities , for taking the necessary steps , in connection with the legal reforms currently under way , to ensure that the country 's laws and regulations are fully consistent with international human rights standards . With a view to promoting and protecting human rights , the President of Azerbaijan has promulgated a number of decrees , including on a State human rights programme ; on additional measures to uphold the freedom of speech , opinion and information ; and on celebrations for the fiftieth anniversary of the Universal Declaration of Human Rights . In February 1998 , on the recommendation of the President , the Azerbaijani Parliament abolished the death sentence in Azerbaijan . Under the International Treaties of the Republic of Azerbaijan ( Conclusion , Application and Denunciation Procedure ) Act , the Republic of Azerbaijan is required to comply faithfully with its international treaties in accordance with the rules of international law . Article 17 of that act stipulates that the Cabinet of Ministers , ministries , State committees , departments and other government agencies of the Republic of Azerbaijan with jurisdiction over the various issues governed by the country 's international treaties shall be responsible for ensuring compliance with the obligations entered into under such treaties . Article 25 of the International Treaties of the Republic of Azerbaijan ( Conclusion , Application and Denunciation Procedure ) Act stipulates that international treaties of the Republic of Azerbaijan which have been ratified , approved or adopted in accordance with the provisions of the Act , or international treaties to which the Republic of Azerbaijan has acceded , shall be published , on application by the Ministry of Foreign Affairs , in the Gazette of the Milli Meclis and in the official State newspaper of the Republic of Azerbaijan . International treaties of the Republic of Azerbaijan whose authentic texts have been drawn up in foreign languages shall be published in one of these languages together with an official translation into Azeri . Article 26 of the same act requires all international treaties of the Republic of Azerbaijan to be registered by the Ministry of Foreign Affairs in the register of international treaties of the Republic of Azerbaijan . The Ministry of Foreign Affairs is also responsible for registration of all the country 's international treaties with the Secretariat of the United Nations or with the relevant offices of other international organizations . The Ministry of Justice includes among its services a department of legislation and legal publicity , one of whose responsibilities is to conduct public awareness measures relating to legal matters . To this end , employees of the department publish articles in the press and make presentations on television . Reports by the Republic of Azerbaijan under the international human rights treaties to which the country is a party are prepared by the Government in accordance with presidential decrees and decisions by the Cabinet of Ministers and are submitted to the Secretary-General of the United Nations by the Ministry of Foreign Affairs . For the purpose of preparing these reports , working groups are set up , by presidential order , which include among their members representatives of the relevant State agencies . The services of representatives of non-governmental organizations and independent experts are also enlisted in the preparation of these reports . The process of preparing these reports and their submission by government delegations to the treaty bodies of the United Nations is widely covered in the media . In 1998 , with the assistance of the Azerbaijani National Commission for UNESCO , a compilation of United Nations human rights treaties was published in the Azeri language . In 2001 , the Ministry of Justice issued a compilation of human rights instruments , including international treaties , presidential decrees and orders by the Ministry of Justice relating to human rights , the prevention of torture and respect for the rights of convicted persons in places of detention in accordance with international standards . This compilation is designed to be used by all the country 's law-enforcement agencies , correctional facilities and courts . Azeri translations of international human rights instruments and also scientific articles on various aspects of international human rights law are regularly published in the journals Vozrozhdenie - XXI vek and Mezhdunarodnoe pravo , published by the Institute for Nation-Building and International Affairs and the Association for International Law and International Relations . The technical assistance programme for Azerbaijan launched by the Office of the United Nations High Commissioner for Human Rights also contains provision for the dissemination of information about international human rights instruments . Notes HRI/CORE/1/Add.117 HRI/CORE/1/Add.117 Tadeusz Swietochowski , Russia and Azerbaijan : A Borderland in Transition ( New York , Colombia University Press , 1995 ) , p. 1. Trud , 26 April 1995. Shavrov , Novaya ugroza russkomu delu v Zakavkazye : rasprodazha Mugani inorodtsam , St. Petersburg , 1911. A. S. Griboedov , Gore ot uma . Pis'ma i zapiski , Baku , 1989 , p. 387. Justin McCarthy , “ Armenian terrorism : History as poison and antidote ” , in : Proceedings of the Symposium on International Terrorism , Ankara , 1984 , pp . 85-94 . Prisoedinenie vostochnoi Armenii k Rossii , vol . 1 , Yerevan , 1972 , p. 562. Opisaniya Karabakhskoi provintsii , sostavlennogo v 1823 g. deistvitenl'nym statskim sovetnikom Mogilevskim i polkovnikom Ermolovym , Tiflis , 1866. B. Ishkhanian , Narodnosti Kavkaza , Petrograd , 1916. 