diff --git a/generators/core_constants.go b/generators/core_constants.go
index 0d3de7a8522fdd45bf2d63336a7a8a1bcde14080..0274f845a23bd77ca69443db4c7d4fda8eebeb2a 100644
--- a/generators/core_constants.go
+++ b/generators/core_constants.go
@@ -1,3 +1,4 @@
 package generators
 
 const MODULE_ROOT string = "gitlab.mpi-sws.org/cld/blueprint/blueprint-compiler"
+const VERSION string = "0.0.2"
diff --git a/generators/core_main_visitor.go b/generators/core_main_visitor.go
index 52d466401671a3a59f0a43a80fa0e5fb4b5a71bc..ad2bc42f93f200772b5f948397ac7806132ba91b 100644
--- a/generators/core_main_visitor.go
+++ b/generators/core_main_visitor.go
@@ -86,7 +86,7 @@ func (v *MainVisitor) modifySpecModFile() {
 	}
 	f.Module.Mod.Path = "spec"
 	f.Module.Syntax.Token = []string{"module", "spec"}
-	err = f.AddRequire("gitlab.mpi-sws.org/cld/blueprint/blueprint-compiler", "v0.0.1")
+	err = f.AddRequire("gitlab.mpi-sws.org/cld/blueprint/blueprint-compiler", "v0.0.2")
 	if err != nil {
 		v.logger.Fatal(err)
 	}
@@ -220,7 +220,7 @@ func (v *MainVisitor) generateModFile(ctr_dir string, n *DockerContainerNode) {
 	if err != nil {
 		v.logger.Fatal(err)
 	}
-	err = f.AddRequire("gitlab.mpi-sws.org/cld/blueprint/blueprint-compiler", "v0.0.1")
+	err = f.AddRequire("gitlab.mpi-sws.org/cld/blueprint/blueprint-compiler", "v0.0.2")
 	if err != nil {
 		v.logger.Fatal(err)
 	}
diff --git a/stdlib/choices/cache/memcached.go b/stdlib/choices/cache/memcached.go
index 5c97ab4be418ddff353a96446b2b10b82dbc3b0e..b37667e6bb3572a12cf5a1bfaeb953e818381974 100644
--- a/stdlib/choices/cache/memcached.go
+++ b/stdlib/choices/cache/memcached.go
@@ -8,23 +8,27 @@ import (
 	"gitlab.mpi-sws.org/cld/blueprint/blueprint-compiler/stdlib"
 )
 
-type MCConnection struct{}
+type MCConnection struct{
+	Client *memcache.Client
+}
 
-func NewCacheConn() *MCConnection {
-	return &MCConnection{}
+func NewCacheConn(addr string, port string) *MCConnection {
+	conn_addr := addr + ":" + port
+	client := memcache.New(conn_addr)
+	client.MaxIdleConns = 60000
+	return &MCConnection{Client : client}
 }
 
 type Memcached struct {
-	client   *memcache.Client
 	connPool *stdlib.ClientPool[*MCConnection]
 }
 
 func NewMemcachedClient(addr string, port string) *Memcached {
-	conn_addr := addr + ":" + port
-	client := memcache.New(conn_addr)
-	client.MaxIdleConns = 60000
-	pool := stdlib.NewClientPool[*MCConnection](1024, NewCacheConn)
-	return &Memcached{client: client, connPool: pool}
+	NewConn := func() *MCConnection {
+		return NewCacheConn(addr, port)
+	}
+	pool := stdlib.NewClientPool[*MCConnection](1024, NewConn)
+	return &Memcached{connPool: pool}
 }
 
 func (m *Memcached) Put(key string, value interface{}) error {
@@ -34,13 +38,13 @@ func (m *Memcached) Put(key string, value interface{}) error {
 	if err != nil {
 		return err
 	}
-	return m.client.Set(&memcache.Item{Key: key, Value: marshaled_val})
+	return conn.Client.Set(&memcache.Item{Key: key, Value: marshaled_val})
 }
 
 func (m *Memcached) Get(key string, value interface{}) error {
 	conn := m.connPool.Pop()
 	defer m.connPool.Push(conn)
-	it, err := m.client.Get(key)
+	it, err := conn.Client.Get(key)
 	if err != nil {
 		return err
 	}
@@ -50,20 +54,20 @@ func (m *Memcached) Get(key string, value interface{}) error {
 func (m *Memcached) Incr(key string) (int64, error) {
 	conn := m.connPool.Pop()
 	defer m.connPool.Push(conn)
-	val, err := m.client.Increment(key, 1)
+	val, err := conn.Client.Increment(key, 1)
 	return int64(val), err
 }
 
 func (m *Memcached) Delete(key string) error {
 	conn := m.connPool.Pop()
 	defer m.connPool.Push(conn)
-	return m.client.Delete(key)
+	return conn.Client.Delete(key)
 }
 
 func (m *Memcached) Mget(keys []string, values []interface{}) error {
 	conn := m.connPool.Pop()
 	defer m.connPool.Push(conn)
-	val_map, err := m.client.GetMulti(keys)
+	val_map, err := conn.Client.GetMulti(keys)
 	if err != nil {
 		return err
 	}
@@ -84,9 +88,7 @@ func (m *Memcached) Mset(keys []string, values []interface{}) error {
 	err_chan := make(chan error, len(keys))
 	for idx, key := range keys {
 		go func(key string, val interface{}) {
-			conn := m.connPool.Pop()
 			defer wg.Done()
-			defer m.connPool.Push(conn)
 			err_chan <- m.Put(key, val)
 		}(key, values[idx])
 	}