diff --git a/INFO.yaml b/INFO.yaml
index 3c821b8..20a439a 100644
--- a/INFO.yaml
+++ b/INFO.yaml
@@ -1,5 +1,5 @@
 ---
-project: 'dmaap-messagerouter-msgrtr'
+project: 'dmaap-dbcapi'
 project_creation_date: '2017-08-29'
 lifecycle_state: 'Incubation'
 project_lead: &onap_releng_ptl
@@ -9,50 +9,67 @@
     company: 'ATT'
     timezone: 'America/Dallas'
 primary_contact: *onap_releng_ptl
+project_category: ''
 issue_tracking:
     type: 'jira'
     url: 'https://jira.onap.org/projects/DMAAP'
     key: 'DMAAP'
+mailing_list:
+    type: 'groups.io'
+    url: 'lists.onap.org'
+    tag: '<[sub-project_name]>'
+realtime_discussion: ''
 meetings:
     - type: 'zoom'
-        agenda: ''
-        url: 'https://wiki.onap.org/pages/viewpage.action?pageId=13599275'
-        server: 'n/a'
-        channel: 'n/a'
-        repeats: 'weekly'
-        time: '13:00 UTC'
+      agenda: ''
+      url: 'https://wiki.onap.org/pages/viewpage.action?pageId=13599275'
+      server: 'n/a'
+      channel: 'n/a'
+      repeats: 'weekly'
+      time: '13:00 UTC'
+repositories:
+    - 'dmaap-buscontroller'
+    - 'dmaap-datarouter'
+    - 'dmaap-dbcapi'
+    - 'dmaap-kafka11aaf'
+    - 'dmaap-messagerouter-dmaapclient'
+    - 'dmaap-messagerouter-messageservice'
+    - 'dmaap-messagerouter-mirroragent'
+    - 'dmaap-messagerouter-msgrtr'
+    - 'dmaap-oom'
+    - 'dmaap-zookeeper'
 committers:
     - <<: *onap_releng_ptl
     - name: 'Mandar Sawant'
-        email: 'ms5838@att.com'
-        company: 'ATT'
-        id: 'sawantmandar'
-        timezone: 'America/Dallas'
+      email: 'ms5838@att.com'
+      company: 'ATT'
+      id: 'sawantmandar'
+      timezone: 'America/Dallas'
     - name: 'Varun Gudisena'
-        email: 'vg411h@att.com'
-        company: 'ATT'
-        id: 'vg411h'
-        timezone: 'America/Dallas'
+      email: 'vg411h@att.com'
+      company: 'ATT'
+      id: 'vg411h'
+      timezone: 'America/Dallas'
     - name: 'Bhanu Ramesh'
-        email: 'bg6954@att.com'
-        company: 'ATT'
-        id: 'BhanuRamesh'
-        timezone: 'America/Dallas'
+      email: 'bg6954@att.com'
+      company: 'ATT'
+      id: 'BhanuRamesh'
+      timezone: 'America/Dallas'
     - name: 'Dominic Lunanuova'
-        email: 'dgl@research.att.com'
-        company: 'ATT'
-        id: 'dglFromAtt'
-        timezone: 'America/Dallas'
+      email: 'dgl@research.att.com'
+      company: 'ATT'
+      id: 'dglFromAtt'
+      timezone: 'America/Dallas'
     - name: 'Sunil Unnava'
-        email: 'su622b@att.com'
-        company: 'ATT'
-        id: 'su622b'
-        timezone: 'America/Louisville'
+      email: 'su622b@att.com'
+      company: 'ATT'
+      id: 'su622b'
+      timezone: 'America/Louisville'
     - name: 'Conor Ward'
-        email: 'conor.ward@ericsson.com'
-        company: 'ericsson'
-        id: 'econwar'
-        timezone: 'America/Dallas'
+      email: 'conor.ward@ericsson.com'
+      company: 'ericsson'
+      id: 'econwar'
+      timezone: 'America/Dallas'
 tsc:
     approval: 'https://lists.onap.org/pipermail/onap-tsc'
     changes:
