diff --git a/alpha.cabal b/alpha.cabal
--- a/alpha.cabal
+++ b/alpha.cabal
@@ -1,12 +1,12 @@
 name:           alpha
-version:        1.0.13
+version:        1.0.14
 synopsis:       A compiler for the Alpha language
 description:    Alpha is a programming language that aims at being very simple and 
                 low-level, so as to be efficient, while at the same time
                 being able to climb in abstraction through introspection
                 in the Lisp Way.
 category:       Compiler
-homepage:       http://www.alpha-lang.info/
+homepage:       http://www.alpha-lang.net/
 author:         Marc Coiffier
 maintainer:     marc.coiffier@gmail.com
 stability:      alpha
diff --git a/src/Alpha.hs b/src/Alpha.hs
--- a/src/Alpha.hs
+++ b/src/Alpha.hs
@@ -76,8 +76,8 @@
   putStrLn "\rGoodbye !"
 compileProgram (language,entryName) = withInitialContext $ do
   langTime <- importLanguage (const $ return ()) language
-  progTime <- modTime entryName
-  when (progTime < langTime) $ tagIO ("Linking program "++entryName) $ do
+  skipLink <- fileExist entryName <&&> liftM (langTime <=) (modTime entryName)
+  unless skipLink $ tagIO ("Linking program "++entryName) $ do
     entrySym <- viewState language_ $ internSym entryName
     _ <- getAddressComp (outputArch ?settings) entrySym
     (addrs,ptrs) <- unzip $< sortBy (comparing fst) $< M.elems $< gets compAddresses
@@ -108,7 +108,7 @@
   where import' lang = gets language >>= \l -> ifThenElse (lang`isImport`l) (modTime $ languageFile lang) $ do
           node@(time,(l',_)) <- compileLanguage False lang
           times <- mapM import' (getImports l')
-          node <- if time < foldl max time times then compileLanguage True lang else return node
+          node <- if any (> time) times then compileLanguage True lang else return node
           let (time,(l'',init)) = node
               l' = l''{ nameL = lang }
           init' <- viewing language_ $ modify (<>l') >> gets (translateInit init l')
