old_contents: var Path = require("path"),
      FS   = require("fs"),
      Task = require("sake/task")
  ;
  
  //------------------------------------------------------------------------
  // Publics
  //------------------------------------------------------------------------
  module.exports = Task.derive({
      get exists () {
          return Path.existsSync(this.name);
      },
      /**
       * @property isNeeded
       * @type {boolean}
       * @override Task#isNeeded
       */
      get isNeeded () {
          var outOfDate = this.prerequisites.some(function (preq) {
                  var t = Task.get(preq);
                  return t && t.timestamp > this.timestamp;
              }, this)
          ;
          
          return !this.exists || outOfDate;
      },
  
      /**
       * @property timestamp
       * @type {integer}
       * @override Task#timestamp
       */
      get timestamp () {
          if (Path.existsSync(this.name)) {
              return (new Date(FS.statSync(this.name).mtime)).getTime();
          }
          else {
              return Date.now();
          }
      }
  });
  
new_contents: 
  var Path = require("path"),
      FS   = require("fs"),
      Task = require("sake/task")
  ;
  
  //------------------------------------------------------------------------
  // Publics
  //------------------------------------------------------------------------
  module.exports = Task.derive({
      self: {
          synthesize: function (filepath) {
              return Path.existsSync(filepath) ? new this(filepath) : null;
          }
      },
      
      get exists () {
          return Path.existsSync(this.name);
      },
      /**
       * @property isNeeded
       * @type {boolean}
       * @override Task#isNeeded
       */
      get isNeeded () {
          var outOfDate = this.prerequisites.some(function (preq) {
                  var t = Task.get(preq);
                  return t && t.timestamp > this.timestamp;
              }, this)
          ;
          
          return !this.exists || outOfDate;
      },
  
      /**
       * @property timestamp
       * @type {integer}
       * @override Task#timestamp
       */
      get timestamp () {
          if (Path.existsSync(this.name)) {
              return (new Date(FS.statSync(this.name).mtime)).getTime();
          }
          else {
              return Date.now();
          }
      }
  });
  
subject: Add static synthesize method.