diff --git a/fsabuilder/morfeuszbuilder/segrules/preprocessor.py b/fsabuilder/morfeuszbuilder/segrules/preprocessor.py
index 231fe9d..dd5d8c0 100644
--- a/fsabuilder/morfeuszbuilder/segrules/preprocessor.py
+++ b/fsabuilder/morfeuszbuilder/segrules/preprocessor.py
@@ -76,7 +76,6 @@ def _processLine(lineNum, line, defines, filename):
 def preprocess(inputLines, defs, filename):
     defines = {}
     ifdefsStack = []
-    wasElse = False
     for lineNum, line in inputLines:
         if line.startswith('#define'):
             parsedDefine = list(pyparseString(define, lineNum, line, filename))
@@ -91,17 +90,18 @@ def preprocess(inputLines, defs, filename):
                 defines[name] = ArgDefine(name, arg, val)
         elif line.startswith('#ifdef'):
             name = pyparseString(ifdef, lineNum, line, filename)[0]
-#             name = ifdef.parseString(line)[0]
-            ifdefsStack.append(name)
+            ifdefsStack.append((name, True))
         elif line.startswith('#else'):
-            ifdefsStack.pop()
-            wasElse = True
+            name, isActive = ifdefsStack[-1]
+            assert isActive
+            ifdefsStack[-1] = name, False
+#             ifdefsStack.pop()
         elif line.startswith('#endif'):
-            if not wasElse:
-                ifdefsStack.pop()
-            wasElse = False
+            ifdefsStack.pop()
         elif line.startswith('#'):
             yield lineNum, line
-        elif len(ifdefsStack) == 0 or all(map(lambda name: name in defs, ifdefsStack)):
+        elif len(ifdefsStack) == 0 or \
+            (all(map(lambda (name, isActive): name in defs and isActive, ifdefsStack))
+                and not any(map(lambda (name, isActive): name in defs and not isActive, ifdefsStack))):
             yield lineNum, _processLine(lineNum, line, defines, filename)
         
\ No newline at end of file