diff --git a/modules/io/src/mol/dcd_io.cc b/modules/io/src/mol/dcd_io.cc
index 7ec81f5ed190a9f68aed306199e56cc5cd4d9cf5..39255d366fdd579e035a18ded33ecc3abb77c35e 100644
--- a/modules/io/src/mol/dcd_io.cc
+++ b/modules/io/src/mol/dcd_io.cc
@@ -306,7 +306,7 @@ public:
   }
     
   
-  virtual uint GetFrameCount() 
+  virtual uint GetFrameCount() const
   { 
     if (!frame_count_)
       const_cast<DCDCoordSource*>(this)->FetchFrame(0);
diff --git a/modules/mol/base/pymod/export_coord_group.cc b/modules/mol/base/pymod/export_coord_group.cc
index 6bdeb1d6958f797898aea3a2915a3063daf10dea..a445e74c079e0d2074f3b6bd3e4ce6b7a520ec0a 100644
--- a/modules/mol/base/pymod/export_coord_group.cc
+++ b/modules/mol/base/pymod/export_coord_group.cc
@@ -47,24 +47,32 @@ void export_CoordGroup()
   class_<CoordGroupHandle>("CoordGroupHandle",no_init)
     .def("IsValid",&CoordGroupHandle::IsValid)
     .def("GetEntity",&CoordGroupHandle::GetEntity)
+    .add_property("entity",&CoordGroupHandle::GetEntity)
     .def("GetAtomCount",&CoordGroupHandle::GetAtomCount)
+    .add_property("atom_count",&CoordGroupHandle::GetAtomCount)
     .def("GetFrame",&CoordGroupHandle::GetFrame2)
     .def("AddFrames", &CoordGroupHandle::AddFrames)
     .def("AddFrame", add_frame1)
     .def("AddFrame", add_frame2)
     .def("GetFrameCount",&CoordGroupHandle::GetFrameCount)
+    .add_property("frame_count",&CoordGroupHandle::GetFrameCount)
     .def("GetFramePositions",&CoordGroupHandle::GetFramePositions)
     .def("SetFramePositions",&CoordGroupHandle::SetFramePositions)
     .def("SetAtomPos",&CoordGroupHandle::SetAtomPos)
     .def("GetAtomPos",&CoordGroupHandle::GetAtomPos)
     .def("CopyFrame",&CoordGroupHandle::CopyFrame)
-    .add_property("atoms", &CoordGroupHandle::GetAtomList)
-    .add_property("entity", &CoordGroupHandle::GetEntity)
     .def("IsValid", &CoordGroupHandle::IsValid)
     .def("Capture", capture1)
     .def("Capture", capture2)
     .def("CaptureInto",&CoordGroupHandle::CaptureInto)
     .def("GetAtomList",&CoordGroupHandle::GetAtomList)
+    .add_property("atoms", &CoordGroupHandle::GetAtomList)
+    .def("GetDelta",&CoordGroupHandle::GetDelta)
+    .def("SetDelta",&CoordGroupHandle::SetDelta)
+    .add_property("delta",&CoordGroupHandle::GetDelta,&CoordGroupHandle::SetDelta)
+    .def("GetStartTime",&CoordGroupHandle::GetStartTime)
+    .def("SetStartTime",&CoordGroupHandle::SetStartTime)
+    .add_property("start_time",&CoordGroupHandle::GetStartTime,&CoordGroupHandle::SetStartTime)
     .def("__getitem__",cg_getitem)
     .def("__setitem__",cg_setitem)
     .def("Filter", &CoordGroupHandle::Filter, (arg("selected"),arg("first")=0,arg("last")=-1))
diff --git a/modules/mol/base/src/coord_group.cc b/modules/mol/base/src/coord_group.cc
index db3fd341ce04a76c6e928ca1e0fd93e869b583c7..bd56a4e004159ee76f30cbf8e4d5051a0967fae3 100644
--- a/modules/mol/base/src/coord_group.cc
+++ b/modules/mol/base/src/coord_group.cc
@@ -66,6 +66,30 @@ uint CoordGroupHandle::GetFrameCount() const
   return source_->GetFrameCount();
 }
 
