diff --git a/paragon.cabal b/paragon.cabal
--- a/paragon.cabal
+++ b/paragon.cabal
@@ -1,5 +1,5 @@
 Name:                   paragon
-Version:                0.1.7
+Version:                0.1.8
 License:                BSD3
 License-File:           LICENSE
 Author:                 Niklas Broberg
@@ -50,6 +50,7 @@
                         Language.Java.Paragon.TypeCheck.Uniq,
                         Language.Java.Paragon.QuasiQuoter,
                         Language.Java.Paragon.Compile,
+                        Language.Java.Paragon.PiGeneration,
                         Language.Java.Paragon.Verbosity
 
   Hs-source-dirs:       src
@@ -82,6 +83,7 @@
                         Language.Java.Paragon.TypeCheck.Uniq,
                         Language.Java.Paragon.QuasiQuoter,
                         Language.Java.Paragon.Compile,
+                        Language.Java.Paragon.PiGeneration,
                         Language.Java.Paragon.Verbosity
 
 
diff --git a/src/Language/Java/Paragon/PiGeneration.hs b/src/Language/Java/Paragon/PiGeneration.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Java/Paragon/PiGeneration.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE QuasiQuotes #-}
+module Language.Java.Paragon.PiGeneration where
+
+import Language.Java.Paragon.Syntax
+import Control.Applicative
+import Language.Java.Paragon.QuasiQuoter
+
+piTransform :: CompilationUnit -> CompilationUnit 
+piTransform  = transformCompilationUnit
+--for generating Pi there should be a package name
+-- no imports
+-- one type for each compilationUnit since the execution is for one class but we can transform without considering that condition
+transformCompilationUnit :: CompilationUnit -> CompilationUnit
+transformCompilationUnit (CompilationUnit mpDecl _  tdecls)
+  = CompilationUnit mpDecl []  (transformTypeDecl<$>tdecls)
+----------------
+transformTypeDecl :: TypeDecl -> TypeDecl
+transformTypeDecl (InterfaceTypeDecl (InterfaceDecl mods iden tparams refts ib))
+  =  ClassTypeDecl (ClassDecl mods iden tparams Nothing refts (transformInterfaceBody ib)) -- Maybe typeDecl
+transformTypeDecl (ClassTypeDecl (ClassDecl mods iden tparams mt refts (ClassBody dcls))) 
+  = ClassTypeDecl (ClassDecl mods iden tparams mt refts (ClassBody $ transformDecl<$>dcls))
+----------------    
+transformDecl :: Decl -> Decl    
+transformDecl (MemberDecl md) = MemberDecl $ transformMemberDecl md 
+----------------
+transformInterfaceBody :: InterfaceBody -> ClassBody
+transformInterfaceBody (InterfaceBody mds) = ClassBody $ (\md->MemberDecl (transformMemberDecl md))<$>mds
+-------------
+transformMemberDecl :: MemberDecl -> MemberDecl 
+transformMemberDecl f@(FieldDecl fmods [typeQQ|actor|] vdecs) = f
+transformMemberDecl (FieldDecl fmods ft vdecs) = (FieldDecl fmods ft (transformVarDecls vdecs))
+transformMemberDecl m@(MethodDecl mmods mtparams mmaybet mident mformparams mexceptionspecs mb) 
+  | Typemethod `elem` mmods  = m
+  | otherwise  = MethodDecl mmods mtparams mmaybet mident mformparams mexceptionspecs (transformMethodBody mb)
+transformMemberDecl (ConstructorDecl cmods ctparams cident cformparams cexceptionspecs cb) 
+  = ConstructorDecl cmods ctparams cident cformparams cexceptionspecs (transformConstructorBody cb)
+transformMemberDecl x = x
+-- I assumed the LockDecl and PolicyDecl should not be touch 
+-- Also I didnt write code for inner classes/interfaces 
+------
+transformVarDecls :: [VarDecl] -> [VarDecl]
+transformVarDecls vds = [ VarDecl varDeclId Nothing | (VarDecl varDeclId _) <- vds]
+-------
+transformMethodBody :: MethodBody -> MethodBody
+transformMethodBody = const $MethodBody  Nothing -- [methodBodyQQ|{}|] 
+-- maybe we have to add nothing instead of "just emptyMethodBody" 
+-------
+transformConstructorBody ::  ConstructorBody -> ConstructorBody
+transformConstructorBody (ConstructorBody explConstrInvm bs) = ConstructorBody  Nothing [] -- second argument nothing ?
+
+
+
+ 
