diff --git a/waf-tools/sparkle.py b/waf-tools/sparkle.py
index 3d628aa..f186199 100644
--- a/waf-tools/sparkle.py
+++ b/waf-tools/sparkle.py
@@ -6,44 +6,44 @@
 
 @conf
 def check_sparkle_base (self, *k, **kw):
-  self.check_cxx (framework_name="Sparkle", header_name=["Foundation/Foundation.h", "AppKit/AppKit.h"],
-                  uselib_store='SPARKLE', define_name='HAVE_SPARKLE',
-                  compile_filename='test.mm', use="FOUNDATION APPKIT",
-                  *k,
-                  **kw
-                  )
+  self.check_cxx(framework_name="Sparkle", header_name=["Foundation/Foundation.h", "AppKit/AppKit.h"],
+                 uselib_store='SPARKLE', define_name='HAVE_SPARKLE',
+                 compile_filename='test.mm', use="FOUNDATION APPKIT",
+                 *k,
+                 **kw
+                 )
 
 @conf
-def check_sparkle (self, *k, **kw):
+def check_sparkle(self, *k, **kw):
     try:
-        self.check_sparkle_base (*k, **kw)
+        self.check_sparkle_base(*k, **kw)
     except:
         try:
             # Try local path
-            # Logs.info ("Check local version of Sparkle framework")
-            self.check_sparkle_base (cxxflags="-F%s/osx/Frameworks/" % self.path.abspath(),
-                                     linkflags="-F%s/osx/Frameworks/" % self.path.abspath())
+            # Logs.info("Check local version of Sparkle framework")
+            self.check_sparkle_base(cxxflags="-F%s/Frameworks/" % self.path.abspath(),
+                                    linkflags="-F%s/Frameworks/" % self.path.abspath())
         except:
             import urllib, subprocess, os, shutil
             if not os.path.exists('osx/Frameworks/Sparkle.framework'):
                 # Download to local path and retry
-                Logs.info ("Sparkle framework not found, trying to download it to 'build/'")
+                Logs.info("Sparkle framework not found, trying to download it to 'build/'")
 
-                urllib.urlretrieve ("http://sparkle.andymatuschak.org/files/Sparkle%201.5b6.zip", "build/Sparkle.zip")
+                urllib.urlretrieve("http://sparkle.andymatuschak.org/files/Sparkle%201.5b6.zip", "build/Sparkle.zip")
                 if os.path.exists('build/Sparkle.zip'):
-                    try:
-                        subprocess.check_call (['unzip', '-qq', 'build/Sparkle.zip', '-d', 'build/Sparkle'])
-                        os.remove ("build/Sparkle.zip")
+                    # try:
+                        subprocess.check_call(['unzip', '-qq', 'build/Sparkle.zip', '-d', 'build/Sparkle'])
+                        os.remove("build/Sparkle.zip")
                         if not os.path.exists("osx/Frameworks"):
-                            os.mkdir ("osx/Frameworks")
-                        os.rename ("build/Sparkle/Sparkle.framework", "osx/Frameworks/Sparkle.framework")
+                            os.mkdir("osx/Frameworks")
+                        os.rename("build/Sparkle/Sparkle.framework", "osx/Frameworks/Sparkle.framework")
                         shutil.rmtree("build/Sparkle", ignore_errors=True)
 
-                        self.check_sparkle_base (cxxflags="-F%s/osx/Frameworks/" % self.path.abspath(),
-                                                 linkflags="-F%s/osx/Frameworks/" % self.path.abspath())
-                    except subprocess.CalledProcessError as e:
-                        self.fatal("Cannot find Sparkle framework. Auto download failed: '%s' returned %s" % (' '.join(e.cmd), e.returncode))
-                    except:
-                        self.fatal("Unknown Error happened when auto downloading Sparkle framework")
+                        self.check_sparkle_base(cxxflags="-F%s/Frameworks/" % self.path.abspath(),
+                                                 linkflags="-F%s/Frameworks/" % self.path.abspath())
+                    # except subprocess.CalledProcessError as e:
+                    #     self.fatal("Cannot find Sparkle framework. Auto download failed: '%s' returned %s" %(' '.join(e.cmd), e.returncode))
+                    # except:
+                    #     self.fatal("Unknown Error happened when auto downloading Sparkle framework")
 def configure(conf):
-    conf.check_sparkle ()
+    conf.check_sparkle()
diff --git a/waf-tools/xcode.py b/waf-tools/xcode.py
index b3b8789..b2b3fd8 100644
--- a/waf-tools/xcode.py
+++ b/waf-tools/xcode.py
@@ -150,7 +150,7 @@
 	def add(self, root, sources):
 		folders = {}
 		def folder(n):
-			if n == root:
+			if not n.is_child_of(root):
 				return self
 			try:
 				return folders[n]
@@ -308,5 +308,3 @@
 		node.mkdir()
 		node = node.make_node('project.pbxproj')
 		p.write(open(node.abspath(), 'w'))
-
-