diff --git a/src/main/java/org/onap/dmaap/dbcapi/client/DrProvConnection.java b/src/main/java/org/onap/dmaap/dbcapi/client/DrProvConnection.java
index 441596a..3cb3d67 100644
--- a/src/main/java/org/onap/dmaap/dbcapi/client/DrProvConnection.java
+++ b/src/main/java/org/onap/dmaap/dbcapi/client/DrProvConnection.java
@@ -411,7 +411,7 @@
             if (rc >= 200 && rc < 300 ) {
      			responseBody = bodyToString( uc.getInputStream() );
     			logger.info( "responseBody=" + responseBody );
-
+    			err.setCode( rc );
             } else if ( rc == 404 ) {
             	err.setCode( rc );
             	err.setFields( "feedid");
diff --git a/src/main/java/org/onap/dmaap/dbcapi/model/DR_Pub.java b/src/main/java/org/onap/dmaap/dbcapi/model/DR_Pub.java
index 06598f7..0d146b7 100644
--- a/src/main/java/org/onap/dmaap/dbcapi/model/DR_Pub.java
+++ b/src/main/java/org/onap/dmaap/dbcapi/model/DR_Pub.java
@@ -32,6 +32,10 @@
 	private String userpwd;
 	private String feedId;
 	private String pubId;
+	
+	// NOTE: the following fields are optional in the API but not stored in the DB
+	private	String	feedName;
+	private String	feedVersion;
 
 	
 	public DR_Pub() {
@@ -114,6 +118,22 @@
 	public void setNextPubId() {
 		this.pubId = this.feedId + "." +  DR_Pub.nextKey();
 	}
+	
+	public String getFeedName() {
+		return feedName;
+	}
+
+	public void setFeedName(String feedName) {
+		this.feedName = feedName;
+	}
+
+	public String getFeedVersion() {
+		return feedVersion;
+	}
+
+	public void setFeedVersion(String feedVersion) {
+		this.feedVersion = feedVersion;
+	}
 
 	public DR_Pub setRandomUserName() {
 		RandomString r = new RandomString(15);
diff --git a/src/main/java/org/onap/dmaap/dbcapi/model/DR_Sub.java b/src/main/java/org/onap/dmaap/dbcapi/model/DR_Sub.java
index dd0b85d..9b6e2d7 100644
--- a/src/main/java/org/onap/dmaap/dbcapi/model/DR_Sub.java
+++ b/src/main/java/org/onap/dmaap/dbcapi/model/DR_Sub.java
@@ -45,6 +45,10 @@
 	private boolean guaranteedDelivery;
 	private boolean guaranteedSequence;
 	private boolean privilegedSubscriber;
+	
+	// NOTE: the following fields are optional in the API but not stored in the DB
+	private	String	feedName;
+	private String	feedVersion;
 
 	public DR_Sub() {
 
@@ -230,6 +234,24 @@
 	public void setPrivilegedSubscriber(boolean privilegedSubscriber) {
 		this.privilegedSubscriber = privilegedSubscriber;
 	}
+	
+	
+
+	public String getFeedName() {
+		return feedName;
+	}
+
+	public void setFeedName(String feedName) {
+		this.feedName = feedName;
+	}
+
+	public String getFeedVersion() {
+		return feedVersion;
+	}
+
+	public void setFeedVersion(String feedVersion) {
+		this.feedVersion = feedVersion;
+	}
 
 	public byte[] getBytes(String provApi) {
 		if ( "AT&T".equals(provApi)) {
diff --git a/src/main/java/org/onap/dmaap/dbcapi/resources/DR_PubResource.java b/src/main/java/org/onap/dmaap/dbcapi/resources/DR_PubResource.java
index bcdb4b3..1673857 100644
--- a/src/main/java/org/onap/dmaap/dbcapi/resources/DR_PubResource.java
+++ b/src/main/java/org/onap/dmaap/dbcapi/resources/DR_PubResource.java
@@ -91,21 +91,42 @@
 			DR_Pub pub
 			) {
 		ApiService resp = new ApiService();
+		FeedService feeds = new FeedService();
+		Feed fnew = null;
 
 		logger.info( "Entry: POST /dr_pubs");
 
 		try {
 			resp.required( "feedId", pub.getFeedId(), "");
+		} catch ( RequiredFieldException rfe ) {
+			try {
+				resp.required( "feedName", pub.getFeedName(), "");
+			}catch ( RequiredFieldException rfe2 ) {
+				logger.debug( resp.toString() );
+				return resp.error();
+			}
+			// if we found a FeedName instead of a FeedId then try to look it up.
+			List<Feed> nfeeds =  feeds.getAllFeeds( pub.getFeedName(), pub.getFeedVersion(), "equals");
+			if ( nfeeds.size() != 1 ) {
+				logger.debug( "Attempt to match "+ pub.getFeedName() + " ver="+pub.getFeedVersion() + " matched " + nfeeds.size() );
+				return resp.error();
+			}
+			fnew = nfeeds.get(0);
+		}
+		try {
 			resp.required( "dcaeLocationName", pub.getDcaeLocationName(), "");
 		} catch ( RequiredFieldException rfe ) {
 			logger.debug( resp.getErr().toString() );
 			return resp.error();	
 		}
 
-		FeedService feeds = new FeedService();
-		Feed fnew = feeds.getFeed( pub.getFeedId(), resp.getErr() );
+
+		// we may have fnew already if located by FeedName
 		if ( fnew == null ) {
-			logger.info( "Specified feed " + pub.getFeedId() + " not known to Bus Controller");	
+			fnew = feeds.getFeed( pub.getFeedId(), resp.getErr() );
+		}
+		if ( fnew == null ) {
+			logger.info( "Specified feed " + pub.getFeedId() + " or " + pub.getFeedName() + " not known to Bus Controller");	
 			return resp.error();	
 		}
 
diff --git a/src/main/java/org/onap/dmaap/dbcapi/resources/DR_SubResource.java b/src/main/java/org/onap/dmaap/dbcapi/resources/DR_SubResource.java
index 28bfdc5..498454e 100644
--- a/src/main/java/org/onap/dmaap/dbcapi/resources/DR_SubResource.java
+++ b/src/main/java/org/onap/dmaap/dbcapi/resources/DR_SubResource.java
@@ -92,24 +92,41 @@
 			) {
 	
 		ApiService resp = new ApiService();
-
+		FeedService feeds = new FeedService();
+		Feed fnew = null;
 		try {
 			resp.required( "feedId", sub.getFeedId(), "");
+		} catch ( RequiredFieldException rfe ) {
+			try {
+				resp.required( "feedName", sub.getFeedName(), "");
+			}catch ( RequiredFieldException rfe2 ) {
+				logger.debug( resp.toString() );
+				return resp.error();
+			}
+			// if we found a FeedName instead of a FeedId then try to look it up.
+			List<Feed> nfeeds =  feeds.getAllFeeds( sub.getFeedName(), sub.getFeedVersion(), "equals");
+			if ( nfeeds.size() != 1 ) {
+				logger.debug( "Attempt to match "+ sub.getFeedName() + " ver="+sub.getFeedVersion() + " matched " + nfeeds.size() );
+				return resp.error();
+			}
+			fnew = nfeeds.get(0);
+		}
+			
+		try {
 			resp.required( "dcaeLocationName", sub.getDcaeLocationName(), "");
-	
 		} catch ( RequiredFieldException rfe ) {
 			logger.debug( resp.toString() );
 			return resp.error();	
 		}
-		
-		FeedService feeds = new FeedService();
-		Feed fnew = feeds.getFeed( sub.getFeedId(), resp.getErr() );
+		// we may have fnew already if located by FeedName
 		if ( fnew == null ) {
-			logger.warn( "Specified feed " + sub.getFeedId() + " not known to Bus Controller");
+			fnew = feeds.getFeed( sub.getFeedId(), resp.getErr() );
+		}
+		if ( fnew == null ) {
+			logger.warn( "Specified feed " + sub.getFeedId() + " or " + sub.getFeedName() + " not known to Bus Controller");
 			resp.setCode(Status.NOT_FOUND.getStatusCode());
 			return resp.error();
 		}
-
 		DR_SubService dr_subService = new DR_SubService( fnew.getSubscribeURL());
 		ArrayList<DR_Sub> subs = fnew.getSubs();
 		logger.info( "num existing subs before = " + subs.size() );
@@ -157,7 +174,7 @@
 			logger.warn( "Specified feed " + sub.getFeedId() + " not known to Bus Controller");
 			return resp.error();
 		}
-		
+
 		DR_SubService dr_subService = new DR_SubService();
 		sub.setSubId(name);
 		DR_Sub nsub = dr_subService.updateDr_Sub(sub, resp.getErr() );
diff --git a/src/main/java/org/onap/dmaap/dbcapi/service/ApiService.java b/src/main/java/org/onap/dmaap/dbcapi/service/ApiService.java
index 6ae639d..48f81db 100644
--- a/src/main/java/org/onap/dmaap/dbcapi/service/ApiService.java
+++ b/src/main/java/org/onap/dmaap/dbcapi/service/ApiService.java
@@ -165,6 +165,7 @@
 
 	// test for presence of a required field
 	public void required( String name, Object val, String expr ) throws RequiredFieldException {
+		err.setCode(0);
 		if ( val == null  ) {
 			err.setCode(Status.BAD_REQUEST.getStatusCode());
 			err.setMessage("missing required field");
diff --git a/src/main/java/org/onap/dmaap/dbcapi/service/DR_SubService.java b/src/main/java/org/onap/dmaap/dbcapi/service/DR_SubService.java
index 99c8f31..9d233a5 100644
--- a/src/main/java/org/onap/dmaap/dbcapi/service/DR_SubService.java
+++ b/src/main/java/org/onap/dmaap/dbcapi/service/DR_SubService.java
@@ -98,7 +98,7 @@
 		String resp = prov.doPostDr_Sub( sub, apiError );
 		if ( "Yes".equals(unit_test) ) {
 			resp = simulateResp( sub, "POST" );
-			apiError.setCode(200);
+			apiError.setCode(201);
 		}
 		logger.debug( "addDr_Sub resp=" + resp );
 
@@ -110,7 +110,7 @@
 			snew.setLastMod();
 			addEgressRoute( snew, apiError );
 			dr_subs.put( snew.getSubId(), snew );	
-			apiError.setCode(200);
+			apiError.setCode(201);
 		} else {
 			apiError.setCode(400);
 		}
diff --git a/src/test/java/org/onap/dmaap/dbcapi/resources/DR_PubResourceTest.java b/src/test/java/org/onap/dmaap/dbcapi/resources/DR_PubResourceTest.java
index 42c8014..d4f71bb 100644
--- a/src/test/java/org/onap/dmaap/dbcapi/resources/DR_PubResourceTest.java
+++ b/src/test/java/org/onap/dmaap/dbcapi/resources/DR_PubResourceTest.java
@@ -98,6 +98,18 @@
 		return dr_pub;
 	}
 	
+	private DR_Pub addPubByName( String d, String un, String up, String feedName) {
+		DR_Pub dr_pub = new DR_Pub( d, un, up, null, "" );
+		dr_pub.setFeedName(feedName);
+		Entity<DR_Pub> reqEntity2 = Entity.entity( dr_pub, MediaType.APPLICATION_JSON);
+		Response resp = target( "dr_pubs").request().post( reqEntity2, Response.class);
+		System.out.println( "POST dr_pubs resp=" + resp.getStatus() );
+		assertTrue( resp.getStatus() == 201 );
+		dr_pub = resp.readEntity( DR_Pub.class );
+		
+		return dr_pub;
+	}
+	
 	@Test
 	public void GetTest() {
 		Response resp = target( "dr_pubs").request().get( Response.class );
@@ -119,6 +131,20 @@
 
 		DR_Pub dr_pub = addPub( d, un, up, feed.getFeedId() );
 	}
+	
+	@Test
+	public void PostTestByName() {
+
+		Feed feed = addFeed( "pubPostTest2", "post unit test" );
+		System.out.println( "fpubPostTest: feedId=" + feed.getFeedId());
+		
+		String d, un, up;
+		d = "central-onap";
+		un = "user1";
+		up = "secretW0rd";
+
+		DR_Pub dr_pub = addPubByName( d, un, up, "pubPostTest2" );	
+	}
 
 	@Test
 	public void PutTest() {
diff --git a/src/test/java/org/onap/dmaap/dbcapi/resources/DR_SubResourceTest.java b/src/test/java/org/onap/dmaap/dbcapi/resources/DR_SubResourceTest.java
index 917507f..2227870 100644
--- a/src/test/java/org/onap/dmaap/dbcapi/resources/DR_SubResourceTest.java
+++ b/src/test/java/org/onap/dmaap/dbcapi/resources/DR_SubResourceTest.java
@@ -129,7 +129,21 @@
 		
 		return dr_sub;
 	}
-	
+	private DR_Sub addSubByName( String d, String un, String up, String feedName ) {
+		DR_Sub dr_sub = new DR_Sub( d, un, up, null, 
+				"https://subscriber.onap.org/foo", "https://dr-prov/sublog", true );
+		
+		dr_sub.setFeedName(feedName);
+
+		Entity<DR_Sub> reqEntity2 = Entity.entity( dr_sub, MediaType.APPLICATION_JSON);
+		Response resp = target( "dr_subs").request().post( reqEntity2, Response.class);
+		System.out.println( "POST dr_subs resp=" + resp.getStatus() );
+		assertTrue( resp.getStatus() == 201 );
+		dr_sub = resp.readEntity( DR_Sub.class );
+		
+		return dr_sub;
+	}
+
 	@Test
 	public void GetTest() {
 		Response resp = target( "dr_subs").request().get( Response.class );
@@ -153,6 +167,20 @@
 	}
 
 	@Test
+	public void PostTestByName() {
+
+		Feed feed = addFeed( "subPostTest2", "post unit test" );
+		System.out.println( "subPostTest2: feedId=" + feed.getFeedId());
+		
+		String d, un, up;
+		d = "central-onap";
+		un = "user1";
+		up = "secretW0rd";
+
+		DR_Sub dr_pub = addSubByName( d, un, up, feed.getFeedName() );
+	}
+
+	@Test
 	public void PutTest() {
 
 		Feed feed = addFeed( "subPutTest", "put unit test");
@@ -172,6 +200,7 @@
 		System.out.println( "PUT dr_subs resp=" + resp.getStatus() );
 		assertTrue( resp.getStatus() == 200 );
 	}
+
 /*
  * TODO: figure out how to check delete() response
 	@Test
