diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/Setup.lhs b/Setup.lhs
new file mode 100644
--- /dev/null
+++ b/Setup.lhs
@@ -0,0 +1,6 @@
+#!/usr/bin/runhaskell 
+> module Main where
+> import Distribution.Simple
+> main :: IO ()
+> main = defaultMain
+
diff --git a/billeksah-main-static.cabal b/billeksah-main-static.cabal
new file mode 100644
--- /dev/null
+++ b/billeksah-main-static.cabal
@@ -0,0 +1,42 @@
+name: billeksah-main-static
+version: 1.0.0
+cabal-version: >= 1.8
+build-type: Simple
+license: LGPL
+license-file: LICENSE
+copyright: Juergen "jutaro" Nicklisch-Franken
+maintainer: maintainer@leksah.org
+homepage: http://www.leksah.org
+package-url: https://github.com/leksah
+bug-reports: http://code.google.com/p/leksah/issues/list
+synopsis: Leksah plugin base
+description: Plugin framework used by leksah (static version)
+category: Control
+author: Juergen "jutaro" Nicklisch-Franken
+tested-with: GHC ==7.0
+
+
+Executable billeksah-main-static
+    main-is: Main.hs
+    other-modules: Base.Plugin
+    buildable: True
+    extensions: CPP
+    hs-source-dirs: src
+    build-depends:
+        base >=4.0.0.0 && <4.4,
+        containers >=0.2 && <0.5,
+        mtl >=1.1.0.2 && <2.1,
+        transformers >= 0.2.2.0 && < 0.3,
+        parsec >= 3.1.1 && < 4,
+        pretty >=1.0.1.0 && <1.1,
+        directory >= 1.1.0.0 && <1.2,
+        filepath >= 1.2.0.0 && < 1.3,
+
+        billeksah-services >= 1.0.0 && < 1.1,
+-- List all plugins here
+
+        billeksah-forms  >= 1.0.0 && < 1.1,
+        billeksah-pane  >= 1.0.0 && < 1.1,
+        leksah-main >= 1.0.0 && < 1.1,
+        leksah-plugin-pane  >= 1.0.0 && < 1.1,
+        leksah-dummy >= 1.0.0 && < 1.1
diff --git a/src/Base/Plugin.hs b/src/Base/Plugin.hs
new file mode 100644
--- /dev/null
+++ b/src/Base/Plugin.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE FlexibleContexts, ScopedTypeVariables, RankNTypes, ExistentialQuantification,
+    DeriveDataTypeable #-}
+
+-----------------------------------------------------------------------------
+--
+-- Module      :  Base.Plugin
+-- Copyright   :  Juergen Nicklisch-Franken
+-- License     :  LGPL
+--
+-- Maintainer  :  maintainer@leksah.org
+-- Stability   :  provisional
+-- Portability :  portabel
+--
+-- | Simple plugin system
+--
+--
+-----------------------------------------------------------------------------
+
+module Base.Plugin (
+    Plugin(..),
+    VersionBounds,
+    Prerequisite,
+    PluginName,
+    PluginInterface(..),
+    PluginConfig(..),
+    BaseEvent,
+    BaseEventValue(..),
+    runAll,
+
+    triggerBaseEvent,
+    registerBaseEvent,
+    getBaseEvent
+) where
+
+import Base
+
+import Data.Version (showVersion, Version(..))
+import Data.IORef (writeIORef, readIORef, newIORef)
+import qualified Data.Map as Map (insert, empty, lookup)
+import Control.Monad.IO.Class (MonadIO(..))
+import Data.Unique (newUnique)
+import Control.Monad (foldM, when)
+import Data.Maybe (isJust, catMaybes)
+import Data.Map (Map)
+import Data.Typeable (Typeable)
+
+
+
+-- | This has to be called from main
+runAll :: FilePath -> PluginConfig -> [Plugin] -> BaseEvent ->
+            Map String GenInterfaceM -> StateM ()
+runAll pluginPath config loadList baseEvent initMap = do
+
+    message Debug ("runAll: " ++ show (map getPluginName loadList))
+
+    -- load and pre-init the plugins
+    iniRes <- loadPlugins baseEvent loadList initMap
+    -- post-init the plugins
+    mapM_ (\(GenInterface interface) -> initInterface baseEvent interface)
+            (catMaybes iniRes)
+    -- trigger the startup event
+    (evtTrigger baseEvent) StartUp -- Here the application shall take control
+    return ()
+
+type Error = String
+
+initInterface :: BaseEvent -> PluginInterface event -> StateM()
+initInterface baseEvent interface = (piInit2 interface) baseEvent (piEvent interface)
+
+
+-- | Load all the plugins,
+loadPlugins
+  :: BaseEvent
+     -> [Plugin]
+     -> Map String GenInterfaceM
+     -> StateM [Maybe GenInterface]
+loadPlugins baseEvent loadList initMap = mapM (loadPlugin baseEvent initMap) loadList
+
+-- | Load one Plugin and call init1
+loadPlugin
+  :: BaseEvent
+     -> Map String GenInterfaceM
+     -> Plugin
+     -> StateM (Maybe GenInterface )
+loadPlugin baseEvent initMap plug@Plugin{plInterface =funcName,plModule = moduleName}  = do
+    message Info ("loadPlugin " ++ getPluginName plug)
+    let genInterface = Map.lookup (plName plug) initMap
+    -- TODO checkVersion
+    case genInterface of
+        Nothing ->  do
+            message Error ("Cant load " ++ show (getPluginName plug))
+            return Nothing
+        Just (GenInterfaceM getInterface) ->  do
+                -- use it for error reporting
+                interface <- getInterface
+                (piInit1 interface) baseEvent (piEvent interface)
+                return (Just (GenInterface interface))
+
+type Warning = String
+
+
+
+
+
+
diff --git a/src/Main.hs b/src/Main.hs
new file mode 100644
--- /dev/null
+++ b/src/Main.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE EmptyDataDecls, ExistentialQuantification #-}
+
+-----------------------------------------------------------------------------
+--
+-- Module      :  Main
+-- Copyright   :  Juergen Nicklisch-Franken
+-- License     :  LGPL
+--
+-- Maintainer  :  maintainer@leksah.org
+-- Stability   :  provisional
+-- Portability :  portabel
+--
+-- | This starts up the plug in shell, and next the app
+--
+-----------------------------------------------------------------------------
+
+module Main (
+    main
+) where
+
+import Base
+import Graphics.Pane
+import Graphics.Forms
+import Leksah (leksahPluginInterface)
+import Panes.PluginConfig (pluginPanePluginInterface)
+
+import Base.Plugin
+
+
+import System.Console.GetOpt
+       (ArgDescr(..), OptDescr(..), OptDescr, usageInfo, ArgOrder(..),
+        getOpt)
+import System.Environment (getArgs)
+import System.FilePath (dropFileName)
+import Data.IORef (newIORef)
+import qualified Data.Map as Map (fromList, empty)
+import Control.Monad.IO.Class (MonadIO(..))
+import Data.Map (Map)
+import Data.Typeable (Typeable)
+import Leksah.Dummy (dummyPluginInterface)
+import Data.Foldable (find)
+import Control.Monad (when)
+import Data.Version (showVersion)
+import System.Exit (exitSuccess)
+import Paths_billeksah_main_static
+
+pluginTable :: Map String GenInterfaceM
+pluginTable = Map.fromList [
+    ("billeksah-forms", GenInterfaceM formsPluginInterface),
+    ("billeksah-pane", GenInterfaceM panePluginInterface),
+    ("leksah-main", GenInterfaceM leksahPluginInterface),
+    ("leksah-plugin-pane", GenInterfaceM pluginPanePluginInterface),
+    ("leksah-dummy", GenInterfaceM dummyPluginInterface)]
+
+
+
+data Flag =    Help
+             | Version
+             | Verbosity String
+       deriving (Show,Eq)
+
+options :: [OptDescr Flag]
+
+options =   [
+             Option ['e'] ["verbosity"] (ReqArg Verbosity "Verbosity")
+                "One of Debug, Info, Warning, Error"
+
+         ,   Option ['v'] ["version"] (NoArg Version)
+                "Show the version number of plugin system"
+         ,   Option ['h'] ["help"] (NoArg Help)
+                "Display command line options"]
+
+
+header :: String
+header = "Usage: billeksah-base [OPTION...] pluginConfig"
+
+
+getOpts :: [String] -> IO ([Flag], [String])
+getOpts argv =
+    case getOpt Permute options argv of
+          (o,n,[]  ) -> return (o,n)
+          (_,_,errs) -> ioError $ userError $ concat errs ++ usageInfo header options
+
+main = do
+    args             <- getArgs
+    (o,files)        <- getOpts args
+    let verbosity'   =  case find (\x -> case x of
+                                            Verbosity s -> True
+                                            _           -> False) o of
+                            Nothing            -> Info
+                            Just (Verbosity v) -> case maybeRead v of
+                                                    Just v' -> v'
+                                                    Nothing -> error $
+                                                        "Main>>main: unknown verbosity "
+                                                             ++ v
+
+    when (elem Version o) $ do
+        putStrLn $ "billeksah-base, version " ++ showVersion version
+        exitSuccess
+    when (elem Help o) $ do
+        putStrLn $ "billeksah-base plugin system, " ++ usageInfo header options
+        exitSuccess
+
+    let pluginCPath  =  case files of
+                            i:_ -> i
+                            _   -> error "Required arg missing: pluginConfig"
+        pluginPath   =  dropFileName pluginCPath
+    config       <- loadPluginConfig pluginCPath
+    runState (do
+        registerMessageLevel verbosity'
+        baseEvent    <- makeEvent BaseEventSel
+        registerEvent'  baseEvent (\ e -> case e of
+                                            BaseLog level str -> liftIO $ putStrLn (show level ++ " " ++ str)
+                                            otherwise -> return ())
+        res <- registerCurrentConfigPath pluginCPath
+        case res of
+            Nothing -> return ()
+            Just str -> message Error str
+
+        --  loadListFromConfig first collect all needed plugins, and then
+        --  sort the list, so that for every plugin, its prerequisites precede them in the list
+        loadList         <- loadListFromConfig baseEvent pluginPath config
+
+        runAll pluginPath config loadList baseEvent pluginTable)
+