+float CoordGroupHandle::GetDelta() const
+{
+  this->CheckValidity();  
+  return source_->GetFrameDelta();
+}
+
+void CoordGroupHandle::SetDelta(float d)
+{
+  this->CheckValidity();  
+  source_->SetFrameDelta(d);
+}
+
+float CoordGroupHandle::GetStartTime() const
+{
+  this->CheckValidity();  
+  return source_->GetStartTime();
+}
+
+void CoordGroupHandle::SetStartTime(float t)
+{
+  this->CheckValidity();  
+  source_->SetStartTime(t);
+}
+
 void CoordGroupHandle::SetFramePositions(uint frame, 
                                          const std::vector<geom::Vec3>& clist)
 {
diff --git a/modules/mol/base/src/coord_group.hh b/modules/mol/base/src/coord_group.hh
index 652fe34636d3dc11c7fa5168c83c05d906b6524a..bf049aadd049b4a3803c8fe1bc35f954f72d142b 100644
--- a/modules/mol/base/src/coord_group.hh
+++ b/modules/mol/base/src/coord_group.hh
@@ -35,6 +35,8 @@ class DLLEXPORT_OST_MOL CoordGroupHandle {
 public:
   /// \brief create empty, invalid handle
   CoordGroupHandle();
+  /// \brief used internally
+  CoordGroupHandle(CoordSourcePtr source);
 
   /// \brief return trajectories entity handle
   EntityHandle GetEntity() const;
@@ -48,6 +50,18 @@ public:
   /// \brief number of frames
   uint GetFrameCount() const;
 
+  /// \brief time in ps between frames, default 0.0
+  float GetDelta() const;
+
+  /// \brief set time between each frame in ps
+  void SetDelta(float d);
+
+  /// \brief start time in ps, default 0.0
+  float GetStartTime() const;
+
+  /// \rbrief set start time in ps
+  void SetStartTime(float t);
+
   /// \brief assign positions to the given frame - order and count must match 
   ///      initial atomlist
   void SetFramePositions(uint frame, const std::vector<geom::Vec3>& clist);
@@ -92,7 +106,6 @@ public:
   ///     view
   CoordGroupHandle Filter(const EntityView& selected,int first=0,int last=-1) const;
   
-  CoordGroupHandle(CoordSourcePtr source);
 
 
 private:
diff --git a/modules/mol/base/src/coord_source.cc b/modules/mol/base/src/coord_source.cc
index 5f0e42a633334acc768b9796399ab002fdad6599..335117423068e6bae62392a60bbaf87f2658ae96 100644
--- a/modules/mol/base/src/coord_source.cc
+++ b/modules/mol/base/src/coord_source.cc
@@ -35,7 +35,9 @@ CoordSource::CoordSource(const AtomHandleList& atoms):
   atoms_(atoms), 
   entity_(),
   mutable_(false),
-  atom_dict_()
+  atom_dict_(),
+  delta_(1.0),
+  start_time_(0.0)
 {
   if (!atoms_.empty()) {
     entity_=atoms_.front().GetEntity();
@@ -45,12 +47,6 @@ CoordSource::CoordSource(const AtomHandleList& atoms):
   }
 }
 
-  
-CoordSource::~CoordSource()
-{
-  
-}
-
 void CoordSource::CopyFrame(uint frame_id)
 {
   if (atoms_.empty()) {
diff --git a/modules/mol/base/src/coord_source.hh b/modules/mol/base/src/coord_source.hh
index fec0d9946cb2ecd275abb23d5ebb58b080422734..a50f256a15ee81b62d969ef92be0a64cb7cb5bbb 100644
--- a/modules/mol/base/src/coord_source.hh
+++ b/modules/mol/base/src/coord_source.hh
@@ -43,14 +43,22 @@ class DLLEXPORT_OST_MOL CoordSource {
 public:
   CoordSource(const AtomHandleList& atoms);
   
-  virtual ~CoordSource();
+  virtual ~CoordSource() {}
   
+  virtual uint GetFrameCount() const =0;
+
+  virtual CoordFramePtr GetFrame(uint frame_id) const = 0;
+ 
   CoordSourcePtr Extract(int start=0, int stop=-1, int step=1);
   
-  virtual uint GetFrameCount()=0;
+  // time in ps between frames
+  float GetFrameDelta() const {return delta_;}
+  void SetFrameDelta(float d) {delta_=d;}
+
+  // start time in ps
+  float GetStartTime() const {return start_time_;}
+  void SetStartTime(float t) {start_time_=t;}
   
-  virtual CoordFramePtr GetFrame(uint frame_id) const = 0;
- 
   int GetAtomCount() const;
   
   EntityHandle GetEntity() const;
@@ -79,6 +87,7 @@ private:
   EntityHandle   entity_;
   bool           mutable_;
   std::map<long,uint> atom_dict_;
+  float delta_,start_time_;
 };
 
 }}
diff --git a/modules/mol/base/src/in_mem_coord_source.cc b/modules/mol/base/src/in_mem_coord_source.cc
index ea01db894a69efa04189e126b3f2d6429df46f12..a8d985c25acd30213949ad9139b2dc3e7048cd70 100644
--- a/modules/mol/base/src/in_mem_coord_source.cc
+++ b/modules/mol/base/src/in_mem_coord_source.cc
@@ -9,7 +9,7 @@ InMemCoordSource::InMemCoordSource(const AtomHandleList& atoms):
   this->SetMutable(true);
 }
   
-uint InMemCoordSource::GetFrameCount()
+uint InMemCoordSource::GetFrameCount() const
 {
   return frames_.size();
 }
diff --git a/modules/mol/base/src/in_mem_coord_source.hh b/modules/mol/base/src/in_mem_coord_source.hh
index 0984791aae634bcf315efe08f55f10850ef77c5f..6b6d15f6a22c804fdbe901358817f59093f83f47 100644
--- a/modules/mol/base/src/in_mem_coord_source.hh
+++ b/modules/mol/base/src/in_mem_coord_source.hh
@@ -38,7 +38,7 @@ class DLLEXPORT_OST_MOL InMemCoordSource : public CoordSource {
 public:
   InMemCoordSource(const AtomHandleList& atoms);
   
-  virtual uint GetFrameCount();
+  virtual uint GetFrameCount() const;
   
   virtual CoordFramePtr GetFrame(uint frame_id) const;