diff --git a/IndianLanguage/HandleTranslation.hs b/IndianLanguage/HandleTranslation.hs
new file mode 100644
--- /dev/null
+++ b/IndianLanguage/HandleTranslation.hs
@@ -0,0 +1,255 @@
+module IndianLanguage.HandleTranslation (
+	checkForSymbols, checkForChar, makeWindow, onlyOneLang, putNL, putDot, leaveIt, marathiFont, tempVowels, actionVowels, forNM, forU, forI, forE, forO, forA, finalMarathi, mytemp, splitMarathi, tempConsonents, actionConsonents, forK, forKH, forKSH, forG, forJ, forT, forTT, forD, forDD, forDDH, forDH, forDNY, forC, forCH, forCHH 
+  ) where
+
+
+import Graphics.UI.Gtk
+import Database.HDBC.Sqlite3 (connectSqlite3)
+import Database.HDBC
+import Data.Char
+
+--checks for special symbols and arranges a string accordingly
+checkForSymbols :: String -> String
+checkForSymbols str = concat $ map checkForChar str
+ 
+checkForChar :: Char -> String
+checkForChar ch = if(elem ch "~`!@#$%^&*()-_+|,./?;:[{]}\"\'\\") then (" "++[ch]) else [ch] 
+
+
+--making a window to display the output text
+makeWindow :: String -> IO()
+makeWindow str = do
+  initGUI
+  window <- windowNew
+  
+  textField1 <- textViewNew
+  textBuffer1 <- textViewGetBuffer textField1
+  srctextfont <- fontDescriptionFromString "Courier Bold 20"  
+  widgetModifyFont textField1 (Just srctextfont)
+  
+  scroll1 <- scrolledWindowNew Nothing Nothing
+  scrolledWindowAddWithViewport scroll1 textField1
+  
+  containerAdd window scroll1
+    
+  onlyOneLang textBuffer1 "marathiFonts" str
+  
+  set window [windowTitle := "Hindi Or Marathi Script Writer", containerBorderWidth := 10]
+  windowSetGeometryHints window (Nothing :: Maybe Window)
+    (Just (500,100)) (Just (500,100)) Nothing Nothing Nothing
+  
+  widgetModifyBg window StateNormal (Color 10000 20000 30000) --(Color 6851 6851 30000) 		        
+  onDestroy window mainQuit
+  widgetShowAll window
+  mainGUI
+
+--for calling functions which will convert the sentence into tokens and fetching appropriate letter from database
+onlyOneLang :: TextBuffer -> String -> String -> IO()
+onlyOneLang textBuffer2 fonts str = 
+  do marathiFont (finalMarathi $ map toLower str) "Languages.db" textBuffer2 fonts
+     sI <- textBufferGetStartIter textBuffer2                    
+     eI <- textBufferGetEndIter textBuffer2
+     text1 <- textBufferGetText textBuffer2 sI eI True
+     let ch = filter (/='a') $ unwords $ putNL $ words (leaveIt text1)
+     textBufferSetText textBuffer2 ch
+
+--checking for dot or quetion mark and if not found , then adding it at the end of a sentence
+putDot :: [String] -> [String]
+putDot lstStr = if(elem (last lstStr)  [".","?"]) then lstStr else (lstStr ++ ["."])
+putNL lstStr = if(elem (last lstStr) [".","?"]) then ([""] ++ tk ++ [(head dp) ++ "\n"] ++ (tail dp)) else (lstStr) 
+  where 
+    tk = takeWhile (temp) lstStr  -- /="."
+    dp = dropWhile (temp) lstStr
+    temp e = not $ elem e [".","?"]
+
+--neglecting ~ symbol which was used while creating devanagari script
+leaveIt :: [Char] -> [Char]
+leaveIt "" = ""
+leaveIt (e:str) = if(e=='~') then (leaveIt str) else (e:(leaveIt str))
+
+
+--converting sentence into marathi font and putting data into text buffer
+marathiFont :: [String] -> String -> TextBuffer -> String -> IO()
+marathiFont [] dbname buffer langFonts = mapM_ putStrLn []
+marathiFont lstStr dbname buffer langFonts = 
+  do conn <- connectSqlite3 dbname
+     temp <- quickQuery' conn
+     	     ("select meaning from "++langFonts++" where letter = ?") [toSql (head lstStr)]
+
+     -- let stringRows = [(unwords (map convRow temp)))]
+     let stringRows = [unwords (map convRow temp)]	
+     let vi = checkType stringRows (head lstStr)   
+    
+     
+     e <- textBufferGetEndIter buffer 
+     
+     textBufferInsert buffer e vi
+     textBufferInsert buffer e "~"	     
+     --putStrLn $ show stringRows
+     Database.HDBC.disconnect conn
+     marathiFont (tail lstStr) dbname buffer langFonts 
+
+  where convRow :: [SqlValue] -> String
+        convRow [sqlMeaning] = meaning
+          where meaning = case (fromSql sqlMeaning) of 
+	          Just x -> x
+	          Nothing -> "NULL"
+                  
+        convRow x = fail $ "Unexpected result: " ++ show x    
+        checkType ([]) str = str
+	checkType (e:lst) str = if(e == []) then (checkType lst str) else e
+
+
+--for splitting according to vowels
+tempVowels str = (length ss, ss)
+  where
+    tt = actionVowels str
+    ss = forNM str (length tt)
+
+actionVowels str = if((head (tail str)) == 'u') 
+       	         then (forU str)
+		 else (
+		      if((head (tail str)) == 'i') 
+		      then (forI str) 
+		      else 
+		      (
+		      if((head (tail str)) == 'e')
+		      then (forE str)
+		      else
+		      (
+		      if((head (tail str)) ==  'o')
+		      then (forO str)
+		      else
+		      (
+		      if((head (tail str)) == 'a')
+		      then (forA str)
+		      else ((head str):"")
+		      ))))
+
+forNM str len = if(length str < 5) then (take len str) else (if((elem (head re) "nm") && (not $ elem (head (tail re)) "aeiou")) then (take (len+1) str) else (take len str)) 
+  where
+    re = drop len str
+
+forU str = take 2 str
+forI str = take 2 str
+
+forE (e:e1:[]) = e:e1:[]
+forE (e:e1:str) = if((head str)=='e') then (take 3 (e:e1:str)) else (take 2 (e:e1:str))
+
+forO (e:e1:[]) = e:e1:[]
+forO (e:e1:str) = if((head str)=='o') then (take 3 (e:e1:str)) else (take 2 (e:e1:str))
+
+forA (e:e1:[]) = e:e1:[]
+forA (e:e1:str) = if(elem (head str) "aiu") then (take 3 (e:e1:str)) else (take 2 (e:e1:str))
+
+
+--main function for splitting the whole sentence into set of strings to take their appropriate symbol from a database
+finalMarathi str = concat $ map mytemp $ map splitMarathi $ words str
+
+mytemp str = str ++ [" "]
+
+--splitting a sentence according to the possibilities
+splitMarathi "" = []
+splitMarathi (e:[]) = [[e]]
+splitMarathi (e:str) = if(not (elem e ['a'..'z'])) then ([e] : (splitMarathi str)) else (if(elem e ",.") then [(e:str)] else (if(not $ elem (last str) "aeiou" ) then (splitMarathi ((e:str)++"a")) else (if(elem e "kgcjtdpbs") then ((snd ch ): (splitMarathi (drop (fst ch) (e:str)))) else ((snd ch1 ): (splitMarathi (drop (fst ch1) (e:str)))))))	
+  where
+    ch = tempConsonents (e:str)
+    ch1 = tempVowels (e:str)
+
+
+tempConsonents str = (length (actionConsonents str), (actionConsonents str))
+
+actionConsonents str = if((head str) == 'k') 
+       	         then (forK str)
+		 else (
+		      if((head str) == 'g') 
+		      then (forG str) 
+		      else 
+		      (
+		      if((head  str) == 'c')
+		      then (forC str)
+		      else
+		      (
+		      if((head str) ==  'j')
+		      then (forJ str)
+		      else
+		      (
+		      if((head str) == 't')
+		      then (forT str)
+		      else
+		      (
+		      if((head str) == 'd')
+		      then (forD str)
+		      else
+		      (
+		      if((head str) == 'p')
+		      then (forP str)
+		      else
+		      (
+		      if((head str) == 'b')
+		      then (forB str)
+		      else
+		      (
+		      if((head str) == 's')
+		      then (forS str)
+		      else (snd (tempVowels str))
+		      ))))
+		      ))))
+
+
+--FOR K, KH, KSH
+forK (e:str) = if(head str == 'h') then (forKH (e:str)) else (if(head str == 's') then (forKSH (e:str)) else (snd $ tempVowels (e:str)))
+
+
+forKH (e:str) = ((e:[])++(snd $ tempVowels str))
+
+forKSH (e:e1:[]) = e:e1:[]     
+forKSH (e:e1:str) = if((head str)=='h') then ((e:e1:[])++(snd $ tempVowels str))  else  (snd $ tempVowels (e:e1:str))
+
+
+--FOR G, GH
+forG (e:str) = if(head str == 'h') then ((e:[])++(snd $ tempVowels str))  else (snd $ tempVowels (e:str))
+
+--FOR J, JH
+forJ (e:str) = if(head str == 'h') then ((e:[])++(snd $ tempVowels str))  else (snd $ tempVowels (e:str))
+
+--FOR T, TH, TT, TTH
+forT (e:str) = if(head str == 't') then (forTT (e:str)) else(if(head str == 'h') then ((e:[])++(snd $ tempVowels str))  else (snd $ tempVowels (e:str)))
+
+forTT (e:e1:str) = if(head str == 'h') then ((e:e1:[])++(snd $ tempVowels str))  else ((e:[])++(snd $ tempVowels (e1:str)))
+
+--FOR D, DH, DNY, DD DDH
+
+forD (e:str) = if(head str == 'd') then (forDD (e:str)) else (if(head str == 'h') then (forDH (e:str)) else (if(head str == 'n') then (forDNY (e:str)) else (snd $ tempVowels (e:str))))
+
+forDD (e:e1:str) = if(head str == 'h') then (forDDH (e:e1:str)) else ((e:[])++(snd $ tempVowels (e1:str)))
+
+forDDH (e:e1:str) = ((e:e1:[])++(snd $ tempVowels str))  
+
+forDH (e:str) = ((e:[])++(snd $ tempVowels str))
+
+forDNY (e:e1:[]) = e:e1:[]     
+forDNY (e:e1:str) = if((head str)=='y') then ((e:e1:[])++(snd $ tempVowels str))  else  (snd $ tempVowels (e:e1:str))
+
+
+--FOR C, CH, CHH
+
+forC (e:str) = if(head str == 'h') then (if(head (tail str) == 'h') then (forCHH (e:str))  else (forCH (e:str))) else (snd $ tempVowels (e:str))
+
+forCH (e:str) = ((e:[])++(snd $ tempVowels str))
+
+forCHH (e:e1:[]) = e:e1:[]     
+forCHH (e:e1:str) = ((e:e1:[])++(snd $ tempVowels str))
+
+
+
+--FOR P, PH
+forP (e:str) = if(head str == 'h') then ((e:[])++(snd $ tempVowels str))  else (snd $ tempVowels (e:str))
+
+--FOR B, BH
+forB (e:str) = if(head str == 'h') then ((e:[])++(snd $ tempVowels str))  else (snd $ tempVowels (e:str))
+
+--FOR S, SH, SSH
+forS (e:str) = if(head str == 's') then (forSSH (e:str)) else (if(head str == 'h') then ((e:[])++(snd $ tempVowels str))  else (snd $ tempVowels (e:str)))
+
+forSSH (e:e1:str) = (e:e1:[])++(snd $ tempVowels str)
diff --git a/IndianLanguage/Hindi.hs b/IndianLanguage/Hindi.hs
new file mode 100644
--- /dev/null
+++ b/IndianLanguage/Hindi.hs
@@ -0,0 +1,31 @@
+module IndianLanguage.Hindi (
+	makeHindeeSentence, makeHindeeFile  
+  ) where
+
+import Graphics.UI.Gtk
+--import Database.HDBC.Sqlite3 (connectSqlite3)
+--import Database.HDBC
+import Data.Char
+import IndianLanguage.HandleTranslation
+
+--converting from hindi sentence in english font to hindi font 
+makeHindeeSentence :: String -> IO()
+makeHindeeSentence "" = putStrLn ""
+makeHindeeSentence str = makeWindow (checkForSymbols str)
+
+
+--converting from hindi sentence(s) file in english font to hindi font 
+makeHindeeFile :: FilePath -> FilePath -> IO()
+makeHindeeFile "" "" = putStrLn ""
+makeHindeeFile file1 file2 = do
+	initGUI	
+        textField1 <- textViewNew
+  	textBuffer1 <- textViewGetBuffer textField1
+	str <- readFile file1
+	marathiFont (finalMarathi $ map toLower (checkForSymbols str)) "Languages.db" textBuffer1 "marathiFonts"
+     	sI <- textBufferGetStartIter textBuffer1                    
+     	eI <- textBufferGetEndIter textBuffer1
+     	text1 <- textBufferGetText textBuffer1 sI eI True
+     	let ch = filter (/='a') $ unwords $ putNL $ words (leaveIt text1)
+	writeFile file2 ch
+
diff --git a/IndianLanguage/Marathi.hs b/IndianLanguage/Marathi.hs
new file mode 100644
--- /dev/null
+++ b/IndianLanguage/Marathi.hs
@@ -0,0 +1,32 @@
+module IndianLanguage.Marathi (
+	makeMaraattheeSentence, makeMaraattheeFile  
+  ) where
+
+import Graphics.UI.Gtk
+--import Database.HDBC.Sqlite3 (connectSqlite3)
+--import Database.HDBC
+import Data.Char
+import IndianLanguage.HandleTranslation
+
+--converting from marathi sentence in english font to marathi font 
+makeMaraattheeSentence :: String -> IO()
+makeMaraattheeSentence "" = putStrLn ""
+makeMaraattheeSentence str = makeWindow (checkForSymbols str)
+
+
+--converting from marathi sentence(s) file in english font to marathi font 
+makeMaraattheeFile :: FilePath -> FilePath -> IO()
+makeMaraattheeFile "" "" = putStrLn ""
+makeMaraattheeFile file1 file2 = do
+	initGUI	
+        textField1 <- textViewNew
+  	textBuffer1 <- textViewGetBuffer textField1
+	str <- readFile file1
+	marathiFont (finalMarathi $ map toLower (checkForSymbols str)) "Languages.db" textBuffer1 "marathiFonts"
+     	sI <- textBufferGetStartIter textBuffer1                    
+     	eI <- textBufferGetEndIter textBuffer1
+     	text1 <- textBufferGetText textBuffer1 sI eI True
+     	let ch = filter (/='a') $ unwords $ putNL $ words (leaveIt text1)
+	writeFile file2 ch
+
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,29 @@
+Copyright (c) <2013>, <Akash Fulchand Jagdhane>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the author nor the names of contributors
+    may be used to endorse or promote products derived from this
+    software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Languages.db b/Languages.db
new file mode 100644
Binary files /dev/null and b/Languages.db differ
diff --git a/README.txt b/README.txt
new file mode 100644
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,58 @@
+** How To install this cabal package :
+
+1) go to the extracted directory "indian-language-font-converter-0.0"
+
+2) on terminal , fire the following commands :
+      $ sudo runhaskell Setup.hs configure
+      $ sudo runhaskell Setup.hs build
+      $ sudo runhaskell Setup.hs install
+
+3) to check if the package is installed into ghci, do the following :
+      $ ghci
+      prelude> :module IndianLanguage
+
+   If you will reach something like "prelude IndianLanguage>" in haskell then you can say that the package is properly installed.
+
+4) whenever you need to use this package, just put "Languages.db" file into a current directory, else the functions will give an error(related to sql)
+
+5) well, we can now use this package
+
+
+** Testing the package :
+
+1) we have three modules : 
+		IndianLanguage.Marathi
+		IndianLanguage.Hindi
+		IndianLanguage.HandleTranslation
+
+2) IndianLanguage.HandleTranslation is a supporting module for the remaining two modules. Our main aim is to use first two modules listed above.
+
+3) Prelude> :module IndianLanguage.Marathi 
+   Prelude IndianLanguage.Marathi> makeMaraattheeSentence "maaze naav Aakaash aahe" 
+
+   It will generate a window having a textview with "माझे नाव आकाश आहे" in it.
+ 
+   Prelude IndianLanguage.Marathi> makeMaraattheeFile "inputFile.txt" "outputFile.txt"
+
+   Here, inputFile.txt will have any number of sentences on marathi meaning but which are written in english alphabets, like :
+
+   File Line No 1 : maaze naav aakaash aahe. 
+   File Line No 2 : mee chinchawadd madhye raahato. 
+   File Line No 3 : aakaash maazaa mitra aahe. 
+   File Line No 4 : aaj guruvaar aahe. 
+   File Line No 5 : shubh prabhaat. 
+
+   And after calling "makeMaraattheeFile" function, our "outputFile.txt" will contain :
+   File Line No 1 : माझे नाव आकाश आहे .
+   File Line No 2 : मी चिंचवड मध्ये राहतो . 
+   File Line No 3 : आकाश माझा मित्र आहे . 
+   File Line No 4 : आज गुरुवार आहे . 
+   File Line No 5 : शुभ प्रभात .
+ 	
+4) The same this is present for IndianLanguage.Hindi
+   Two functions, almost similar to makeMaraattheeSentence and makeMaraattheeFile. They are :
+
+   makeHindeeSentence
+   makeHindeeFile
+
+
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,4 @@
+#!/usr/bin/env runhaskell
+
+module  Main (main) where  { import  Distribution.Simple ;  main =
+defaultMain }
diff --git a/indian-language-font-converter.cabal b/indian-language-font-converter.cabal
new file mode 100644
--- /dev/null
+++ b/indian-language-font-converter.cabal
@@ -0,0 +1,20 @@
+cabal-version: >= 1.2
+name: indian-language-font-converter
+synopsis:
+  Indian Language Font Converter
+description:
+  The package is made for people who want to get the sentences in Hindi or Marathi font so that they don't need to remember keys on keyboards when they type Hindi or Marathi script. Or they don't need to waste time on virtual keyboards where everything works with a mouse.
+version: 0.0
+license: BSD3
+license-file: LICENSE
+maintainer: Akash Fulchand Jagdhane
+author: Akash Fulchand Jagdhane
+build-type: Simple
+category: Language
+extra-source-files: Languages.db, README.txt
+library
+  build-depends: base >=3 && < 5, HDBC, HDBC-sqlite3, gtk
+  exposed-modules:
+    IndianLanguage.Marathi
+    IndianLanguage.Hindi
+    IndianLanguage.HandleTranslation
