diff --git a/src/main/java/freemarker/core/DebugBreak.java b/src/main/java/freemarker/core/DebugBreak.java
index c1c22b7..1de26f5 100644
--- a/src/main/java/freemarker/core/DebugBreak.java
+++ b/src/main/java/freemarker/core/DebugBreak.java
@@ -53,8 +53,8 @@
 package freemarker.core;
 
 import java.io.IOException;
+import java.io.Serializable;
 
-import freemarker.debug.Breakpoint;
 import freemarker.debug.DebuggerService;
 import freemarker.template.TemplateException;
 
@@ -64,21 +64,20 @@
 public class DebugBreak extends TemplateElement
 {
     private final DebuggerService debuggerService;    
-    private final String templateName;
+    private final Serializable data;
     
-    public DebugBreak(TemplateElement nestedBlock, DebuggerService debuggerService, Breakpoint breakpoint)
+    public DebugBreak(TemplateElement nestedBlock, DebuggerService debuggerService, Serializable data)
     {
         this.nestedBlock = nestedBlock;
         nestedBlock.parent = this;
         copyLocationFrom(nestedBlock);
         this.debuggerService = debuggerService;
-
-        this.templateName = breakpoint.getTemplateName();
+        this.data = data;   
     }
     
     protected void accept(Environment env) throws TemplateException, IOException
     {
-        if(!debuggerService.suspendEnvironment(env, templateName, nestedBlock.getBeginLine()))
+        if(!debuggerService.suspendEnvironment(env, getTemplate().getName(), nestedBlock.getBeginLine(), data))
         {
             nestedBlock.accept(env);
         }
diff --git a/src/main/java/freemarker/debug/Breakpoint.java b/src/main/java/freemarker/debug/Breakpoint.java
index d54e910..d12c7cc 100644
--- a/src/main/java/freemarker/debug/Breakpoint.java
+++ b/src/main/java/freemarker/debug/Breakpoint.java
@@ -64,16 +64,28 @@
 
     private final String templateName;
     private final int line;
+    private final Serializable data;
+
+    public Breakpoint(String templateName, int line) {
+        this(templateName, line, null);
+    }
     
     /**
      * Creates a new breakpoint.
      * @param templateName the name of the template
      * @param line the line number in the template where to put the breakpoint
+     * @param data arbitrary data attached to this breakpoint, that the debugger client will get back with the
+     *        suspension event. As this data will travel back and forth between the client and server, <b>it has to be
+     *        de-serializable on the server</b>. Also, it shouldn't be very big serialized, as it will be possibly sent
+     *        through network. So if the data is big or might not be de-serializable on another JVM (missing classes), 
+     *        the client should just use an identifier as data (like a {@link Long}) with which later it can get
+     *        the actual data that's only stored on the client.
      */
-    public Breakpoint(String templateName, int line)
+    public Breakpoint(String templateName, int line, Serializable data)
     {
         this.templateName = templateName;
         this.line = line;
+        this.data = data;
     }
 
     /**
@@ -83,6 +95,7 @@
     {
         return line;
     }
+    
     /**
      * Returns the template name of the breakpoint
      */
@@ -91,6 +104,14 @@
         return templateName;
     }
 
+    /**
+     * Returns the arbitrary data attached to this breakpoint.
+     */
+    public Serializable getData()
+    {
+        return data;
+    }
+    
     public int hashCode()
     {
         return templateName.hashCode() + 31 * line;
diff --git a/src/main/java/freemarker/debug/DebuggerService.java b/src/main/java/freemarker/debug/DebuggerService.java
index 0236f18..dd9a344 100644
--- a/src/main/java/freemarker/debug/DebuggerService.java
+++ b/src/main/java/freemarker/debug/DebuggerService.java
@@ -52,6 +52,7 @@
 
 package freemarker.debug;
 
+import java.io.Serializable;
 import java.rmi.RemoteException;
 
 import freemarker.core.Environment;
@@ -71,7 +72,7 @@
 
     void removeBreakpoint(Breakpoint breakpoint);
 
-    boolean suspendEnvironment(Environment env, String templateName, int line) throws
+    boolean suspendEnvironment(Environment env, String templateName, int line, Serializable data) throws
     RemoteException;
     
     void registerTemplate(Template template);
diff --git a/src/main/java/freemarker/debug/EnvironmentSuspendedEvent.java b/src/main/java/freemarker/debug/EnvironmentSuspendedEvent.java
index 360bb66..b9bc2cc 100644
--- a/src/main/java/freemarker/debug/EnvironmentSuspendedEvent.java
+++ b/src/main/java/freemarker/debug/EnvironmentSuspendedEvent.java
@@ -1,5 +1,6 @@
 package freemarker.debug;
 
+import java.io.Serializable;
 import java.util.EventObject;
 
 /**
@@ -13,13 +14,15 @@
 
     private final String name;
     private final int line;
+    private final Serializable data;
     private final DebuggedEnvironment env;
 
-    public EnvironmentSuspendedEvent(Object source, String templateName, int line, DebuggedEnvironment env)
+    public EnvironmentSuspendedEvent(Object source, String templateName, int line, Serializable data, DebuggedEnvironment env)
     {
         super(source);
         this.name = templateName;
         this.line = line;
+        this.data = data;
         this.env = env;
     }
 
@@ -42,6 +45,14 @@
     {
         return line;
     }
+    
+    /**
+     * Returns the arbitrary data that the debugger clients has attached to the {@link Breakpoint};
+     * possibly {@code null}.
+     */
+    public Serializable getData() {
+        return data;
+    }
 
     /**
      * The environment that was suspended
diff --git a/src/main/java/freemarker/debug/impl/AbstractDebuggerService.java b/src/main/java/freemarker/debug/impl/AbstractDebuggerService.java
index c16dd98..0c55cb4 100644
--- a/src/main/java/freemarker/debug/impl/AbstractDebuggerService.java
+++ b/src/main/java/freemarker/debug/impl/AbstractDebuggerService.java
@@ -52,6 +52,7 @@
 
 package freemarker.debug.impl;
 
+import java.io.Serializable;
 import java.lang.ref.ReferenceQueue;
 import java.lang.ref.WeakReference;
 import java.rmi.RemoteException;
@@ -110,7 +111,7 @@
         return sumlist;
     }
 
-    public boolean suspendEnvironment(Environment env, String templateName, int line)
+    public boolean suspendEnvironment(Environment env, String templateName, int line, Serializable data)
     throws
         RemoteException
     {
@@ -125,7 +126,7 @@
         try
         {
             EnvironmentSuspendedEvent breakpointEvent = 
-                new EnvironmentSuspendedEvent(this, templateName, line, denv);
+                new EnvironmentSuspendedEvent(this, templateName, line, data, denv);
     
             synchronized(listeners)
             {
@@ -235,7 +236,7 @@
             return;
         }
         TemplateElement parent = (TemplateElement)te.getParent();
-        DebugBreak db = new DebugBreak(te, this, breakpoint);   
+        DebugBreak db = new DebugBreak(te, this, breakpoint.getData());   
         // TODO: Ensure there always is a parent by making sure
         // that the root element in the template is always a MixedContent
         // Also make sure it doesn't conflict with anyone's code.
