diff --git a/GraphRewriting/Strategies/Control.hs b/GraphRewriting/Strategies/Control.hs
new file mode 100644
--- /dev/null
+++ b/GraphRewriting/Strategies/Control.hs
@@ -0,0 +1,27 @@
+{-# LANGUAGE UnicodeSyntax, FlexibleInstances, MultiParamTypeClasses, FlexibleContexts, OverlappingInstances #-}
+module GraphRewriting.Strategies.Control where
+
+import Data.View
+import GraphRewriting.Graph
+--import GraphRewriting.Layout.PortSpec
+import qualified Data.IntMap as Map
+
+data Wrapper n = Wrapper {control :: Control, wrapped :: n}
+
+data Control = Control {stack ∷ [Node]} | NoControl
+
+instance View Control (Wrapper n) where
+	inspect = control
+	update c n = n {control = c}
+
+instance View v n ⇒ View v (Wrapper n) where
+	inspect = inspect . wrapped
+	update v n = n {wrapped = update v $ wrapped n}
+
+-- | Wraps the nodes of a graph, augmenting them with control information
+wrapGraph :: Graph n -> Graph (Wrapper n)
+wrapGraph graph = graph {nodeMap = newNodeMap} where
+		wrapNode n = Wrapper {control = NoControl, wrapped = n}
+		rootNodeId = minimum (Map.keys $ nodeMap graph)
+		controlgraph = unsafeMapNodes wrapNode graph
+ 		newNodeMap = Map.update (\x → Just $ x {control = Control []}) rootNodeId (nodeMap controlgraph)
diff --git a/GraphRewriting/Strategies/LeftmostOutermost.hs b/GraphRewriting/Strategies/LeftmostOutermost.hs
new file mode 100644
--- /dev/null
+++ b/GraphRewriting/Strategies/LeftmostOutermost.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE UnicodeSyntax, FlexibleContexts #-}
+module GraphRewriting.Strategies.LeftmostOutermost where
+
+import GraphRewriting.Pattern
+import GraphRewriting.Graph.Write
+import GraphRewriting.Graph.Read
+import GraphRewriting.Rule
+import GraphRewriting.Strategies.Control
+import Data.List (intersect, (\\))
+
+
+-- | Gives us the the 'left' port for a given node
+class LeftmostOutermost n where lmoPort ∷ n → Maybe Port
+
+instance LeftmostOutermost n ⇒ LeftmostOutermost (Wrapper n) where lmoPort = lmoPort . wrapped
+
+getLmoPort ∷ (LeftmostOutermost n) ⇒ Node → Pattern n Port
+getLmoPort n = do
+	node ← liftReader $ readNode n
+	case lmoPort node of
+		Nothing → fail "Term is in WHNF"
+		Just lo → return lo
+
+-- It does not compile with this type signature, even when IncoherentInstances are given in Control.
+moveControl ∷ (View [Port] n, View Control n, LeftmostOutermost n) => Rule n
+moveControl = do
+	Control {stack = s} ← node
+	control ← previous
+	lmo1 ← getLmoPort control
+	n ← branchNodes =<< liftReader . adverseNodes control =<< getLmoPort control
+	return $ do
+		updateNode control NoControl
+		updateNode n (Control {stack = control : s})
+
+-- It does not compile with this type signature, even when IncoherentInstances are given in Control.
+leftmostOutermost ∷ (View Control n, View [Port] n) ⇒ Rule n → Rule n
+leftmostOutermost r = do
+	rewrite ← r
+	ns ← history -- we want the first node of the matching pattern
+	let topnode = last ns
+	Control {stack = s} ← liftReader $ inspectNode topnode
+	return $ do
+		updateNode topnode NoControl -- First we set the topnode to not be the control node any more
+		oldNodes ← readNodeList
+		rewrite -- then we perform the rewrite
+		newNodes ← readNodeList
+		let s' = intersect s newNodes -- only consider nodes for the control marker that exist
+		if null s' -- even the topmost node has been replaced
+			then do -- we assign the control marker to one of the newly created nodes
+				let addedNodes = newNodes \\ oldNodes
+				updateNode (head addedNodes) (Control {stack = []}) -- finally we set the previous node on the stack as the control node
+			else do -- set the previous node on the stack as the control node
+				updateNode (head s') (Control {stack = tail s'})
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,10 @@
+Copyright (c) 2010, Jan Rochel
+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 University of Utrecht nor the names of its 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 HOLDER 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/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/graph-rewriting-strategies.cabal b/graph-rewriting-strategies.cabal
new file mode 100644
--- /dev/null
+++ b/graph-rewriting-strategies.cabal
@@ -0,0 +1,31 @@
+Name:          graph-rewriting-strategies
+Version:       0.2
+Copyright:     2012, Robert Kreuzer, Jan Rochel
+License:       BSD3
+License-File:  LICENSE
+Author:        Robert Kreuzer, Jan Rochel
+Maintainer:    jan@rochel.info
+Homepage:      http://rochel.info/#graph-rewriting
+Stability:     alpha
+Build-Type:    Simple
+Synopsis:      Evaluation strategies for port-graph rewriting systems
+Description:   Defines a mechanism to add evaluation strategies to graph rewriting systems. Currently only leftmost-outermost reduction is implemented.
+Category:      Graphs, Graphics
+Cabal-Version: >= 1.6
+
+Library
+  Build-Depends:
+    base >= 4 && < 4.6,
+    base-unicode-symbols >= 0.2 && < 0.3,
+    graph-rewriting >= 0.7 && < 0.8,
+    containers >= 0.4 && < 0.5
+  Exposed-Modules:
+    GraphRewriting.Strategies.Control
+    GraphRewriting.Strategies.LeftmostOutermost
+  Extensions:
+    UnicodeSyntax
+    FlexibleInstances
+    MultiParamTypeClasses
+    FlexibleContexts
+    OverlappingInstances
+  GHC-Options:    -fno-warn-duplicate-exports -fwarn-unused-binds -fwarn-unused-imports -fwarn-unused-do-bind -fwarn-wrong-do-bind -fwarn-unrecognised-pragmas
