diff --git a/apps/i2psnark/java/src/org/klomp/snark/MetaInfo.java b/apps/i2psnark/java/src/org/klomp/snark/MetaInfo.java
index 8d2436349a0e6f4a00b2b75c736f75d5eaa85224..8e721648894872c4dde2f57a59d8b7f31d976306 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/MetaInfo.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/MetaInfo.java
@@ -31,6 +31,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import gnu.getopt.Getopt;
+
 import net.i2p.I2PAppContext;
 import net.i2p.crypto.SHA1;
 import net.i2p.data.DataHelper;
@@ -701,20 +703,71 @@ public class MetaInfo
 
   /** @since 0.8.5 */
   public static void main(String[] args) {
-      if (args.length <= 0) {
-          System.err.println("Usage: MetaInfo files...");
-          return;
+      boolean error = false;
+      String created_by = null;
+      String announce = null;
+      Getopt g = new Getopt("Storage", args, "a:c:");
+      try {
+          int c;
+          while ((c = g.getopt()) != -1) {
+            switch (c) {
+              case 'a':
+                  announce = g.getOptarg();
+                  break;
+
+              case 'c':
+                  created_by = g.getOptarg();
+                  break;
+
+              case '?':
+              case ':':
+              default:
+                  error = true;
+                  break;
+            }  // switch
+          } // while
+      } catch (RuntimeException e) {
+          e.printStackTrace();
+          error = true;
+      }
+      if (error || args.length - g.getOptind() <= 0) {
+          System.err.println("Usage: MetaInfo [-a announceURL] [-c created-by] file.torrent [file2.torrent...]");
       }
-      for (int i = 0; i < args.length; i++) {
+      for (int i = g.getOptind(); i < args.length; i++) {
           InputStream in = null;
+          java.io.OutputStream out = null;
           try {
               in = new FileInputStream(args[i]);
               MetaInfo meta = new MetaInfo(in);
-              System.out.println(args[i] + " InfoHash: " + I2PSnarkUtil.toHex(meta.getInfoHash()));
+              System.out.println(args[i] + "\nInfoHash: " + I2PSnarkUtil.toHex(meta.getInfoHash()) +
+                                 "\nAnnounce: " + meta.getAnnounce() +
+                                 "\nCreated By: " + meta.getCreatedBy());
+              if (created_by != null || announce != null) {
+                  String cb = created_by != null ? created_by : meta.getCreatedBy();
+                  String an = announce != null ? announce : meta.getAnnounce();
+                  // changes/adds creation date, loses comment
+                  MetaInfo meta2 = new MetaInfo(an, meta.getName(), null, meta.getFiles(), meta.getLengths(),
+                                                meta.getPieceLength(0), meta.getPieceHashes(), meta.getTotalLength(), meta.isPrivate(),
+                                                meta.getAnnounceList(), cb);
+                  java.io.File from = new java.io.File(args[i]);
+                  java.io.File to = new java.io.File(args[i] + ".bak");
+                  if (net.i2p.util.FileUtil.copy(from, to, true, false)) {
+                      out = new java.io.FileOutputStream(from);
+                      out.write(meta2.getTorrentData());
+                      out.close();
+                      System.out.println("Modified " + from + " and backed up old file to " + to);
+                      System.out.println(args[i] + "\nInfoHash: " + I2PSnarkUtil.toHex(meta2.getInfoHash()) +
+                                         "\nAnnounce: " + meta2.getAnnounce() +
+                                         "\nCreated By: " + meta2.getCreatedBy());
+                  } else {
+                      System.out.println("Failed backup of " + from + " to " + to);
+                  }
+              }
           } catch (IOException ioe) {
               System.err.println("Error in file " + args[i] + ": " + ioe);
           } finally {
               try { if (in != null) in.close(); } catch (IOException ioe) {}
+              try { if (out != null) out.close(); } catch (IOException ioe) {}
           }
       }
   }